章节标题中的简写字符(Xe(La)TeX)

章节标题中的简写字符(Xe(La)TeX)

我已经学会了如何通过命令定义简写

\useshorthands{(a character, e.g. ')}  

在序言和

\defineshorthand{(shorthand code)}{(expansion)}  

就在 之后\begin{document},例如\defineshorthand{'a}{apple}«'a»排版成«apple»。问题是,当我尝试'在节、小节、小小节或章的标题中放置速记字符(在我的情况下是撇号 )并将其与目录结合时,我收到一条显然与 toc 文件有关的错误消息。所有这些,自然地,在创建命令 之后\newcommand{\6}{'\Gr{}},其中\Gr是与默认字体相同的字体系列,创建该命令是为了避免排版不应该是速记的速记,因为 'a 在任何上下文中都会变成 apple,即使它是 ' a 中间有空格。因此,部分标题包含命令\6。为什么会发生这种情况?我该如何解决?

例如,错误发生于:

\documentclass[a4paper]{report}
\usepackage[italian]{babel}
\useshorthands{'}

\begin{document}  
\defineshorthand{'a}{apple}  

\section{Un'\,arpa}  
\tableofcontents  

\end{document}

产生的错误是:

.mu2.toc:2: Missing $ inserted.  
<inserted text>  
$  
l.2 ...t@token \egroup \Gr {}arpa}{1}  
{section.0.1}  

? 

完整的 .toc 文件内容如下:

\select@language {italian}  
\contentsline {section}{\numberline {0.1}Un^\bgroup 
    \prime \futurelet \@let@token \egroup \,arpa}{1}

最后两行合为一行。

答案1

'首先不要将其用作简写字符。就这样。

为什么会出现这种奇怪的行为?这有点复杂,但我还是会尝试一下。

  1. 某些字符可能处于“活动”状态,因此它们的行为类似于宏;主要示例是~。Babel 简写前缀也会变为活动状态。

  2. 有些字符可能“数学激活”,这意味着它们仅在数学模式下表现得像宏,但它们仍然不可扩展。主要示例是 ASCII 撇号',它在数学模式下几乎等同于输入^{\prime}

  3. 节标题是“移动参数”:它们保存在特殊位置,写入文件时会展开其中的宏.aux。活动字符会展开,数学活动字符则不会展开。

  4. 当 Babel 激活简写前缀时,它会确保其行为与成为简写前缀之前(后面没有定义的组合)的行为相同。

  5. 如果有\useshorthands{'},撇号就会变为有效。

  6. 如果有\section{Un'\,arpa},则当.aux文件写出时,令牌'就会扩展。

  7. 该组合'\,未定义为简写,因此 LaTeX 使用'在将其定义为简写字符之前分配给活动字符的任何含义。

  8. '数学模式(活动时)中的扩展为^\bgroup\prim@s

  9. 标记^\bgroup不可扩展;的扩展\prim@s

    \prime\futurelet\@let@token\pr@m@s
    
  10. 上面的前三个 token 是不可扩展的,最后一个是可扩展的,并且变为

    \ifx'\@let@token
      \expandafter\pr@@@s
    \else
      \ifx^\@let@token
        \expandafter\expandafter\expandafter\pr@@@t
      \else
        \egroup
      \fi
    \fi
    

    并且,此时,事情真的不可预测,因为\let@token可以是任何值。在您的例子中,它不等同于',因此遵循错误分支,并且\let@token也不等同于^,因此\egroup生成 ,这是不可扩展的。

  11. 结果:在.aux文件中你发现的是乱码,准确地说

    Un^\bgroup \prime \futurelet \@let@token \egroup \,arpa
    

    但您可能会发现其他结果,具体取决于\@let@token发生的情况。

相关内容