\section 中较小的长音符号使用

\section 中较小的长音符号使用

借助 Tobi 的代码,我能够生成更小的长音符号问题 263549,但如果我尝试在 \section、\subsection 等中使用它,Latex 会抛出“未定义的控制序列”。如何让命令 \smartmacron(代码如下)在标题中起作用?

\newlength\tmp
\newcommand{\smartmacron}[1]{%
   \settowidth{\tmp}{#1}%
   \makebox[\tmp][c]{%
      \rule[1.2ex]{0.6\tmp}{0.035em}%
   }\kern-\tmp#1%
}

Mnot-WE:

\documentclass{scrartcl}
\newlength\tmp
\newcommand{\smartmacron}[1]{%
   \settowidth{\tmp}{#1}%
   \makebox[\tmp][c]{%
      \rule[1.2ex]{0.6\tmp}{0.05em}%
   }\kern-\tmp#1%
}
\begin{document}
  \section{\smartmacron e}
\end{document}

答案1

LaTeX 内核提供\DeclareRobustCommand可用于定义健壮命令的功能。如果使用此功能,则无需在移动论点(例如 的论点\section)。

梅威瑟:

\documentclass{scrartcl}
\newlength\tmp
\DeclareRobustCommand{\smartmacron}[1]{%
   \settowidth{\tmp}{#1}%
   \makebox[\tmp][c]{%
      \rule[1.2ex]{0.6\tmp}{0.05em}%
   }\kern-\tmp#1%
}
\begin{document}
  \tableofcontents
  \section{\smartmacron e}
\end{document}

如果命令已经定义,该etoolbox包提供了\newrobustcmd一种替代方案,即发出错误(而不是容易错过的信息消息),这样更安全:\DeclareRobustCommand

\newrobustcmd{\smartmacron}[1]{%
   \settowidth{\tmp}{#1}%
   \makebox[\tmp][c]{%
      \rule[1.2ex]{0.6\tmp}{0.05em}%
   }\kern-\tmp#1%
}

相关内容