我正在尝试排版一篇文章。在序言中,我定义了以下两件事:
\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}}}