在加载包“thm-restate”的情况下,在定理可选参数中使用“xifthen”中的“\ifthenelse”时出错

在加载包“thm-restate”的情况下,在定理可选参数中使用“xifthen”中的“\ifthenelse”时出错

我想将形式为 的条件\ifthenelse{\isempty{…}}{…}{…}放在 -style 定理的可选参数中amsthm。通常,这可以正常工作,但包thm-restate(from thmtools) 似乎破坏了它。

我尝试过添加括号、\protect在各个地方添加等等,但找不到办法。有人能建议一种解决这个问题的方法吗?MWE 如下:

\documentclass{article}

\usepackage{xifthen}
\usepackage{amsthm}
\usepackage{thm-restate}

\newtheorem{theorem}{Theorem}

\begin{document}

\begin{theorem}[\ifthenelse{\isempty{foo}}{bar}{baz}]
\end{theorem}

\end{document}

这会Undefined control sequence.导致(以及几个其他错误)。删除\isempty后,编译正常。thm-restate

\isempty用其他条件命令xifthen(如\isin\isequal等等)替换也会出现类似的错误。

上面的例子只是最低限度地说明了错误。但是,我的实际用例有一个额外的复杂因素,可能与之相关:它被包装到另一个环境中,该环境将参数传递给\isempty。它类似于以下内容(可以附加到早期的 MWE):

\newenvironment{mytheorem}[1][]
  {\begin{theorem}[Note\ifthenelse{\isempty{#1}}{}{~arg: #1}]}
  {\end{theorem}}

\begin{mytheorem}[foo]
  Theorem text.
\end{mytheorem}

所以我真的希望找到一个也适用于这个不太简单的例子的解决方案。

答案1

您需要一个可扩展的测试:

\documentclass{article}

\usepackage{xifthen}
\usepackage{amsthm}
\usepackage{thm-restate}

\newtheorem{theorem}{Theorem}
\ExplSyntaxOn
\cs_set_eq:NN\tlifempty \tl_if_empty:nTF
\ExplSyntaxOff
\begin{document}

\begin{theorem}[\tlifempty{foo}{bar}{baz}]
\end{theorem}


\begin{theorem}[\tlifempty{}{bar}{baz}]
\end{theorem}

\end{document}

在此处输入图片描述

相关内容