我编写了一个自己的小脚本系统,使用问题数据库来生成家庭作业和测试。下面是一个特定的问题,它为我提供了最后一个选项“d)”的问题:
Problem 5. What is the quadratic formula?
a) $${b \pm \sqrt{b^2 - 4ac} \over 2a}$$ \ \ \ \ \ b) $${-b \pm \sqrt{4ac - b^2} \over 2a}$$ \ \ \ \ \ c) $${-b \pm \sqrt{b^2 - 4ac} \over 2a}$$ \ \ \ \ \ \hbox{ d) $${-b \pm \sqrt{4ac - b^2} \over 2}$$ }
\hbox 总是由脚本生成的,它的作用是(通常)防止选项被分成多行——尽管在这种情况下,我破例尝试换行,这样等式就会更大。无论如何,它似乎弄乱了“$$”,因此 LaTeX 会产生错误:
! Missing $ inserted.
<inserted text>
$
l.39 ...over 2a}$$ \ \ \ \ \ \hbox{ d) $${-b \pm
\sqrt{4ac - b^2} \over 2}...
似乎无论我使用“$$...$$”还是“[...]”或“\begin{equation}...\end{equation}”,都无关紧要。如果我使用单个“$...$”结构,它确实有效,但结果看起来太小了,不符合我的口味。
有人能提点建议吗?我想保留 \hbox{} 作为一般分组指令,所以我的偏好是可以在其中工作的东西。
(当然,取出 \hbox{} 也可以,但正如我所说,这是我的脚本为整个数据库自动生成的,通常我想要这种行为。我想编辑这个特定的问题,而不是整个脚本……如果可能的话。)谢谢。
答案1
在受限水平模式下,$$
生成一个空公式。摘自 TeXbook 第 87 页:
每当 TeX 查看输入标记以决定下一步该做什么时,当前模式会对该标记的含义产生潜在影响。例如,
\kern
在垂直模式下指定垂直间距,但在水平模式下指定水平间距;数学移位字符 '$
' 会导致从水平模式进入数学模式,但在数学模式下出现时会导致退出数学模式;在$$
水平模式下出现两个连续的数学移位 ( ) 将启动显示数学模式,但在受限水平模式下,它们仅表示一个空的数学公式。TeX 使用某些操作在某些模式下不合适的事实来帮助您从可能潜入手稿的错误中恢复。第 24 至 26 章准确地解释了在每种可能的模式下每个可能的标记会发生什么。
有关此内容的更多详细信息,另请参阅第 25 章末尾第 287 页。
您还可以在第 201 页的 TeX by Topic 中找到一些内容:
例外:在受限的水平模式下无法显示,因此
\hbox
序列内部$$
是一个空的数学公式,而不是显示公式的开始。
实际上,在受限水平模式下显示公式是没有意义的。也许你想要
\hbox{... $\displaystyle ...$ ...}
如果你正在使用 LaTeX,你永远都不应该使用$$
,请参阅为什么\[ … \]
优于$$
?
答案2
好的,egreg 按主题引用了 TeXbook 和 TeX,我可以引用 TeXbook naruby,第 93 页,“主处理器的六种模式”一节:
上一个 下一个 标记 ... 当
$_3
先出现时,TeX 检查同一 catcode 中是否有下一个标记 3。这是为了区分内部或显示数学模式。此功能在内部水平模式下有一个例外:符号$$
表示不进入显示模式,但进入并立即离开内部数学模式。