我想让定理的“定理名称”使用变量填充。它没有像我希望的那样工作,见下文。我特别困惑,因为我可以成功地让证明环境的“证明名称”由变量填充,这两者似乎类似。有人能建议一种解决方法吗?
\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
将变量名称从 更改thmname
为bopthmname
解决了这个问题!据推测,变量名称thmname
已被使用,并且我的使用存在冲突。
我很幸运能找到这个答案……https://stackoverflow.com/a/3188476对此类陷阱提出了一些评论。