\newcommand 和 \section 错误

\newcommand 和 \section 错误

我正在尝试排版一篇文章。在序言中,我定义了以下两件事:

\newcommand{\leftexp}[2]{{\vphantom{#2}}^{#1}{#2}}

\newcommand{\hr}{\leftexp{*}{\mathbb{R}}}

但是,当我尝试在某个部分中使用时$\hr$,如下所示:

\section{Constructing $\hr$}

我收到一个错误:

Incomplete `\iffalse`; all text was ignored after line 1.

知道是什么原因造成的吗?如果我在部分中没有 ,一切都会正常工作$\hr$(例如,如果我有 ,排版就会很好\section{Constructing $\mathbb{R}$})。

答案1

这将是一条脆弱的命令,并且\section是一个移动的参数,因此使用\protect或声明它\DeclareRobustCommand

在此处输入图片描述

\documentclass{article}

\usepackage{amsmath,amssymb}

\newcommand{\leftexp}[2]{{\vphantom{#2}}^{#1}{#2}}

\newcommand{\hr}{\leftexp{*}{\mathbb{R}}}

\DeclareRobustCommand{\leftexpB}[2]{{\vphantom{#2}}^{#1}{#2}}
\DeclareRobustCommand{\hrB}{\leftexpB{*}{\mathbb{R}}}

\begin{document}

\tableofcontents

\section{Constructing $\protect\hr$}

aa

\section{Constructing $\hrB$}

aa


\end{document} 

答案2

您遇到了 (不) 著名的“移动参数中的脆弱命令”问题。 内容\section被写入目录中,这会破坏所有内容。

以下工作:

\newcommand{\leftexp}[2]{{\protect\vphantom{#2}}^{#1}{#2}}
\newcommand{\hr}{\leftexp{*}{\mathbb{R}}}

相关内容