如何在 thmnote 中使用变量

如何在 thmnote 中使用变量

我想让定理的“定理名称”使用变量填充。它没有像我希望的那样工作,见下文。我特别困惑,因为我可以成功地让证明环境的“证明名称”由变量填充,这两者似乎类似。有人能建议一种解决方法吗?

\documentclass{article}
\usepackage{amsthm}
\def\thmname{baz}
\newtheorem*{theorem}{Theorem}

\begin{document}


% Expected behavior.
% Result displays as Theorem (foo). Hello world.
\begin{theorem}[foo]
  Hello world.
\end{theorem}

% Unexpected behavior.
% Result displays as Theorem (). Hello world.
\begin{theorem}[\thmname]
  Hello world.
\end{theorem}

% Expected behavior.
% Result displays as Theorem. baz.
\begin{theorem}
  \thmname.
\end{theorem}

% Expected behavior.
% Result displays as baz. Hello world.
\begin{proof}[\thmname]
  Hello world.
\end{proof}

\end{document}

答案1

虽然你已经知道了为什么,这里有一个关于如何在将来避免这种情况的建议。

不要用\def,用\newcommand(除非你真的非常清楚自己在做什么。)

的一个功能\newcommand是它会执行检查,以便您不会覆盖已在其他地方定义的宏。如果您使用\newcommand\thmname{baz}而不是\def...,LaTeX 会抱怨:

(/usr/share/texmf-dist/tex/latex/amscls/amsthm.sty)

! LaTeX Error: Command \thmname already defined.
               Or name \end... illegal, see p.192 of the manual.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.

答案2

将变量名称从 更改thmnamebopthmname解决了这个问题!据推测,变量名称thmname已被使用,并且我的使用存在冲突。

我很幸运能找到这个答案……https://stackoverflow.com/a/3188476对此类陷阱提出了一些评论。

相关内容