无法在 XeTeX 中将 \raisebox 添加到目录

无法在 XeTeX 中将 \raisebox 添加到目录

在 XeLaTeX 中我定义了以下命令:

\newcommand*{\PoETeX}{P\kern -.15em\raisebox{-0.21em}{O}\kern -.05em E\TeX}

作为一种简单(非稳健)的方式来创建一个模仿的愚蠢标志\LaTeX

它工作正常,直到我尝试用以下类似方法将其插入到目录中:

\addcontentsline{toc}{section}{\PoETeX}

此时我得到以下信息xelatex

! \reserved@a 的参数有一个额外的 }。\par l.11 \addcontentsline{toc}{section}{\PoETeX}

该问题似乎是由以下原因引起的\raisebox— 取出 raisebox,或使用\addcontentsline*可消除错误。

下面是一个最小的例子:

\documentclass[a4paper,11pt]{article}

\begin{document}
\thispagestyle{empty}

\newcommand*{\PoETeX}{P\kern -.15em\raisebox{-0.21em}{O}\kern -.05em E\TeX}

\addcontentsline{toc}{section}{\PoETeX}
\section*{\PoETeX}

\begin{verse}

There once was a poem called \PoETeX\\
That's name sounded somewhat /pəˈθɛtɛk/.\\
\hspace*{2em}It was really quite sad,\\
\hspace*{2em}to see pronunciation so bad,\\
And to read such a terrible /ˈlɪme(ə)rɛk/!

\end{verse}
\end{document}

答案1

如果你打算经常在移动参数中使用\PoETeX,最好使用

\DeclareRobustCommand*{\PoETeX}{%
  P\kern -.15em\raisebox{-0.21em}{O}\kern -.05em E\TeX}

因此您不必\protect在很多地方放置命令前面的内容。

粗略地说,使用 定义命令\DeclareRobustCommand就像\protect在需要时在命令前面加上 一样。不要养成定义全部像这样的命令:仅在必要时使用该技术。


替代定义:

\protected\def\PoETeX{%
  P\kern -.15em\raisebox{-0.21em}{O}\kern -.05em E\TeX}

这实际上比更有效\DeclareRobustCommand,但具有使用低级命令的缺点。

答案2

您需要保护脆弱的命令\PoETeX

 \addcontentsline{toc}{section}{\protect\PoETeX}

相关内容