![如何使所有类似定理的环境都有一个结束符号?](https://linux22.com/image/298177/%E5%A6%82%E4%BD%95%E4%BD%BF%E6%89%80%E6%9C%89%E7%B1%BB%E4%BC%BC%E5%AE%9A%E7%90%86%E7%9A%84%E7%8E%AF%E5%A2%83%E9%83%BD%E6%9C%89%E4%B8%80%E4%B8%AA%E7%BB%93%E6%9D%9F%E7%AC%A6%E5%8F%B7%EF%BC%9F.png)
我有一个关于制作结束符号的问题。
LaTex 默认每个证明环境都有一个结束符号。我想让每个定理类环境(例如示例环境)也有一个结束符号。但如何手动设置呢?具体来说,我想让所有这些环境都以方形符号结束。
\newtheorem{thm}{Theorem}
\newtheorem{lem}[thm]{Lemma}
\newtheorem{cor}[thm]{Corollary}
\newtheorem{pro}[thm]{Proposition}
\newtheorem{assump}{Assumption}
\newtheorem{axiom}{Axiom}
\newtheorem*{conj}{Conjecture}
\theoremstyle{definition}
\newtheorem{defi}[thm]{Definition}
\newtheorem{exam}{Example}
\newtheorem{exer}{Exercise}
\newtheorem*{rem}{Remark}
\newtheorem*{notation}{Notation}
\newtheorem*{note}{Note}
我怀着感激之心寻找一个全面的设置。
答案1
假设您正在使用\newtheorem
。amsthm
这里\newtheorem
定义了新的定理类环境并以 结束它们\@endtheorem
。后者最初定义为\def\@endtheorem{\endtrivlist\@endpefalse }
,您可以在此处插入结束符号。
\documentclass{article}
\usepackage{amsthm}
\usepackage{manfnt}
\makeatletter
\def\@endtheorem{\hfill\dbend\endtrivlist\@endpefalse }
\makeatother
\begin{document}
\newtheorem{thm}{Theorem}
\begin{thm}
Zigzagging is dangerous.
\end{thm}
\end{document}
(想法成形这里)
警告!
正如下面 egreg 和 barbara beeton 所提到的,这种结构并不完美。它也不如proof
中的环境好amsmath
。其中一个致命缺陷是
如果文本恰好在右边距附近结束,则符号将与左对齐,而不是与右对齐。
因此,如果您想要一个与 完全相同的结束符号proof
,则需要(有关详细信息,请参阅 egreg 的回答)
处理胶水和罚款。
\pushQED{your symbol}
通过添加before 和after来打包您的定理类环境\popQED
。它amsthm
提供了这两个命令来处理所有事情。(您甚至可以使用\qedhere
)。
答案2
\tmark
使用我的答案中定义的命令的变体将对象移动到右边距
\documentclass{article}
\usepackage{amsthm}
\makeatletter
\renewcommand\@endtheorem{\vvv@endmarker\endtrivlist\@endpefalse}
\newcommand\vvv@endmarker{%
{\unskip\nobreak\hfil\penalty50
\hskip2em\vadjust{}\nobreak\hfil\openbox
\parfillskip=0pt \finalhyphendemerits=0 \par
\penalty 10000 \parskip=0pt\noindent}\ignorespaces}
\makeatother
\newtheorem{thm}{Theorem}
\begin{document}
\begin{thm}
Zigzagging is dangerous.
\end{thm}
\begin{thm}
Zigzagging is very dangerous.
Zigzagging is very very dangerous.
\end{thm}
I want to show that the \verb|\hfill| approach can fail.
\makeatletter
\def\vvv@endmarker{\hfill\openbox}
\makeatother
\begin{thm}
Zigzagging is dangerous.
\end{thm}
\begin{thm}
Zigzagging is very dangerous.
Zigzagging is very very dangerous.
\end{thm}
\end{document}
我添加了一个例子来表明简单的\hfill
方法可能会失败。
允许在末尾列出逐项列表或显示方程式,并使用正确标记的方法\qedhere
是
\documentclass{article}
\usepackage{amsthm}
\newcommand{\newmarkedtheorem}[1]{%
\newenvironment{#1}
{\pushQED{\qed}\csname inner@#1\endcsname}
{\popQED\csname endinner@#1\endcsname}%
\newtheorem{inner@#1}%
}
\newmarkedtheorem{thm}{Theorem}[section]
\begin{document}
\section{Test}
\begin{thm}
Zigzagging is dangerous.
\end{thm}
\begin{thm}
Zigzagging is very dangerous.
Zigzagging is very very dangerous.
\end{thm}
\begin{thm} These activities are dangerous.
\begin{itemize}
\item Zigzagging
\item Jaywalking\qedhere
\end{itemize}
\end{thm}
\end{document}
该命令\newmarkedtheorem
的语法与 相同\newtheorem
。