以下是我的问题的 MWE
\documentclass[11pt]{article}
\usepackage{amsmath}
\usepackage[framed,thmmarks,thref, hyperref]{ntheorem}
\newtheorem{theorem}{Theorem}
\newcommand{\test}{
\ifcsname theoremname\endcsname
\wlog{\theoremname}
\fi
}
\begin{document}
\begin{theorem}[my theorem\footnotemark]
\test
asdf
\end{theorem}\footnotetext{asdf}
\end{document}
我想检索“my theorem”字符串。问题是\theoremname
还包含\footnotemark
,因此尝试天真地访问它会导致一堆错误,例如“\@item 与其定义不匹配”等等。
\theoremname
如果我可以用一个新的替换旧的,\footnotemark
或者(可能以更灵活的方式)在\test
一个新的变量中创建我需要的字符串,我会很高兴。
答案1
如果你不需要定理列表——\listtheorems{theorem}
你可以简单地通过将\footnotemark
其设置为\test
\let
\relax
暂时地:
\documentclass{article}
\usepackage[framed,thmmarks,thref,hyperref]{ntheorem}
\newtheorem{theorem}{Theorem}
\newcommand{\test}{\begingroup
\ifcsname theoremname\endcsname% If theorem name exists:
\let\footnotemark\relax% Remove \footnotemark functionality
\theoremname% Set theorem name
\fi
\endgroup
}
\begin{document}
\begin{theorem}[my theorem\footnotemark]
\test
\end{theorem}
\end{document}
如果您想使用\theoremname
作为 的一部分\label
,也许下面的方法可以奏效:
\documentclass{article}
\usepackage[framed,thmmarks,thref,hyperref]{ntheorem}
\newtheorem{theorem}{Theorem}
\makeatletter
\newcommand{\labeltheorem}[1]{\begingroup
\ifcsname theoremname\endcsname% If theorem name exists:
\def\footnotemark{}% Remove \footnotemark functionality
\edef\@currentlabel{\theoremname}% Set theorem name
\label{#1}%
\fi
\endgroup
}
\makeatother
\begin{document}
\begin{theorem}[my theorem\footnotemark]
\labeltheorem{test}asdf
\end{theorem}
See \ref{test}.
\end{document}