LaTeX初学者,不会用LaTeX打出如下的表格,希望能给出代码并解释一下。
基本要求:
宽度和页面宽度一致,对齐方式要按照图片内容,单元格合并与图片内容一致,第一条线和最后一条线加粗
引用chatGPT作答,以下是使用LaTeX制作该表格的代码:
\documentclass{article}
\usepackage{graphicx}
\usepackage{booktabs}
\usepackage{array}
\newcolumntype{M}[1]{>{\centering\arraybackslash}m{#1}}
\usepackage{makecell}
\renewcommand\theadfont{\bfseries}
\begin{document}
\begin{table}[htbp]
\centering
\caption{表格标题}
\begin{tabular}{@{\extracolsep{\fill}}M{0.18\linewidth}M{0.14\linewidth}M{0.14\linewidth}M{0.14\linewidth}M{0.14\linewidth}M{0.14\linewidth}@{}}
\toprule[2pt]
\thead{ } & \thead{国家1} & \thead{国家2} & \thead{国家3} & \thead{国家4} & \thead{国家5} \\
\midrule[1.5pt]
\multirow{3}{*}{\rotatebox{90}{大洲1}} & \makecell{内容1 \\ 内容2} & \makecell{内容1 \\ 内容2} & \makecell{内容1 \\ 内容2} & \makecell{内容1 \\ 内容2} & \makecell{内容1 \\ 内容2} \\
& \multicolumn{2}{c}{\includegraphics[width=0.28\linewidth]{example-image-a}} & \multicolumn{2}{c}{\includegraphics[width=0.28\linewidth]{example-image-a}} & \makecell{内容1 \\ 内容2} \\
& \multicolumn{2}{c}{\includegraphics[width=0.28\linewidth]{example-image-a}} & \multicolumn{2}{c}{\includegraphics[width=0.28\linewidth]{example-image-a}} & \makecell{内容1 \\ 内容2} \\
\cmidrule{2-6}
\multirow{3}{*}{\rotatebox{90}{大洲2}} & \makecell{内容1 \\ 内容2} & \makecell{内容1 \\ 内容2} & \makecell{内容1 \\ 内容2} & \makecell{内容1 \\ 内容2} & \makecell{内容1 \\ 内容2} \\
& \multicolumn{2}{c}{\includegraphics[width=0.28\linewidth]{example-image-a}} & \multicolumn{2}{c}{\includegraphics[width=0.28\linewidth]{example-image-a}} & \makecell{内容1 \\ 内容2} \\
& \multicolumn{2}{c}{\includegraphics[width=0.28\linewidth]{example-image-a}} & \multicolumn{2}{c}{\includegraphics[width=0.28\linewidth]{example-image-a}} & \makecell{内容1 \\ 内容2} \\
\cmidrule{2-6}
\multirow{3}{*}{\rotatebox{90}{大洲3}} & \makecell{内容1 \\ 内容2} & \makecell{内容1 \\ 内容2} & \makecell{内容1 \\ 内容2} & \makecell{内容1 \\内容2} & \makecell{内容1 \ 内容2} \
& \multicolumn{2}{c}{\includegraphics[width=0.28\linewidth]{example-image-a}} & \multicolumn{2}{c}{\includegraphics[width=0.28\linewidth]{example-image-a}} & \makecell{内容1 \ 内容2} \
& \multicolumn{2}{c}{\includegraphics[width=0.28\linewidth]{example-image-a}} & \multicolumn{2}{c}{\includegraphics[width=0.28\linewidth]{example-image-a}} & \makecell{内容1 \ 内容2} \
\bottomrule[2pt]
\end{tabular}%
\label{tab:my_table}%
\end{table}%
\end{document}
解释一下代码:
首先,我们使用\documentclass{article}
命令指定了LaTeX文档的类型,然后引入了必要的宏包,包括graphicx
(用于插入图片)、booktabs
(用于制作漂亮的表格线条)和array
(用于自定义表格列样式)。接下来,我们定义了一个M
列样式,它会居中内容并自动换行,用于控制表格中大多数列的样式。我们还使用makecell
宏包来允许我们在单元格中使用换行符,并使用\theadfont
命令定义表格头的字体样式。
在tabular
环境中,我们使用@{\extracolsep{\fill}}
指定了列之间的间距,并使用M
列样式定义了6列。在表格中,我们使用\toprule
、\midrule
和\bottomrule
命令定义表格的粗线条,以及\cmidrule
命令定义表格中的中等线条。
在表格中,我们使用\multirow
和\makecell
命令实现单元格合并和内容换行。对于需要合并单元格的行,我们使用\multicolumn
命令,并指定列数和包含的内容。对于需要旋转的表头,我们使用\rotatebox
命令,并指定旋转角度。最后,我们使用\includegraphics
命令插入图片,并指定图片的宽度。注意,我们在表格中的第二行和第三行中使用了相同的图像,因此我们只需要将其插入一次并使用\multicolumn
命令在表格中跨越两列。
此外,我们还使用了\caption命令和\label命令,分别用于给表格添加标题和标签。我们将标签命名为tab:my_table,以便在文档中引用该表格。
最后,我们使用\end{table}命令来结束表格环境,\end{document}命令来结束整个文档。
需要注意的一些细节:
为了使表格的宽度与页面宽度一致,我们使用了\linewidth来指定列宽度和图片宽度。具体来说,每列宽度为\linewidth/6,而每个图像宽度为\linewidth/3。
在表格中使用\cmidrule命令时,我们使用lr参数来指定线条应跨越的列。例如,\cmidrule(lr){1-2}表示在第一列和第二列之间绘制一条中等线条,并将线条向左和向右延伸。
为了使表格的第一条线和最后一条线加粗,我们使用了\toprule[2pt]和\bottomrule[2pt]命令,而不是\toprule和\bottomrule命令。其中2pt参数指定线条宽度为2点,可以根据需要进行调整。
希望这些解释能够帮助你理解表格的代码!
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
可以使用tabularx
和booktabs
宏包来实现你所需要的表格,代码如下:
\documentclass{article}
\usepackage{graphicx}
\usepackage{tabularx}
\usepackage{booktabs}
\begin{document}
\begin{table}[htbp]
\caption{表格标题}
\label{table:example}
\centering
\begin{tabularx}{\textwidth}{ccccccc}
\toprule[2pt] % 顶部双线
\multicolumn{2}{c}{\textbf{两个最优的组合}} & \multicolumn{2}{c}{\textbf{ 方案一}} & \multicolumn{2}{c}{\textbf{方案二}} & \\
\cmidrule(lr){1-2}\cmidrule(lr){3-4}\cmidrule(lr){5-6} % 中间分割线
\textbf{组合1} & \textbf{组合2} & 构件1 & 构件2 & 构件3 & 构件4 & \textbf{费用}\\
\midrule[1pt] % 中线
\multirow{2}{*}{\includegraphics[width=2cm,height=2cm]{example-image-a}} & \multirow{2}{*}{\includegraphics[width=2cm,height=2cm]{example-image-a}} & Y & & & Y & $C_1$ \\
& & & Y & Y & & $C_2$ \\
\midrule[0.5pt] % 中线
\multirow{4}{*}{\includegraphics[width=2cm,height=2cm]{example-image-b}} & \multirow{2}{*}{\includegraphics[width=2cm,height=2cm]{example-image-c}} & Y & & & & $C_3$ \\
& & & Y & & & $C_4$ \\
\cmidrule(lr){2-7} % 中间分割线
& \multirow{2}{*}{\includegraphics[width=2cm,height=2cm]{example-image-b}} & & & Y & Y & $C_5$ \\
& & & & & Y & $C_6$ \\
\bottomrule[2pt] % 底部双线
\end{tabularx}
\end{table}
\end{document}
上述代码中,用到了tabularx
宏包提供的tabularx
环境来创建表格,并使用了booktabs
宏包提供的\toprule
、\midrule
和\bottomrule
来绘制表格的上下边框以及中间的横线。其中,\toprule[2pt]
和\bottomrule[2pt]
可以让上下边框变为粗双线,\midrule[1pt]
表示中间的横线为粗单线,\midrule[0.5pt]
表示中间的横线为细单线。
在第一行中,使用了\multicolumn
命令将前两列单元格合并,并输出文字,不过需要以\textbf{}
命令包裹单元格内容,使其加粗。然后使用\cmidrule(lr){1-2}
和\cmidrule(lr){3-4}
等命令在上下两侧依次添加中间的竖线。
在第三行中,使用了\multirow
命令将某些单元格合并,并嵌入了一个图片。\includegraphics
命令可以导入图片,其中宽度和高度可以通过width
和height
参数来指定。最后一列的文字用\textbf{}
命令加粗处理。
如果我的回答解决了您的问题,请采纳!
latex
\documentclass{article}
\usepackage{graphicx} % 插入图片需要的宏包
\usepackage{multirow} % 合并单元格需要的宏包
\usepackage{tabularx} % 宽度自适应表格需要的宏包
\begin{document}
\begin{table}[htbp]
\centering
% 定义表格宽度和对齐方式
\begin{tabularx}{\linewidth}{|c|X|X|X|c|}
\hline
\multicolumn{2}{|c|}{\multirow{2}*{}} & \multicolumn{2}{|c|}{重复数量} & \multirow{2}*{}\\
\cline{3-4}
\multicolumn{2}{|c|}{} & 本步骤 & 累计 & \\
\hline
步骤 & 操作 & & & 是否可忽略 \\
\hline
1 & 开始 & & & 否 \\
\hline
2 & \multirow{2}*{打开第一步骤中的数据文件} & & & 否 \\
& & & & \\
\hline
3 & \multirow{2}*{计算电流吸收曲线} & & & 否 \\
& & & & \\
\hline
4 & \multirow{2}*{标定阻抗} & & & 否 \\
& & & & \\
\hline
5 & 计算样品纯度 & & & 否 \\
\hline
6 & \multirow{2}*{计算组分配比} & & & 否 \\
& & & & \\
\hline
7 & \multirow{2}*{生成报告文件} & & & 否 \\
& & & & \\
\hline
8 & 结束 & & & 否 \\
\hline
\end{tabularx}
% 加粗第一条线和最后一条线
\makebox[\linewidth]{\rule{\linewidth}{1pt}}
\end{table}
\end{document}