为什么不能仅使用反斜杠来转义插入符号和波浪号?

为什么不能仅使用反斜杠来转义插入符号和波浪号?

我可以用反斜杠转义一些特殊字符。

\documentclass{article}
\begin{document}
\# \$ \% \& \_ \{ \}
\end{document}

但是为什么我不能只用反斜杠^来转义~?例如,下面的代码不起作用。

\documentclass{article}
\begin{document}
\^
\end{document}

这会导致 texlive 出现以下错误。

$ pdflatex foo.tex 
This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2015/dev/Debian) (preloaded format=pdflatex)
 restricted \write18 enabled.
entering extended mode
(./foo.tex
LaTeX2e <2014/05/01>
Babel <3.9l> and hyphenation patterns for 2 languages loaded.
(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo)) (./foo.aux)
! Missing \endcsname inserted.
<to be read again> 
                   \global 
l.4 \end
        {document}
? 
! Emergency stop.
<to be read again> 
                   \global 
l.4 \end
        {document}
!  ==> Fatal error occurred, no output PDF file produced!
Transcript written on foo.log.

事实上,我必须先用反斜杠转义它们,然后再添加{}后缀才能使其正常工作。

\documentclass{article}
\begin{document}
\^{}
\~{}
\end{document}

我理解{},即空的参数列表会强制 TeX 再次将其视为命令的结束和文本的开始,但我想了解为什么{}有必要。

两个问题:

  1. 这些字符为什么不能\单独逃脱?
  2. \^{}和之间有什么区别吗\^\?它们似乎给出相同的输出,但我想知道它们之间是否存在任何差异,在任何情况下都可能产生不同的结果?

答案1

虽然我们通常说这\是转义字符,但它实际上是 TeX 用来引入控制序列. 控制序列有两种类型。控制字\由加一串字母组成。控制符号\由加上一个非字母组成。

但无论哪种情况,都不是\逃避本身。您认为“转义”的每个字符实际上都是控制符号,它们都有实际定义。有些只是扩展为相应的字符,但有些则没有。以下是它们的实际定义:

*\show\#
> \#=\char"23.

*\show\$
> \$=\char"24.

*\show\%
> \%=\char"25.

*\show\&
> \&=\char"26.

*\show\{
> \{=macro:
->\delimiter "4266308 .

*\show\}
> \}=macro:
->\delimiter "5267309 .

*\show\^
> \^=macro:
#1->{\accent 94 #1}.

*\show\'
> \'=macro:
#1->{\accent 19 #1}.

*\show\~
> \~=macro:
#1->{\accent "7E #1}.

\^请注意,在、\~和的情况下,\'宏定义采用参数。因此,它们将把下一个字符作为该参数。如果您不希望发生这种情况,则需要使用 明确停止它{}

回答你的第二个问题,\^{}与 并不相同,\^\因为后者会插入空格,而前者不会。例如:

\^\ foo \^{}foo

将产生以下输出:

片段输出

答案2

艾伦已经解释了为什么\^采用一个参数,但也请注意,latex 具有\textbackslash\textasciicircum\textasciitilde生成\ ^ ~ 在原始 OT1 编码的情况下\textasciicircum,并且 \textasciitilde实际上与\^{}和相同\~{},即在空基上放置一个重音符,并从数学符号字体​​中\backslash获取\,因为 OT1 编码不包含这些字符。

然而如果你使用 T1 (或者任何有\^~字符的正常编码) 那么\textasciicircum\textasciitilde将在那些位置上使用字体中的字符, 这些字符通常比重音符号更大更低, 并且\backslash将使用\当前字体中的 。

相关内容