使用 $$ 将文本添加到等式中

使用 $$ 将文本添加到等式中

我刚刚注意到在等式中使用 $...$ 会产生与 \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抑制这个错误,我怀疑它是故意的,而且我也不知道它是怎么发生的。

相关内容