![thmtools notebraces 有错误吗?](https://linux22.com/image/317397/thmtools%20notebraces%20%E6%9C%89%E9%94%99%E8%AF%AF%E5%90%97%EF%BC%9F.png)
\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.sty
thm-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}