操作包含命令的变量

操作包含命令的变量

以下是我的问题的 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}

相关内容