From 63c4f21a5716ebbed11926d0bfbb26d656a766ea Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Sat, 18 Jul 2020 03:01:08 +0000 Subject: CTAN sync 202007180301 --- .../latex/contrib/thmtools/source/thm-listof.dtx | 224 +++++++++++++++++++++ 1 file changed, 224 insertions(+) create mode 100644 macros/latex/contrib/thmtools/source/thm-listof.dtx (limited to 'macros/latex/contrib/thmtools/source/thm-listof.dtx') diff --git a/macros/latex/contrib/thmtools/source/thm-listof.dtx b/macros/latex/contrib/thmtools/source/thm-listof.dtx new file mode 100644 index 0000000000..39603b4341 --- /dev/null +++ b/macros/latex/contrib/thmtools/source/thm-listof.dtx @@ -0,0 +1,224 @@ +% \iffalse meta-comment +% +% Copyright (C) 2008-2014 by Ulrich M. Schwarz +% Copyright (C) 2019 by Frank Mittelbach +% Copyright (C) 2020- by Yukai Chou +% +% This file may be distributed and/or modified under the conditions of +% the LaTeX Project Public License, version 1.3c. +% The license can be obtained from +% http://www.latex-project.org/lppl/lppl-1-3c.txt +% +% \fi +% +%\iffalse (hide this from DocInput) +%<*listof> +%\fi +% +% This package provides two main commands: +% \DescribeMacro{\listoftheorems} +% |\listoftheorems| will generate, well, a list of all theorems, lemmas, +% etc. in your document. This list is hyperlinked if you use \pkg{hyperref}, +% and it will list the optional argument to the theorem. +% +% Currently, some options can be given as an optional argument keyval list: +% \begin{description} +% \item[numwidth] The width allocated for the numbers, default 2.3em. Since +% you are more likely to have by-section numbering than with figures, this +% needs to be accessible. +% \item[ignore=foo,bar] A last-second call to |\ignoretheorems|, see below. +% \item[onlynamed=foo,bar] Only list those foo and bar environments that +% had an optional title. This weeds out unimportant definitions, for +% example. If no argument is given, this applies to all environments +% defined by |\newtheorem| and |\declaretheorem|. +% \item[show=foo,bar] Undo a previous |\ignoretheorems| and restore default +% formatting for these environments. Useful in combination with +% ignoreall. +% \item[ignoreall] +% \item[showall] Like applying ignore or show with a list of all theorems +% you have defined. +% \item[title] +% Provide a title for this list overwriting the default in |\listtheoremname|. +% \end{description} +% +% \DescribeMacro{\listtheoremname} +% The heading name is stored in the macro |\listtheoremname| and is +% ``List of Theorems'' by default. All other formatting aspects are taken +% from |\listoffigures|. (As a matter of fact, |\listoffigures| is called +% internally.) +% +% \DescribeMacro{\ignoretheorems} +% |\ignoretheorems|\marg{remark,example,...} can be used to suppress some +% types of theorem from the LoTh. Be careful not to have spaces in the list, +% those are currently \emph{not} filtered out. +% +% There's currently no interface to change the look of the list. If you're +% daring, the code for the theorem type ``lemma'' is in |\l@lemma| and so on. +% +%\StopEventually{} +% \begin{macrocode} +\let\@xa=\expandafter +\let\@nx=\noexpand +\RequirePackage{thm-patch,keyval,kvsetkeys} + +\def\thmtlo@oldchapter{0}% +\newcommand\thmtlo@chaptervspacehack{} +\ifcsname c@chapter\endcsname + \ifx\c@chapter\relax\else + \def\thmtlo@chaptervspacehack{% + \ifnum \value{chapter}=\thmtlo@oldchapter\relax\else + % new chapter, add vspace to loe. + \addtocontents{loe}{\protect\addvspace{10\p@}}% + \xdef\thmtlo@oldchapter{\arabic{chapter}}% + \fi + }% + \fi +\fi + + +\providecommand\listtheoremname{List of Theorems} +\newcommand\listoftheorems[1][]{% + %% much hacking here to pick up the definition from the class + %% without oodles of conditionals. + \bgroup + \setlisttheoremstyle{#1}% + \let\listfigurename\listtheoremname + \def\contentsline##1{% + \csname thmt@contentsline@##1\endcsname{##1}% + }% + \@for\thmt@envname:=\thmt@allenvs\do{% + \@xa\protected@edef\csname l@\thmt@envname\endcsname{% CHECK: why p@edef? + \@nx\@dottedtocline{1}{1.5em}{\@nx\thmt@listnumwidth}% + }% + }% + \let\thref@starttoc\@starttoc + \def\@starttoc##1{\thref@starttoc{loe}}% + % new hack: to allow multiple calls, we defer the opening of the + % loe file to AtEndDocument time. This is before the aux file is + % read back again, that is early enough. + % TODO: is it? crosscheck include/includeonly! + \@fileswfalse + \AtEndDocument{% + \if@filesw + \@ifundefined{tf@loe}{% + \expandafter\newwrite\csname tf@loe\endcsname + \immediate\openout \csname tf@loe\endcsname \jobname.loe\relax + }{}% + \fi + }% + %\expandafter + \listoffigures + \egroup +} + +\newcommand\setlisttheoremstyle[1]{% + \kvsetkeys{thmt-listof}{#1}% +} +\define@key{thmt-listof}{numwidth}{\def\thmt@listnumwidth{#1}} +\define@key{thmt-listof}{ignore}[\thmt@allenvs]{\ignoretheorems{#1}} +\define@key{thmt-listof}{onlynamed}[\thmt@allenvs]{\onlynamedtheorems{#1}} +\define@key{thmt-listof}{show}[\thmt@allenvs]{\showtheorems{#1}} +\define@key{thmt-listof}{ignoreall}[true]{\ignoretheorems{\thmt@allenvs}} +\define@key{thmt-listof}{showall}[true]{\showtheorems{\thmt@allenvs}} +% FMi 2019-09-31 allow local title +\define@key{thmt-listof}{title}{\def\listtheoremname{#1}} +% -- FMi + +\providecommand\thmt@listnumwidth{2.3em} + +\providecommand\thmtformatoptarg[1]{ (#1)} + +\newcommand\thmt@mklistcmd{% + \@xa\protected@edef\csname l@\thmt@envname\endcsname{% CHECK: why p@edef? + \@nx\@dottedtocline{1}{1.5em}{\@nx\thmt@listnumwidth}% + }% + \ifthmt@isstarred + \@xa\def\csname ll@\thmt@envname\endcsname{% + \protect\numberline{\protect\let\protect\autodot\protect\@empty}% + \thmt@thmname + \ifx\@empty\thmt@shortoptarg\else\protect\thmtformatoptarg{\thmt@shortoptarg}\fi + }% + \else + \@xa\def\csname ll@\thmt@envname\endcsname{% + \protect\numberline{\csname the\thmt@envname\endcsname}% + \thmt@thmname + \ifx\@empty\thmt@shortoptarg\else\protect\thmtformatoptarg{\thmt@shortoptarg}\fi + }% + \fi + \@xa\gdef\csname thmt@contentsline@\thmt@envname\endcsname{% + \thmt@contentslineShow% default:show + }% +} +\def\thmt@allenvs{\@gobble} +\newcommand\thmt@recordenvname{% + \edef\thmt@allenvs{\thmt@allenvs,\thmt@envname}% +} +\g@addto@macro\thmt@newtheorem@predefinition{% + \thmt@mklistcmd + \thmt@recordenvname +} + +\addtotheorempostheadhook{% + \thmtlo@chaptervspacehack + \addcontentsline{loe}{\thmt@envname}{% + \csname ll@\thmt@envname\endcsname + }% +} + +\newcommand\showtheorems[1]{% + \@for\thmt@thm:=#1\do{% + \typeout{showing \thmt@thm}% + \@xa\let\csname thmt@contentsline@\thmt@thm\endcsname + =\thmt@contentslineShow + }% +} + +\newcommand\ignoretheorems[1]{% + \@for\thmt@thm:=#1\do{% + \@xa\let\csname thmt@contentsline@\thmt@thm\endcsname + =\thmt@contentslineIgnore + }% +} +\newcommand\onlynamedtheorems[1]{% + \@for\thmt@thm:=#1\do{% + \global\@xa\let\csname thmt@contentsline@\thmt@thm\endcsname + =\thmt@contentslineIfNamed + }% +} + +\AtBeginDocument{% +\@ifpackageloaded{hyperref}{% + \let\thmt@hygobble\@gobble +}{% + \let\thmt@hygobble\@empty +} +\let\thmt@contentsline\contentsline +} + +\def\thmt@contentslineIgnore#1#2#3{% + \thmt@hygobble +} +\def\thmt@contentslineShow{% + \thmt@contentsline +} + +\def\thmt@contentslineIfNamed#1#2#3{% + \thmt@ifhasoptname #2\thmtformatoptarg\@nil{% + \thmt@contentslineShow{#1}{#2}{#3}% + }{% + \thmt@contentslineIgnore{#1}{#2}{#3}% + %\thmt@contentsline{#1}{#2}{#3}% + } +} + +\def\thmt@ifhasoptname #1\thmtformatoptarg#2\@nil{% + \ifx\@nil#2\@nil + \@xa\@secondoftwo + \else + \@xa\@firstoftwo + \fi +} +% \end{macrocode} +%\iffalse +% +%\fi -- cgit v1.2.3