summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/atendofenv/atendofenv.dtx
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2022-02-24 03:00:45 +0000
committerNorbert Preining <norbert@preining.info>2022-02-24 03:00:45 +0000
commitdc88afec77f198ebb8774f9c87146f2985e8f156 (patch)
treec2ffe8156173930a3f167b2cdeeb4fc1cd66a6b3 /macros/latex/contrib/atendofenv/atendofenv.dtx
parentd529109bf475e3f1e220ce0e980e104b1a7e3c6b (diff)
CTAN sync 202202240300
Diffstat (limited to 'macros/latex/contrib/atendofenv/atendofenv.dtx')
-rw-r--r--macros/latex/contrib/atendofenv/atendofenv.dtx149
1 files changed, 149 insertions, 0 deletions
diff --git a/macros/latex/contrib/atendofenv/atendofenv.dtx b/macros/latex/contrib/atendofenv/atendofenv.dtx
new file mode 100644
index 0000000000..161db37603
--- /dev/null
+++ b/macros/latex/contrib/atendofenv/atendofenv.dtx
@@ -0,0 +1,149 @@
+% \iffalse meta-comment
+% This is free and unencumbered software released into the public domain.
+%
+% Anyone is free to copy, modify, publish, use, compile, sell, or
+% distribute this software, either in source code form or as a compiled
+% binary, for any purpose, commercial or non-commercial, and by any
+% means.
+%
+% In jurisdictions that recognize copyright laws, the author or authors
+% of this software dedicate any and all copyright interest in the
+% software to the public domain. We make this dedication for the benefit
+% of the public at large and to the detriment of our heirs and
+% successors. We intend this dedication to be an overt act of
+% relinquishment in perpetuity of all present and future rights to this
+% software under copyright law.
+%
+% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+% EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+% MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+% IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+% OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+% ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+% OTHER DEALINGS IN THE SOFTWARE.
+%
+% For more information, please refer to <https://unlicense.org>
+% \fi
+
+% \iffalse
+%<package>\NeedsTeXFormat{LaTeX2e}
+%<package>\ProvidesPackage{atendofenv}[2022/02/23 v0.1 Initial Version]
+%<package>\RequirePackage{amsthm}
+%<package>\RequirePackage{letltxmacro}
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[T1]{fontenc}
+\usepackage{mathpazo}
+\usepackage[scale=0.85]{FiraMono}
+\usepackage{FiraSans}
+\usepackage[a4paper, margin=3cm]{geometry}
+\usepackage{indentfirst}
+\usepackage[hidelinks]{hyperref}
+\usepackage{atendofenv}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{atendofenv.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{0}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+% \GetFileInfo{atendofenv.sty}
+%
+% \title{At End of Env}
+% \author{Fangyi Zhou}
+% \maketitle
+%
+% \section{Motivation}
+% The \texttt{amsthm} package conveniently provides environments for
+% declaring theorems and friends.
+% By default, the \texttt{proof} environment inserts a
+% \href{https://en.wikipedia.org/wiki/Q.E.D.}{QED} symbol at the end of
+% environment.
+% It is sometimes also desirable to insert a similar symbol at the end of other
+% environments, e.g.~at the end of a definition or a remark, which motivates
+% this package.
+%
+% \section{Usage}
+% Let us begin with defining a theorem environment with \texttt{amsthm}:
+% \newtheorem{theorem}{Theorem}
+% \begin{verbatim}
+% \newtheorem{theorem}{Theorem}
+% \end{verbatim}
+% And we can create a theorem like this:
+% \begin{verbatim}
+% \begin{theorem}
+% This is a long theorem that will be very long, and it will be helpful if I
+% can add a symbol at the end of it to mark its end.
+% \end{theorem}
+% \end{verbatim}
+% \begin{theorem}
+% This is a long theorem that will be very long, and it will be helpful if I
+% can add a symbol at the end of it to mark its end.
+% \end{theorem}
+% To do so, simply put after defining a theorem environment:
+% \AtEndOfEnv{theorem}{$\triangleleft$}
+% \begin{verbatim}
+% \AtEndOfEnv{theorem}{$\triangleleft$}
+% \end{verbatim}
+% Now theorems look like this:
+% \begin{theorem}
+% This is a long theorem that will be very long, and it will be helpful if I
+% can add a symbol at the end of it to mark its end.
+% \end{theorem}
+% \noindent
+% \textbf{Q:} \emph{But, couldn't I change tweak the style of theorems when defining them?}
+%
+% \noindent
+% \textbf{A:} Of course, but sometimes they are defined by a class file (e.g.~from
+% publishers), and tweaking class files may be a sin in many situations.
+%
+% \section{Implementation}
+% \begin{macrocode}
+\newcommand{\AtEndOfEnv}[2]{
+% \end{macrocode}
+% We first check whether the environment is defined. If so, save the original
+% macros; otherwise report an error.
+% \begin{macrocode}
+ \ifcsname #1\endcsname
+ \expandafter\LetLtxMacro\csname aeoe@old#1\expandafter\endcsname\csname #1\endcsname
+ \else
+ \PackageError{atendofenv}{Environment #1 undefined}{Check the environment
+ name passed to AtEndOfEnv}
+ \fi
+ \ifcsname end#1\endcsname
+ \expandafter\LetLtxMacro\csname aeoe@oldend#1\expandafter\endcsname\csname end#1\endcsname
+ \else
+ \PackageError{atendofenv}{Environment #1 undefined}{Check the environment
+ name passed to AtEndOfEnv}
+ \fi
+% \end{macrocode}
+% Then we redefined the environment, and use the QED stack of \texttt{amsthm}
+% to get a symbol at the end.
+% \begin{macrocode}
+ \renewenvironment{#1}
+ {\pushQED{\qed}\renewcommand{\qedsymbol}{#2}\expandafter\csname aeoe@old#1\endcsname}
+ {\popQED\expandafter\csname aeoe@oldend#1\endcsname}
+}
+% \end{macrocode}
+% \Finale