我想使用这个thmtools
包,因为它提供了一些用于声明环境(证明、定理、示例等)的很棒的功能。
我特别喜欢“qed”功能,它在环境末尾放置了一些不错的符号,例如 qed 方块。例如,我使用不同的符号来表示不同的环境。
但是,如果我在这样的环境末尾使用特殊块(itemize、align),则会出现一些问题。“qed”符号太低,浪费了很多空间。
测试以下例子:
\documentclass{book}
\usepackage{amsthm}
\usepackage{thmtools}
\declaretheoremstyle[headpunct=\\*,qed=\ensuremath{\triangle}]{myexstyle}
\declaretheorem[style=myexstyle]{myexample}
\begin{document}
\begin{myexample}[This is an example 1]
This is an example...
And the symbol is on the correct line!
\end{myexample}
\begin{myexample}[This is an example 2]
This is an another example...
\begin{itemize}
\item And the symbol is \emph{not} on the correct line!
\end{itemize}
\end{myexample}
\end{document}
我希望\triangle
显示与最后一条 同一行\item
。
我已经为align
环境修复了该问题(我现在正在使用包adjustbox
und aligned
),但如果我想使用itemize
所示的方式,我无法解决该问题。
我想我也知道问题的原因。\end{itemize}
结束段落并且必须开始一个新段落才能放置“qed”符号。
有办法吗?解决方法?最好是没有\qedhere
或针对每个环境进行手动调整!我还想知道包enumitem
(或另一个包)是否有任何选项有用?
答案1
结束标记的问题amsthm
是一个众所周知的问题;以下注释来自文档:
proof
如果环境的最后一部分是显示方程或列表环境或类似的东西,则QED 符号的放置可能会有问题 。在这种情况下,将\qedhere
命令放在 QED 符号应该出现的位置...
因此,一个选择是手动输入\qedhere
:
\begin{myexample}[This is an example 2]
This is an another example...
\begin{itemize}
\item And the symbol is on the correct line!\qedhere
\end{itemize}
\end{myexample}
但是,你说你不想手动使用\qedhere
,那么恐怕使用amsthm
并不是最好的选择。一种选择是使用而不是ntheorem
作为 的后端,因为前者解决了在正确位置自动设置定理类环境的结束标记的问题(即使环境以 displaymath 或 list 环境结尾)。thmtools
amsthm
现在,您必须做出选择:要么坚持amsthm
并接受在某些情况下必须手动输入\qedhere
,要么切换到ntheorem
;也许定理包:使用哪一个,哪些会冲突?可以帮助您做出决定。
这是您的示例,但现在使用ntheorem
:
\documentclass{book}
\usepackage[thmmarks]{ntheorem}
\usepackage{thmtools}
\declaretheoremstyle[
headpunct={},
qed=\ensuremath{\triangle},
bodyfont=\normalfont
]{myexstyle}
\declaretheorem[style=break]{myexample}
\begin{document}
\begin{myexample}[This is an example 1]
This is an example...
And the symbol is on the correct line!
\end{myexample}
\begin{myexample}[This is an example 2]
This is an another example...
\begin{itemize}
\item And the symbol is on the correct line!
\end{itemize}
\end{myexample}
\end{document}
如您所见,标题的注释以粗体显示;不幸的是,notefont
的键thmtools
不受支持ntheorem
,因此如果您想更改注释字体,则必须在序言中添加以下内容:
\makeatletter
\renewtheoremstyle{break}%
{\item[\rlap{\vbox{\hbox{\hskip\labelsep \theorem@headerfont
##1\ ##2\theorem@separator}\hbox{\strut}}}]}%
{\item[\rlap{\vbox{\hbox{\hskip\labelsep \theorem@headerfont
##1\ ##2\ {\normalfont(##3)}\theorem@separator}\hbox{\strut}}}]}
\makeatother