我输入了以下代码:
\begin{tabular} {l{4cm} l{5cm}}
hello & foo\\
hello & bar\\
\end{tabular}
它给了我一个错误:
! LaTeX 错误:数组 arg 中的非法字符。
请参阅 LaTeX 手册或 LaTeX Companion 了解解释。输入 H 可立即获得帮助。...
l.199 \begin{tabular} {l{4cm} l{5cm}}
为什么不起作用?我正在尝试制作一个表格,表格的文本左对齐,单元格宽度固定。如果我只指定{l
l},它就可以工作,但如果指定宽度,它就会给出错误。
答案1
标准列类型为l
、c
和r
,p
分别代表left aligned
、centered
或right alignment
和parbox
。
只有p
- 类型可以有宽度参数,即p{somewidth}
,可以用任何尺寸/知道来width
指定。TeX
LaTeX
-类型p
有效地\parbox
允许包装文本和内容,这在l
等类型中是不可能的(直接)实现的,例如itemize
或enumerate
列表。
例如,该array
包提供了m
用于垂直(“中间”)对齐的类型。除此之外,array
还具有\newcolumntype
允许定义其他列类型的宏,但是,基于现有的“基本”类型,即r
、或l
。c
p
该tabularx
包提供了X
列类型并siunitx
允许使用S
列类型。
下面是一个显示宽度效果的小示例代码:
\begin{tabular}{|p{4cm}|p{6cm}|}
将提供一个宽度为 的表格4cm + 5cm + 4\tabcolsep + 3\arrayrulewidth
,因为每列都有左右\tabcolsep
空间,后者默认为6pt
;并且有三个|
,因此3\arrayrulewidth
添加了长度。
总体来说,甚至p{4cm}p{5cm}
会比预想的还要宽9cm
。
\documentclass{article}
\begin{document}
\begin{tabular}{|p{4cm}|p{5cm}|}
\hline
foo & bar
\end{tabular}
\begin{tabular}{|@{}p{4cm}@{}|@{}p{5cm}@{}|}
\hline
foo & bar
\end{tabular}
{%
\renewcommand{\arrayrulewidth}{0pt}%
\begin{tabular}{@{}p{4cm}@{}@{}p{5cm}@{}}
foo & bar
\end{tabular}
}
\end{document}
答案2
序言中的这个解决方法解决了这个问题。您可以简单地使用C{width}
居中条目。如果偏爱 raggedright 或 raggedleft,请将 C 替换为 L 或 R。
\usepackage{array}
\newcommand{\PreserveBackslash}[1]{\let\temp=\\#1\let\\=\temp}
\newcolumntype{C}[1]{>{\PreserveBackslash\centering}p{#1}}
\newcolumntype{R}[1]{>{\PreserveBackslash\raggedleft}p{#1}}
\newcolumntype{L}[1]{>{\PreserveBackslash\raggedright}p{#1}}