借助 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%
}