thmtools notebraces 有错误吗?

thmtools notebraces 有错误吗?
\documentclass{article}

\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{thmtools}

\declaretheoremstyle[notebraces={[}{]}]{style}
\declaretheorem[style=style]{theorem}

\begin{document}

\begin{theorem}[Pythagorean Theorem (Pythagoras)]
\end{theorem}

\end{document}

结果是

定理 1【毕达哥拉斯定理(毕达哥拉斯)】

但确实应该

定理 1【勾股定理(毕达哥拉斯)】

答案1

选项notebraces在宏的帮助下用给定的符号替换括号\thmt@embrace

\def\thmt@embrace#1#2(#3){#1#3#2}

参数#1#2是新的开括号和闭括号,\thmt@embrace由完整标题(包括标准括号)填充,这些括号由参数文本检测(#3)。但是,在这种情况下,#3已经包含(),因此)无法检测到正确的闭合。

解决方法:用花括号保护内括号,正如 Barbara Beeton 所建议的那样评论

\begin{theorem}[Pythagorean Theorem {(Pythagoras)}]
\end{theorem}

花括号至少应部分位于标题内,如上例所示,以避免在读取标题参数时自动删除花括号。

另一种方法是修复\thmthead@plain在内部插入保护花括号:

\documentclass{article}

\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{thmtools}

\makeatletter
\renewcommand*{\thmhead@plain}[3]{%
  \thmname{#1}%
  \thmnumber{%
    \@ifnotempty{#1}{ }%
    \@upn{#2}%
  }%
  \thmnote{ {\the\thm@notefont({#3})}}%
}
\makeatother

\declaretheoremstyle[notebraces={[}{]}]{style}
\declaretheorem[style=style]{theorem}

\begin{document}
  \begin{theorem}[Pythagorean Theorem (Pythagoras)]
  \end{theorem}
\end{document}

结果

答案2

该文件对注释amsthm.sty有明确的说明,并且(更好的是)依赖于此。(...)thmtools.stythm-amsthm.sty

我建议改变分隔符,而不是用括号括起来,因为也会\NOTE使用它,而且仅仅改变\thmhead@plain是不够的。

\documentclass{article}

\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{thmtools}

\makeatletter
%%% from amsthm.sty
\def\thmhead@plain#1#2#3{%
  \thmname{#1}\thmnumber{\@ifnotempty{#1}{ }\@upn{#2}}%
%%% the line below had (##3)
  \thmnote{ {\the\thm@notefont\thm@lparen#3\thm@rparen}}}

%%% from thm-amsthm.sty
\def\thmt@setheadstyle#1{%
  \thmt@style@headstyle{%
    \def\NAME{\the\thm@headfont ##1}%
    \def\NUMBER{\bgroup\@upn{##2}\egroup}%
%%% the line below had (##3)
    \def\NOTE{\if=##3=\else\bgroup\thmt@space\the\thm@notefont\thm@lparen##3\thm@rparen\egroup\fi}%
  }%
  \def\thmt@tmp{#1}%
  \@onelevel@sanitize\thmt@tmp
  %\tracingall
  \ifcsname thmt@headstyle@\thmt@tmp\endcsname
    \thmt@style@headstyle\@xa{%
      \the\thmt@style@headstyle
      \csname thmt@headstyle@#1\endcsname
    }%
  \else
    \thmt@style@headstyle\@xa{%
      \the\thmt@style@headstyle
      #1%
    }%
  \fi
  %\showthe\thmt@style@headstyle
}
%%% the line below had (#3)
\def\thmt@embrace#1#2\thm@lparen#3\thm@rparen{#1#3#2}
%%% added for default
\def\thm@lparen{(}\def\thm@rparen{)}
\makeatother

\declaretheoremstyle[notebraces={[}{]}]{style}
\declaretheorem[style=style]{theorem}

\begin{document}

\begin{theorem}[Pythagorean Theorem (Pythagoras)]
\end{theorem}

\end{document}

在此处输入图片描述

相关内容