由于某种原因,我无法使用某些命令,例如\def
在使用重复定理时以定理的名称使用apxproof
。我不明白为什么。这似乎与定理是否重复无关,因为将选项添加[appendix=strip]
到包中apxproof
并不能解决问题。
\documentclass[]{article}
\usepackage{apxproof}
\newtheoremrep{thm}{Theorem}
\begin{document}
\newcommand{\nicecommand}{(Nice command)}
%\newcommand{\notnicecommand}{a\\b}
\newcommand{\notnicecommand}{\def\mything{a}}
% thmrep with any some commands in the name works
\begin{thmrep}[Name A\nicecommand]
Text A
\end{thmrep}
% thm with any command in the name works
\begin{thm}[Name B\notnicecommand]
Text B
\end{thm}
% thm with any command in the name works, even when pushed to the appendix
\begin{toappendix}
\begin{thm}[Name C\notnicecommand]
Text C
\end{thm}
\end{toappendix}
% thm rep with a not nice command in the name does not work
\begin{thmrep}[Name D\notnicecommand]
Text D
\end{thmrep}% Undefined control sequence. \end{thmrep}
\end{document}
我的实际用例是我想使用一个以定理名称使用这个的宏:
\newcommand{\latexiteeq}[4]{%
\def\tmpa{#1}%
\def\tmpb{#2}%
\ifx\tmpa\tmpb%
#3
\else%
#4
\fi%
}
编辑:我设法\latexiteeq
以避免使用的方式重写\def
,但我仍然遇到同样的问题,因为我使用的宏的其他部分使用了\def
。
答案1
使用\robustify
自etoolbox
。
\documentclass[]{article}
\usepackage{apxproof}
\usepackage{etoolbox} % <----------------- added this package
\newtheoremrep{thm}{Theorem}
\begin{document}
\newcommand{\nicecommand}{(Nice command)}
%\newcommand{\notnicecommand}{a\\b}
\newcommand{\notnicecommand}{\def\mything{a}}
\robustify{\notnicecommand} % <----------------- added this line
\begin{thmrep}[Name A\nicecommand]
Text A
\end{thmrep}
\begin{thm}[Name B\notnicecommand]
Text B
\end{thm}
\begin{toappendix}
\begin{thm}[Name C\notnicecommand]
Text C
\end{thm}
\end{toappendix}
\begin{thmrep}[Name D\notnicecommand]
Text D
\end{thmrep}
\end{document}