每当我尝试编译以“[”作为行中第一个字符的表时,都会出现错误:
Missing number, treated as zero.
Illegal unit of measure
例子:
\begin{table}[htb]
\centering
\begin{tabular}{r|r}
[some text ] & ... \\
[some more text ] & ...
\end{tabular}
\caption{...}
\label{tab:...}
\end{table}
我怎样才能将“[”打印为一行中的第一个字符?
答案1
答案2
下面是一个可以说明您的问题的 MWE:
\documentclass{article}
\begin{document}
\begin{table}
\begin{tabular}{r|r}
[some text ] & ... \\
[more text ] & ... \\
\end{tabular}
\end{table}
\end{document}
问题是\\[1 in]
在行尾使用 来跳过1in
(例如)额外的垂直空间。因此\\
是一个宏,并且[1in]
是该宏的一个可选参数。
当 TeX 读取\\
,然后读入换行符,然后[
,它会忽略换行符(就像它通常对宏后的所有空格所做的那样)并继续进行,就像它在扩展 一样\\[more text ]
。但这显然没有任何意义,因为more text
不是长度,特别是它不是以数字开头。因此出现错误:Missing number, treated as zero. Illegal unit of measure
。
它没有在您的原始 MWE 中重现,因为您只有一行在开头和\\
结尾处带有括号文本。它发生在一行的结尾和另一行的开头之间。
正如 Sigur 所建议的,您可以通过在括号文本周围添加括号来阻止 TeX 以这种方式扩展。TeX 将按\\{[more text ]}
预期方式扩展,因为它“看起来”不再像正在使用可选参数。egreg 的建议\\\relax
将类似地阻止宏处理器将括号文本读取为可选参数。
答案3
问题在于,正如 Matthew Leingang 解释的那样,\\
寻找一个符合垂直间距规范的括号。
最好的解决方案是全部情况下,无论是在tabular
,array
甚至eqnarray
(无论如何都不应该使用)中,是\relax
在 之后添加\\
,当 a[
如下时:
\documentclass{article}
\begin{document}
\begin{table}
\begin{tabular}{r|r}
[some text] & ... \\ \relax
[more text] & ... \\
\end{tabular}
\end{table}
\end{document}
这确实有点麻烦,但是这种情况不应该经常发生。
请注意,amsmath
环境不会受到此问题的影响:
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{align*}
v&=\begin{bmatrix}
a\\
[b]\\
c
\end{bmatrix}\\
[w]&=x
\end{align*}
\end{document}