我刚刚注意到在等式中使用 $...$ 会产生与 \text{...} 和 \mbox{...} 类似的结果:
\[ x $ hello world $ y \]
也许由于方程的实现方式,此代码与
$ x $ hello world $ y $
你怎么认为?
更新
从回应来看,这似乎不是标准的,并且这个魔术需要 fleqn 和 amsmath。
\documentclass[fleqn]{article}
\usepackage{amsmath}
\begin{document}
hello world
\[ x $ hello world $ y \]
\[ x \mbox{ hello world } y \]
\[ x \text{ hello world } y \]
\end{document}
@Rmano 指出了括号的敏感性:
\[ x \left( $ hello world $ \right) y \]
但我说它只支持我的理论,即任何 eq 环境的实现都与 $ 相关。也就是说,第一个 $ 结束以 \[ 开头的数学部分,第二个 $ 打开一个新的数学部分。因此,此示例无法编译,原因与以下示例相同:
\[ \left( \]
or
$ \left( $ $ \right) $
答案1
是的,第一个显示中的代码不会产生错误:
\documentclass[fleqn]{article}
\usepackage{amsmath}
\begin{document}
hello world
\[ x $ hello world $ y \]
\[ x \mbox{ hello world } y \]
\[ x \text{ hello world } y \]
\end{document}
它似乎产生与后两者相同的结果,但只是偶然的,并且因为如何fleqn
实现。
它不显示错误不是表示输入正确。这确实是错误的,不应使用。
为什么它会起作用?因为\[
启动显示数学模式,但该fleqn
选项会让 LaTeX 在文本模式下构建一个框,然后重新启动数学模式。这就是机会发生的地方。然而,当不强制执行时,这种构造会产生错误,这一事实fleqn
应该告诉你它是错误的。事实确实如此。
答案2
\documentclass{article}
\begin{document}
text
\[ x $ hello world $ y \]
text
\end{document}
生产
! Display math should end with $$.
<to be read again>
l.6 \[ x $
hello world $ y \]
?
此时最好输入x
停止运行并修复错误。
如果您滚动跳过任何错误(或者您的编辑器以非停止模式运行 tex,因此 tex 总是滚动跳过错误),您可能能够使用 PDF 作为调试辅助工具,但它永远不能用作文档。
在这种情况下你会
这显然是没用的。显示数学只是 X显示hello world
后不在里面,是在显示数学中输入的内容在内联数学中排版,并且在数学之后输入的文本在数学模式中排版。
答案3
你写了,
我刚刚注意到
$...$
在方程中使用与\text{...}
和有类似的结果\mbox{...}
。
我猜想这一说法的正确性主要取决于您认为的“类似结果”。请考虑以下示例文档:
\documentclass{article}
\begin{document}
\hrule
\[ x $ hello world $ y \] % this is line 4 of the sample doc.
\smallskip
\hrule
\[ x \mbox{ hello world } y \]
\hrule
\end{document}
运行此代码会生成以下错误消息:
! Display math should end with $$.
<to be read again>
l.4 \[ x $
hello world $ y \]
?
! LaTeX Error: Bad math environment delimiter.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.4 \[ x $ hello world $ y \]
?
! Missing $ inserted.
<inserted text>
$
l.6 \hrule
?
输出结果如下:
就我个人而言,我不认为这两个结果看起来完全相似。事实上,屏幕截图的上半部分看起来像一场全面的排版灾难,而下半部分看起来正是我期望x \mbox{ hello world } y
在显示数学模式下排版得到的结果。
如果您不确定 TeX 的内联数学和显示数学模式有何不同,请随时发布新的查询。
答案4
从 LaTeX 的本质意义上讲,当您说“任何 eq 环境的实现都与 $ 相关”时,您并没有错。
按照 的定义latex.ltx
,\[
是一个宏(忽略\protect
垃圾)扩展为
\relax
\ifmmode
\@badmath
\else
\ifvmode
\nointerlineskip \makebox [.6\linewidth ]{}
\fi
$$
\fi
也就是说,它首先检查我们是否已经处于数学模式,如果是,它会发出错误。否则,它会检查我们是否处于垂直模式,如果是,它会稍微调整间距。然后(无论我们是否处于垂直模式)它都会调用$$
以进入显示数学模式。 amsmath
稍微改变一下——\[
成为 的简写\begin{equation*}
,这是一个真实的环境——但是行动将引擎置于显示数学模式仍然是通过完成的$$
。
从根本上来说,这是 TeX 本身的一个限制$$
:仅有的进入显示数学模式的方法($
也是仅有的进入内联数学模式的方法)。没有\hbox{}
类似原始控制序列的数学模式来排版其参数。如果 Knuth 今天要重来,也许他会做不同的事情,但事实就是如此。
话虽如此,还有其他事情发生,因为如果我喂食这文件清楚的TeX,我遇到一个严重错误:
$$ a $ plus $ b $$
\bye
==>
! Display math should end with $$.
<to be read again>
<*> $$ a $
plus $ b $$
我很惊讶地听到 amsmath+fleqn抑制这个错误,我怀疑它是故意的,而且我也不知道它是怎么发生的。