我想将形式为 的条件\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}