“

每当我尝试编译以“[”作为行中第一个字符的表时,都会出现错误:

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

对我来说没有错误。

无论如何,您都可以用牙套进行保护{ }

 {[some text]}

编辑:正如@tohecz 所建议的那样正确的解决方案

答案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 解释的那样,\\寻找一个符合垂直间距规范的括号。

最好的解决方案是全部情况下,无论是在tabulararray甚至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}

在此处输入图片描述

相关内容