这个愚蠢的桌子到底有什么问题?
\begin{table}[h]
\centering{
\begin{tabular} {l l l l l l l l}
\hline
B & F & C & P & B \lor F & P \lor C & \lnot (F \land C) & \lnot (P \land B) \\ % ERROR= missing $ inserted
T & T & T & T \\
\hline
\end{tabular}
}
\end{table}
答案1
LaTeX 擅长排版数学,但它不具备千里眼的能力:除非你告诉它,否则它不知道你想要排版一些数学公式。
一些命令只能在数学模式下使用,如果在该模式之外发现它们则引发错误,这是告诉用户出现问题的最佳方式。
确实,排版代码时出现的第一个错误是
! Missing $ inserted.
<inserted text>
$
l.5 B & F & C & P & B \lor
F & P \lor C & \lnot (F \land C) & \lnot ...
这恰恰意味着 TeX 在不合适的地方发现了一个数学命令。TeX 的作者可以对其进行编程,使其对不合适的符号使用数学模式,但这很容易导致排版不佳。
有一个大的之间的区别
B $\lor$ F
和
$B\lor F$
如下图所示:
主要的区别在于字母的形状。几个世纪以来,表示数学变量的字母一直以斜体排版,而在整个公式中使用数学模式可以确保这一点。某些印刷传统对大写变量使用直立类型,尤其是法语,并且可以设置 TeX 以使其遵循这种不同的样式。无论如何,当在数学公式中找到字母时,可以保证字母将按照希望的方式排版,而不受上下文的影响。
任何好的 LaTeX 指南都会告诉你哪些命令可以将其置于数学模式;有好几个,特别是如果你这样做
\usepackage{amsmath}
以便加载专门用于数学排版的包,它提供了数十种环境和命令,可以解决许多复杂数学公式的问题:多行对齐、分割方程、矩阵、点等等。
话虽如此,排版表格的最佳方式是什么?其中所有单元格都应处于数学模式?很简单,对整个表格使用数学模式:
\begin{table}[htp] % <---- don't forget t and p
\centering
$% start math mode
\begin{array} {l l l l l l l l}
\hline
B & F & C & P & B \lor F & P \lor C & \lnot (F \land C) & \lnot (P \land B) \\
T & T & T & T \\
\hline
\end{array}
$
\end{table}
请注意,这\centering
是一个不带参数的声明:它的意思是“在当前环境的持续时间内,以居中方式排版”。
环境array
是数学模拟tabular
:它必须以数学模式发出,因此它被$
符号包围,并且所有单元格都将隐式使用数学模式。
你可能想用直排版来排版“T”(代表“true”,如果我理解你的意图的话),以表示它不是一个变量。你可以定义
\newcommand{\True}{\mathrm{T}}
在序言中输入第二行
\True & \True & \True & \True \\
你的表格将导致
为什么使用长命令而不是单个字母?因为它增加了意义您的输入。这个特定的“T”具有非常具体的含义(逻辑真理),与任何其他用法都不同。更好的是,如果您将序言中的定义更改为
\newcommand{\True}{\top}
运行一次 LaTeX 就会改变全部那些 T(并且只表示“真”)更改为不同的符号(顺便说一下,逻辑学家经常将其与\bottom
表示“假”的符号一起使用)。
为特定任务定义宏是 (La)TeX 最有用的功能之一:这样,您的文档将尽可能独立于特定样式;您不必对特定约定进行硬编码,因此您可以自由地更改统一地如果情况允许(比如遇到挑剔的裁判或文字编辑),则应遵循惯例。