我的主要目标是禁用表格中的文本对齐,只保留左对齐文本。我已加载包array
并定义了一个自定义包,\newcolumntype
如下所示:
\usepackage{array}
\newcolumntype{x}[1]{>{\raggedright}p{#1}}
当在环境中使用它时tabular
,一切都正常,直到最后一列,它抛出这个错误:
./temp.tex:96: Misplaced \noalign.
\midrule ->\noalign
{\ifnum 0=`}\fi \@aboverulesep =\aboverulesep \global \@...
l.96 \midrule
?
使用\begin{tabular}{@{} x{28mm} x{20mm} x{20mm} p{25mm} @{}}
可以正常工作(但会引发 \hbox 未满警告),但使用\begin{tabular}{@{} x{28mm} x{20mm} x{20mm} x{25mm} @{}}
会引发上述错误。
为什么不允许我在最后一列上使用自定义列类型?似乎我遗漏了一些显而易见的简单解决方案。
和\begin{tabular}{@{} x{28mm} x{20mm} x{20mm} p{25mm} @{}}
:
答案1
这是一个已知问题。当您说 时\raggedright
,命令\\
被重新定义。这不会造成任何损害,直到您想要终止表格行:LaTeX 发现 的\\
定义\raggedright
与 中的含义不同tabular
。写
\newcolumntype{x}[1]{>{\raggedright\arraybackslash}p{#1}}
\newline
如果您想在某个单元格中终止一行,请使用。或者使用您的定义并使用 终止表格行\tabularnewline
。
答案2
除了 egreg 的回答之外,\RaggedRight
来自ragged2e
包的命令没有这个问题。这有效:
\usepackage{array},
\usepackage[originalparameters]{ragged2e} % The option prevents hyphentation rather than making it rare
\newcolumntype{x}[1]{>{\RaggedRight}p{#1}}
答案3
最简单的解决方案:添加一个空列。根据您构建表格的方式,您可以将其宽度设为最小(例如,使用 p{size}),或者让 LaTeX 自行解决。我在最近的一篇论文中使用了这两种方法,并解决了这个问题。唯一的缺点是其中一个表格使用了 \hline 和垂直规则,表格右侧有一个“悬垂”。我说,接受它吧,生命短暂。