使用 apxproof 时无法使用重复定理名称中的某些命令

使用 apxproof 时无法使用重复定理名称中的某些命令

由于某种原因,我无法使用某些命令,例如\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

使用\robustifyetoolbox

\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}

相关内容