![具有 tabularx 和多列和多行的自定义表](https://linux22.com/image/460335/%E5%85%B7%E6%9C%89%20tabularx%20%E5%92%8C%E5%A4%9A%E5%88%97%E5%92%8C%E5%A4%9A%E8%A1%8C%E7%9A%84%E8%87%AA%E5%AE%9A%E4%B9%89%E8%A1%A8.png)
我想用 latex 创建自定义表格,但我的表格大小有问题,它没有在文档宽度的末尾结束。我不明白为什么,因为 5x0.2\textwidth = 1 \textwidth。
\documentclass{article}
\usepackage{graphicx}
\usepackage[export]{adjustbox}
\usepackage{tabularx} % in the preamble
\usepackage{multirow}
\usepackage{geometry}
\geometry{
a4paper,
total={170mm,257mm},
left=10mm,
right= 10mm,
top=10mm,
}
\begin{document}
\noindent\begin{tabularx}{\textwidth} {
| >{\centering\arraybackslash}m{.2\textwidth}
| >{\centering\arraybackslash}m{.2\textwidth}
| >{\centering\arraybackslash}m{.2\textwidth}
| >{\centering\arraybackslash}m{.2\textwidth}
| >{\centering\arraybackslash}m{.2\textwidth} |
}
\hline
\multirow{5}{*}{logo} & \multicolumn{3}{c|}{C A} & M \\ \cline{2-5}
& \multicolumn{3}{c|}{Titre} & R \\ \cline{2-5}
& a & b & c & B \\ \cline{2-5}
& d & e & f & Autres \\ \cline{2-5}
& h & i & j & DATE \\ \hline
\end{tabularx}
\end{document}
我该如何解决这个问题?
答案1
tabularx
表应至少有一个 X 列或从其派生的类型- 如果某些列应该有不同的宽度,您可以定义它们之间的比率,或者将某些列写为
p{<width>}
或m{<width>}
- 在你的情况下我宁愿使用
tabularray
包而不是tabularx
因为- 代码更短,
- 单元格内容垂直间距更好(居中)
- 如果需要的话,可以简单地改变列宽之间的比例
例如,当所有列具有相同的宽度时:
\documentclass{article}
\usepackage{geometry}
\geometry{a4paper,
total={170mm,257mm},
hmargin=10mm,
top=10mm,
}
\usepackage{tabularray}
\begin{document}
\noindent\begin{tblr}{hlines, vlines,
colspec = {*{5}{X[c]}}
}
\SetCell[r=5]{c} logo
& \SetCell[c=3]{c} C A
& & & M \\
& \SetCell[c=3]{c} Titre
& & & R \\
& a & b & c & B \\
& d & e & f & Autres \\
& h & i & j & DATE \\
\end{tblr}
\end{document}
单元格宽度不同的情况:
\documentclass{article}
\usepackage{geometry}
\geometry{a4paper,
total={170mm,257mm},
hmargin=10mm,
top=10mm,
}
\usepackage{tabularray}
\begin{document}
\noindent\begin{tblr}{hlines, vlines,
colspec = {X[0.8, c] X[c] X[2, c] X[c] X[1.2, c]}
}
\SetCell[r=5]{c} logo
& \SetCell[c=3]{c} C A
& & & M \\
& \SetCell[c=3]{c} Titre
& & & R \\
& a & b & c & B \\
& d & e & f & Autres \\
& h & i & j & DATE \\
\end{tblr}
\end{document}
答案2
我有一个可以运行的(不完美的)代码,可以完成以下输出:
代码:
\documentclass{article}
\usepackage{graphicx}
\usepackage[export]{adjustbox}
\usepackage{tabularx} % in the preamble
\usepackage{multirow}
\usepackage{geometry}
\geometry{
a4paper,
total={170mm,257mm},
left=10mm,
right= 10mm,
top=10mm,
}
\begin{document}
\noindent\begin{tabularx}{\textwidth} {
| >{\centering\arraybackslash}m{.18\textwidth}
| >{\centering\arraybackslash}m{.18\textwidth}
| >{\centering\arraybackslash}m{.18\textwidth}
| >{\centering\arraybackslash}m{.18\textwidth}
| >{\centering\arraybackslash}m{.18\textwidth} |
}
\cline{1-5}
\multirow{5}{*}{logo} & \multicolumn{3}{c|}{C A} & M \\ \cline{2-5}
& \multicolumn{3}{c|}{Titre} & R \\ \cline{2-5}
& a & b & c & B \\ \cline{2-5}
& d & e & f & Autres \\ \cline{2-5}
& h & i & j & DATE \\ \cline{1-5}
\end{tabularx}
\end{document}
答案3
这有效:
\documentclass{article}
\usepackage{graphicx}
\usepackage[export]{adjustbox}
\usepackage{tabularx} % in the preamble
\usepackage{multirow}
\usepackage{geometry}
\geometry{
a4paper,
%total={170mm,257mm},
left=10mm,
right= 10mm,
top=10mm,
}
\begin{document}
\noindent\begin{tabularx}{\textwidth} {
*{5}{| >{\centering\arraybackslash}X}|
}
\hline
\multirow{5}{*}{logo} & \multicolumn{3}{c|}{C A} & M \\ \cline{2-5}
& \multicolumn{3}{c|}{Titre} & R \\ \cline{2-5}
& a & b & c & B \\ \cline{2-5}
& d & e & f & Autres \\ \cline{2-5}
& h & i & j & DATE \\ \hline
\end{tabularx}
\end{document}
列X
将拉伸以填充可用空间,这必须考虑垂直线和列间空间。这是包存在的唯一原因tabularx
……否则,您只需使用正常tabular*
环境即可。
您还可以使用乘数来避免重复输入5次相同的内容。
我还删除了total
几何中的一个说明符:如果您给出纸张尺寸、左边距和右边距,则您已经完全指定了尺寸......
答案4
你似乎没有真的想要一个tabularx
环境。特别是,您似乎不需要在任何单元格中自动换行。相反,您似乎“只是”想创建一个具有五个等宽列的表格。
如果这个解释是正确的,我建议您(a)使用tabular
环境而不是tabularx
环境和(b)加载array
包并使用其w
列类型,这可以让您指定列所需的可用的宽度。(在 LaTeX 表中,列的总宽度通常是 (a) 可用宽度与 (b) 两侧的任何空白填充的总和,由参数给出\tabcolsep
。)
下表有五列,可用宽度为2cm
。
\documentclass{article}
\usepackage{array} % for 'w' column type
\usepackage{multirow}
\usepackage{geometry}
\geometry{a4paper, total={170mm,257mm}, top=10mm}
\begin{document}
\begin{center}
\setlength\extrarowheight{2pt} % for a less cramped "look"
\begin{tabular}{ | *{5}{w{c}{2cm}|} }
\hline
\multirow{5}{*}{logo}
& \multicolumn{3}{c|}{C A} & M \\ \cline{2-5}
& \multicolumn{3}{c|}{Titre} & R \\ \cline{2-5}
& a & b & c & B \\ \cline{2-5}
& d & e & f & Autres \\ \cline{2-5}
& h & i & j & DATE \\ \hline
\end{tabular}
\end{center}
\end{document}