summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/tocdata
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/tocdata
Initial commit
Diffstat (limited to 'macros/latex/contrib/tocdata')
-rw-r--r--macros/latex/contrib/tocdata/README.txt38
-rw-r--r--macros/latex/contrib/tocdata/tocdata.dtx1810
-rw-r--r--macros/latex/contrib/tocdata/tocdata.ins47
-rw-r--r--macros/latex/contrib/tocdata/tocdata.pdfbin0 -> 919235 bytes
4 files changed, 1895 insertions, 0 deletions
diff --git a/macros/latex/contrib/tocdata/README.txt b/macros/latex/contrib/tocdata/README.txt
new file mode 100644
index 0000000000..9207bb067b
--- /dev/null
+++ b/macros/latex/contrib/tocdata/README.txt
@@ -0,0 +1,38 @@
+The tocdata package.
+Adds names to table of contents / list of figures entries.
+
+v2.02 — 2019/03/21
+Copyright 2016–2019 Brian Dunn — www.BDTechConcepts.com
+LaTeX Project Public License, version 1.3
+
+
+Summary:
+
+The tocdata package may be used to add a small amount of data to an entry
+in the table of contents or list of figures, between the section or caption
+name and the page number. The typical use would be to add the name of an
+author or artist of a chapter or section, such as in an anthology or a
+collection of papers.
+
+Additionally, user-level macros are provided which add the author's
+name to a chapter or section, along with an optional prefix and/or
+suffix, and add to a figure the artist's name, prefix, and suffix,
+plus optional additional text. Author and artist names are also
+added to the index. Additional user-level macros control formatting.
+
+
+Requirements:
+
+Tocdata may be used with, but does not require, either the titletoc package
+or the tocloft package.
+
+
+Alternatives:
+
+Tocdata places onto a single line the chapter/section name, author/artist
+name, and page number. Numerous other methods are available for adding
+names to the TOC, but these usually place the chapter/section name and
+page number onto one line, with the additional information on another line.
+These methods would be preferable, and often required, if you wish
+to place a lot of information in the TOC, or have long chapter or
+section names.
diff --git a/macros/latex/contrib/tocdata/tocdata.dtx b/macros/latex/contrib/tocdata/tocdata.dtx
new file mode 100644
index 0000000000..cfe157698b
--- /dev/null
+++ b/macros/latex/contrib/tocdata/tocdata.dtx
@@ -0,0 +1,1810 @@
+% \iffalse meta-comment
+%
+% Copyright 2016--2019 Brian Dunn
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% \fi
+%
+% \iffalse
+%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<package>\ProvidesPackage{tocdata}
+%<package> [2019/07/06 v2.03 Adds author/artist to TOC entries.]
+%
+%<*driver>
+\documentclass{ltxdoc}
+
+
+\newcommand{\mypackagename}{tocdata}
+
+\newcommand{\quicksummary}{%
+Optionally prints author, artist, or other data on a line
+of the \acro{TOC}\Slash\acro{LOF}.
+}
+
+
+% \usepackage{lmodern}
+\usepackage{erewhon}
+\usepackage{cabin}
+\usepackage{inconsolata}
+% \usepackage{libertine}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage{textcomp} % provides \degree, \textquotesingle, \textmu
+\usepackage{textgreek}
+
+\usepackage{newunicodechar}
+\newunicodechar{ff}{ff}
+\newunicodechar{fi}{fi}
+\newunicodechar{fl}{fl}
+\newunicodechar{ffi}{ffi}
+\newunicodechar{ffl}{ffl}
+% \newunicodechar{°}{\degree}
+\newunicodechar{ρ}{\ensuremath{\rho}}
+\newunicodechar{⨯}{\texttimes}
+\newunicodechar{⁄}{\textfractionsolidus}
+% \newunicodechar{®}{\textregistered}
+% \newunicodechar{©}{\textcopyright}
+\newunicodechar{—}{---}
+\newunicodechar{–}{--}
+% \newunicodechar{”}{''}
+% \newunicodechar{“}{``}
+% \newunicodechar{§}{\S}
+% \newunicodechar{¶}{\P}
+% \newunicodechar{†}{\dag}
+\newunicodechar{‡}{\ddag}
+
+\usepackage{metalogo}
+\makeatletter
+\@ifpackageloaded{erewhon}{
+\setlogokern{Te}{-.08em}
+\setlogokern{eX}{-0.04em}
+\setlogokern{La}{-.25em}
+\setlogokern{aT}{-.08em}
+\setlogokern{Xe}{-.04em}
+\setlogokern{eL}{-.06em}
+\setlogodrop{0.27ex}
+}{}
+\makeatother
+
+\usepackage{microtype}
+
+\usepackage{etoolbox}
+
+\usepackage[log-declarations=false]{xparse}
+
+\usepackage[svgnames]{xcolor}
+\definecolor{myurlcolor}{rgb}{0,0,.7}
+\definecolor{mylinkcolor}{rgb}{.7,0,0}
+\definecolor{codecolor}{rgb}{0,.4,.2}
+\definecolor{overviewcolor}{rgb}{0,.2,.4}
+
+\usepackage{dtxdescribe}[2019/07/16]
+
+\usepackage{graphicx}
+\graphicspath{{images/}}
+
+\usepackage{enumitem}
+
+\usepackage{array}
+\usepackage{longtable}
+\usepackage{booktabs}
+
+\usepackage[all,defaultlines=2]{nowidow}
+
+\usepackage[normalem]{ulem}
+
+\usepackage{fancyvrb}
+
+
+\usepackage{newfloat}
+
+\DeclareFloatingEnvironment[
+ fileext=loi,
+ listname={List of Illustrations},
+ name=Illustration,
+ placement=tbp,
+]{illustration}
+
+\DeclareFloatingEnvironment[
+ fileext=loq,
+ listname={List of Quotations},
+ name=Quotation,
+ placement=tbp,
+]{aquote}
+
+\setlength{\floatsep}{5ex}
+\setlength{\textfloatsep}{5ex}
+
+
+\usepackage{\mypackagename}
+
+
+
+\usepackage{titletoc}
+% \usepackage{tocloft}
+
+
+\usepackage{titleps}
+
+\newpagestyle{pageheadfoot}{
+ \headrule
+ \sethead{\pkg{\mypackagename}}{}{\thepage}
+% \renewcommand{\makefootrule}{\rule[2.5ex]{\linewidth}{.4pt}}
+ \setfoot{}{}{}
+}
+
+\pagestyle{pageheadfoot}
+
+
+
+\usepackage[pdftex,bookmarks=true,hidelinks,%
+colorlinks,linkcolor=mylinkcolor,urlcolor=myurlcolor,%
+pageanchor=true,hyperindex=false,
+]{hyperref}
+
+\hypersetup{%
+pdfinfo={%
+Title={LaTeX \mypackagename{} package},%
+Author={Brian Dunn},%
+Subject={LaTeX tocdata package},%
+Keywords={LaTeX, tocdata, contents}%
+}}
+
+
+\usepackage{cleveref}
+
+
+% from dtxdescribe:
+\setlength{\marginparsep}{1em}
+\setlength{\marginparpush}{.7ex}
+
+
+
+\setlength{\parindent}{2em}
+\setlength{\parskip}{0ex}
+
+\setlength{\IndexMin}{40ex}
+
+
+
+\setcounter{IndexColumns}{2}
+\setcounter{GlossaryColumns}{1}
+
+\DisableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{\mypackagename.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{662}
+%
+% \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 \~}
+
+% \changes{v0.10}{2016/05/05}{\ 2016/05/05 Initial ver.}
+% \changes{v0.11}{2016/07/11}{\ 2016/07/11}
+% \changes{v0.11}{2016/07/11}{Minor docs improvements in spelling, grammar, formatting.}
+% \changes{v0.12}{2016/12/02}{\ 2016/12/02}
+% \changes{v1.00}{2019/01/08}{Improved source formatting.}
+% \changes{v1.00}{2019/01/12}{\ 2019/01/12}
+% \changes{v2.00}{2019/03/15}{Added part and subsection macros.}
+% \changes{v2.00}{2019/03/15}{Added caption authors.}
+% \changes{v2.00}{2019/03/15}{Added support for new float types.}
+% \changes{v2.00}{2019/03/15}{\ 2019/03/15}
+% \changes{v2.01}{2019/03/15}{\ 2019/03/15}
+% \changes{v2.02}{2019/03/21}{\ 2019/03/21}
+% \changes{v2.03}{2019/07/06}{\ 2019/07/06}
+
+
+
+% \GetFileInfo{\mypackagename.sty}
+%
+% \DoNotIndex{\newcommand,\renewcommand,\addtocounter,\begin,\end,\begingroup,\endgroup}
+% \DoNotIndex{\global,\ifbool,\ifthenelse,\isequivalentto,\let}
+% \DoNotIndex{\booltrue,\boolfalse}
+% \expandafter\DoNotIndex\expandafter{\detokenize{\(,\),\,,\\,\#,\$,\%,\^,\_,\~,\ ,\&,\{,\}}}
+%
+% ^^A \renewcommand{\listfigurename}{List of }
+% \begin{center}
+% \thispagestyle{empty}
+% \vfill
+% ^^A \includegraphics[width=.3\linewidth]{\mypackagename_logo.pdf}
+% \vfill
+% {\Huge The \pkg{\mypackagename} package}
+% \bigskip
+%
+% \fileversion{} --- \filedate
+%
+% \bigskip
+%
+% {\small\textcopyright{} 2016--2019} Brian Dunn\\ \small \texttt{bd@BDTechConcepts.com}
+%
+% \vspace{.5in}
+%
+% {\normalsize\textup{\quicksummary}}
+%
+%
+%
+% \vfill
+%
+% \begin{abstract}
+% \noindent
+% The \pkg{tocdata} package adds information such as an author or artist to
+% an entry in the table of contents or list of figures or new float type.
+% This new information is placed on a single line along with the caption and page number,
+% as is commonly done in collections of literature, poetry, or art work.
+%
+% \pkg{tocdata} works with the \TOC\ \Slash \LOF\ formatting of
+% the default \LaTeX\ classes, \pkg{memoir}, \pkg{koma-script},
+% and with \pkg{titletoc}, \pkg{tocloft}, \pkg{tocbasic}, and \pkg{tocstyle}.
+% \end{abstract}
+%
+% \vspace*{\fill}
+% \vspace*{\fill}
+% \vspace*{\fill}
+% \end{center}
+%
+% \clearpage
+%
+% \tableofcontents
+% ^^A \clearpage
+% \listoffigures
+% ^^A \listoftables
+% \listofillustrations
+% \listofaquotes
+%
+%
+% \thispagestyle{pageheadfoot}
+%
+% \clearpage
+%
+% \sectionauthor{Introduction}{Brian}{Dunn}
+%
+% \begin{figure}
+% \setlength{\fboxsep}{0pt}
+% \centering
+% \fbox{\includegraphics[width=2in]{go_problem.png}}
+% \captionartist{A Challenge}
+% [Problem 1-2, from \textit{Gokyo Shumyo}]
+% {Hayashi}{Genbi}
+% \end{figure}
+%
+% \begin{aquote}
+% \itshape
+% ``Go uses the most elemental materials and concepts --- line and circle,
+% wood and stone, black and white --- combining them with simple rules
+% to generate subtle strategies and complex tactics that stagger the imagination.''
+% \captionauthor{\textit{Go uses the most elemental materials and concepts \dots}}%
+% {Iwamoto}{Kaoru}%
+% [\textnormal{ --- former \textit{Honinbo} title holder}]
+% \end{aquote}
+%
+% Anthologies may be printed with the author alongside each title in the
+% table of contents.
+%
+% Many commonly-recommended methods for doing this with \LaTeX, such as those linked to in
+% section \ref{sec:othermethods}, place the author above or below the title and
+% page number, but seldom on the same line.
+%
+% The \pkg{tocdata} package provides some basic infrastructure to help
+% add some information to a line in the table of contents, after the title
+% and just before the page number. This function works with the standard
+% \LaTeX\ classes, or with either of the \pkg{titletoc} or \pkg{tocloft} packages.
+%
+% Additionally,
+% user-level macros are provided which add the author's name to a chapter or section,
+% and add the author's or artist's name and optional additional text to a figure.
+% Author and artist names are also added to the index.
+%
+% As examples of the use of these high-level macros,
+% the major section headings of this documentation
+% have the author's name applied, and additional figures, illustrations, and quotes
+% are supplied as well.
+% The results are demonstrated in the table of contents, list of figures,
+% list of illustrations, list of quotes, and the index.\footnote{%
+% Yes, I \emph{do} recognize the absurdity of placing my own name in the index
+% amongst the likes of Churchill, Genbi, Herschel, Kaoru, Newton\,\dots}
+%
+%
+% \clearpage
+%
+% \setlength{\parindent}{0em}
+% \setlength{\parskip}{2ex}
+%
+% \sectionauthor[Other methods]{Other methods}{Various}{Authors}
+% \label{sec:othermethods}
+%
+% For other methods which place the author on a separate line from the title, see the
+% following.
+%
+% Note that these methods will be preferable if a larger amount of information
+% is to be placed for each title, such that it usually would not all fit on one line
+% \watchout[Too much text!]
+% in the table of contents.
+%
+% \href
+% {http://tex.stackexchange.com/questions/47554/add-authors-name-automatically-while-building-toc}
+% {http://tex.stackexchange.com/questions/ \\ \hspace*{1in} 47554/add-authors-name-automatically-while-building-toc}
+%
+% \href
+% {http://tex.stackexchange.com/questions/110218/add-author-before-chapter-title-in-toc}
+% {http://tex.stackexchange.com/questions/ \\ \hspace*{1in} 110218/add-author-before-chapter-title-in-toc}
+%
+% \href
+% {http://tex.stackexchange.com/questions/156862/displaying-author-for-each-chapter-in-book}
+% {http://tex.stackexchange.com/questions/ \\ \hspace*{1in} 156862/displaying-author-for-each-chapter-in-book}%
+%
+% \begin{illustration}
+% \setlength{\fboxsep}{0pt}
+% \centering
+% \fbox{\includegraphics[height=3in]{engineer.jpg}}
+% \captionartist
+% [The Crazy Engineer]
+% {The Crazy Engineer}[Illustration from \textit{The Crazy Engineer} \par \textit{McGuffey's Fifth Eclectic Reader}]{H. F.}{Farny}
+% \end{illustration}
+%
+% \clearpage
+%
+% \begin{figure}
+% \centering
+% \includegraphics[width=3in]{astronometer_herschel.jpg}
+% \captionartist
+% {Astronometer\label{fig:astronometer}}
+% [Astronometer made to compare the light of certain stars by the intervention of the moon.]
+% [Sir]{John}{Herschel}[, 1st Baronet KH FRS]
+% \end{figure}
+%
+% \sectionauthor{How to use \pkg{tocdata}}{Brian}{Dunn}
+%
+% This section shows how to use the \pkg{tocdata} package.
+%
+% There are several layers of macros:
+% \begin{itemize}
+% \item The lowest level provides the basic infrastructure for inserting information
+% into the table of contents, along with hooks for the \pkg{titletoc} and \pkg{tocloft} packages.
+% \item The intermediate-level macro is \cs{tocdata}, which may be used to manually
+% add a piece of data to a \cs{chapter}, \cs{section}, or \cs{caption}.
+% \cs{tocdataformat} is also provided to control the appearance of this data in the \acro{TOC}\Slash\acro{LOF}.
+% \item At the highest level is a sample implementation of user-level macros which provides
+% an easy way to create chapters, sections, and figures with associated authors and artists,
+% along with supplemental information for figures, and automatic index entries.
+% \end{itemize}
+%
+%
+% \subsection{Basic setup}
+%
+%
+%
+% \subsubsection{Preamble}
+%
+% \pkg{tocdata} may be used with either the \pkg{tocloft} or \pkg{titletoc} package,
+% or neither.
+%
+% In the preamble, use:
+% \begin{sourceverb}
+% \usepackage{tocdata}% optional
+% \usepackage{titletoc}% optional
+% \usepackage{tocloft}
+% \end{sourceverb}
+%
+%
+% \subsection{Mid-level applications}
+%
+% Should the user only wish to add a bit of text into the \acro{TOC}\Slash\acro{LOF},
+% the \cs{tocdata} macro may be used just before the sectioning or caption command,
+% as shown below.
+%
+% \subsubsection{Font control in the \acro{TOC}\Slash\acro{LOF}}
+%
+% \DescribeMacro{\tocdataformat} \marg{text}
+%
+% To control the font and formatting used for the author on the table-of-contents line,
+% the default is:
+% \begin{sourceverb}
+% \newcommand{\tocdataformat}[1]{{\normalfont\textit{\small#1}}}
+% \end{sourceverb}
+%
+% You may change to other font options, add parenetheses, etc.:
+% \begin{sourceverb}
+% \renewcommand{\tocdataformat}[1]{%
+% \normalfont\textsc{\footnotesize\qquad --- (#1)}%
+% }
+% \end{sourceverb}
+%
+%
+% \subsubsection{Adding \acro{TOC} data per section}
+%
+% \DescribeMacro{\tocdata} \marg{list extension} \marg{text}
+%
+% Before each \cs{chapter} or \cs{section} which is to have an author or other data:
+%
+% \begin{sourceverb}
+% \tocdata{toc}{Author's Name}
+% \chapter{Chapter Title} -or- \section{Section Title}
+% \end{sourceverb}
+%
+%
+% \subsubsection{Adding \acro{LOF} data per figure}
+% Before each \cs{caption} which is to have an artist or author:
+%
+% \begin{sourceverb}
+% \tocdata{lof}{Artist's/Author's Name}
+% \caption{Figure Title}
+% \end{sourceverb}
+%
+% You may wish to print the artist's name in the figure as well.
+%
+%
+% \subsection{High-level user macros}
+%
+% Additional macros are given in section \ref{sec:usermacros}.
+% These are user-level sectioning and captioning commands which add the
+% names to the \acro{TOC} and \acro{LOF},
+% and also add the artist's name and optional additional text
+% to a figure or other float (as in Figure \ref{fig:quail}),
+% and also add the names to the index.
+% An optional prefix and suffix may be attached to the names
+% (as in Figure \ref{fig:astronometer}),
+% and these will be printed at the section heading or caption, but not
+% in the \acro{TOC}\Slash\acro{LOF} or in the index.
+%
+% These macros may be ignored or modified as needed.
+%
+% \subsubsection{Sectioning commands with authors}
+%
+% \DescribeMacro{\partauthor}
+% \DescribeMacro{\chapterauthor}
+% \DescribeMacro{\sectionauthor}
+% \DescribeMacro{\subsectionauthor}
+% To use these macros, do not use \cs{tocdata} as shown above, but instead use,
+% in the place of \cs{part}:
+% \begin{sourceverb}
+% \partauthor[list entry]{Title}[Prefix]{First}{Last}[Suffix]
+% \end{sourceverb}
+% Likewise for chapters, sections, and subsections.
+%
+%
+%
+% \subsubsection{Figure captions with author \Slash artist names and additional text}
+%
+% \DescribeMacro{\captionartist}
+% \DescribeMacro{\captionauthor}
+% For figures, in the place of \cs{caption}, use:
+%
+% \begin{sourceverb}
+% \captionartist[list entry]{Title}[Text][Prefix]{First}{Last}[Suffix]
+% -or-
+% \captionauthor[list entry]{Title}[Text][Prefix]{First}{Last}[Suffix]
+% \end{sourceverb}
+%
+% By default, \cs{captionartist} prints the artist centered below the figure,
+% and \cs{captionauthor} prints the author below and flush right, without
+% an extra vertical skip.
+%
+% If you are using the optional prefix, the optional text must also be given, even if it
+% is empty. For example, use:
+% \watchout[Optional arguments]
+% \begin{sourcedisplay}
+% \cs{captionartist}\{Title\}\textcolor{red}{[]}[Sir]\{Isaac\}\{Newton\}
+% \end{sourcedisplay}
+% (If only one optional argument is given before the first name, it will be
+% interpreted as the optional text, not as the optional prefix.)
+%
+% \DescribeMacro{\captionartist*}
+% \DescribeMacro{\captionauthor*}
+% If you are using the \pkg{caption} package or another package which
+% supports \cs{caption*}, you may use \cs{captionartist*} and \cs{captionauthor*}
+% with \pkg{tocdata}.
+% The artist \Slash author and supplemental text will still be printed below the figure,
+% and an unnumbered caption will be generated, even though a \acro{LOF} entry will not be made.
+%
+% Should you mistakenly use \cs{captionartist*} or \cs{captionauthor*}
+% without the \pkg{caption} package,
+% expect to get a caption with a visible star in it.
+% \watchout[\pkg{caption} package]
+% To fix the problem:\\
+% \hspace*{1em} |\usepackage{caption}|
+%
+% \subsubsection{Formatting in sections and figures}
+%
+% \DescribeMacro{\tocdatapartprint}
+% \DescribeMacro{\tocdatachapterprint}
+% \DescribeMacro{\tocdatasectionprint}
+% \DescribeMacro{\tocdatasubsectionprint}
+% To change the formatting of the author names printed after
+% each chapter or section, or to remove them entirely, use
+% these macros, as described in section~\ref{sec:usermacros}
+% on page~\pageref{sec:usermacros}.
+%
+% \cs{tocdatachapterprint} and \cs{tocdatasectionprint} by default
+% \watchout[redefining]
+% depend on \cs{tocdatapartprint}, so if it is redefined the others will
+% have to be redefined as well.
+%
+%
+% \DescribeMacro{\tocdataartistprint}
+% \DescribeMacro{\tocdataartisttextprint}
+% \DescribeMacro{\tocdataauthorprint}
+% \DescribeMacro{\tocdataauthortextprint}
+% To change the formatting of a figure's artist's name or author's name and optional text,
+% use these macros, also described in section \ref{sec:usermacros}.
+%
+%
+% \subsubsection{Text justification}
+%
+% \changes{v2.02}{2019/03/20}{Docs: Fix macro names.}
+% \DescribeMacro{\tdartistjustify}
+% \DescribeMacro{\tdartistcenter}
+% \DescribeMacro{\tdartistleft}
+% \DescribeMacro{\tdartistright}
+% \DescribeMacro{\tdartisttextjustify}
+% \DescribeMacro{\tdartisttextcenter}
+% \DescribeMacro{\tdartisttextleft}
+% \DescribeMacro{\tdartisttextright}
+% \DescribeMacro{\tdauthorjustify}
+% \DescribeMacro{\tdauthorcenter}
+% \DescribeMacro{\tdauthorleft}
+% \DescribeMacro{\tdauthorright}
+% \DescribeMacro{\tdauthortextjustify}
+% \DescribeMacro{\tdauthortextcenter}
+% \DescribeMacro{\tdauthortextleft}
+% \DescribeMacro{\tdauthortextright}
+% The text alignment of artists, artists' additional text,
+% authors, and authors' additional text may be set using
+% these macros.
+% All following figures use the selected justification
+% until it is changed to another.
+%
+%
+% \StopEventually{\PrintChanges
+% \PrintIndex
+%
+% \clearpage
+%
+% \tdauthortextright
+% \begin{aquote}[tbp]
+% \itshape
+% ``Now this is not the end.
+% It is not even the beginning of the end.
+% But it is, perhaps, the end of the beginning.''
+% \captionauthor{\textit{Now this is not the end \dots}}
+% [(Full name used for demonstration purposes.)][Sir]{Winston Leonard Spencer}{Churchill}
+% \end{aquote}
+%
+% \begin{figure}[tbp]
+% \centering
+% \setlength{\fboxsep}{2ex}
+% {\fontsize{35}{50}\selectfont\textOmega}
+% \captionartist{Omega}{Greek}{Alphabet}
+% \end{figure}
+%
+%}
+%
+% \begin{illustration}[hbp]
+% \setlength{\fboxsep}{0pt}
+% \centering
+% \fbox{\includegraphics[width=3in]{quail.jpg}}
+% \captionartist{Quail\label{fig:quail}}
+% [Illustration from \textit{About Quail} \par \textit{McGuffey's Fifth Eclectic Reader}]
+% {Alexander}{Pope}
+% \end{illustration}
+%
+%
+% \clearpage
+%
+% \sectionauthor{Implementation}{Brian}{Dunn}
+%
+% \begin{figure}
+% \centering
+% \includegraphics[width=3in]{diagram_sunbeam.jpg}
+% \captionartist
+% {Diagram of a Sunbeam}[]
+% [Sir]{Isaac}{Newton}
+% \end{figure}
+%
+% Below, the \pkg{tocdata} code section contains the low-level code used to
+% place the data into the table of contents and list of figures, as well as
+% the code to control the font used while doing so.
+%
+% Next are sections used to support the default \LaTeX\ classes,
+% as well as \pkg{titletoc} and \pkg{tocloft}.
+%
+% Finally, the high-level macros are provided. The user may ignore or redefine these
+% as desired.
+%
+%
+% \subsection{Requirements}
+%
+% \changes{v0.12}{2016/12/02}{Added requirement for \pkg{xifthen}.}
+% \changes{v1.00}{2019/01/08}{Remove \pkg{xifthen} dependency.}
+%
+% \begin{macrocode}
+\RequirePackage{xparse}
+\RequirePackage{etoolbox}
+\RequirePackage{xpatch}
+% \end{macrocode}
+
+
+% Require that \pkg{titletoc} and \pkg{tocloft} be loaded
+% after \pkg{tocdata}, so that \pkg{tocdata} can patch
+% the \LaTeX\ core definitions first.
+% \changes{v2.00}{2019/03/12}{Test for early \pkg{titletoc} or \pkg{tocloft}.}
+% \changes{v2.03}{2019/07/04}{Added support for \pkg{memoir}.}
+% \begin{macrocode}
+\@ifpackageloaded{titletoc}{
+ \PackageError{tocdata}
+ {%
+ Load titletoc after tocdata%
+ }
+ {%
+ Move \protect\usepackage{titletoc} after \protect\usepackage{tocdata}.%
+ }
+}{}
+
+\@ifclassloaded{memoir}
+{}% memoir
+{% not memoir
+
+\@ifpackageloaded{tocloft}{
+ \PackageError{tocdata}
+ {%
+ Load tocloft after tocdata%
+ }
+ {%
+ Move \protect\usepackage{tocloft} after \protect\usepackage{tocdata}.%
+ }
+}{}
+
+}% not memoir
+% \end{macrocode}
+
+% Prevent the use of both \pkg{titletoc} and \pkg{tocloft}.
+% \changes{v2.00}{2019/03/12}{Test for both \pkg{titletoc} and \pkg{tocloft}.}
+% \begin{macrocode}
+\AtBeginDocument{
+\@ifpackageloaded{titletoc}{
+ \@ifpackageloaded{tocloft}{
+ \PackageError{tocdata}
+ {%
+ Both titletoc and tocloft are being used.\MessageBreak
+ Load only one%
+ }
+ {%
+ The tocdata package may use the default LaTeX formatting,\MessageBreak
+ or either one of titletoc or tocloft.
+ }
+ }{}
+}{}
+}
+% \end{macrocode}
+
+
+
+% \subsection{\pkg{tocdata} code}
+% \begin{macro}{\TD@thistocdata}
+% Storage for the data to be added to the end of the \acro{TOC} entry:
+% \begin{macrocode}
+\newcommand{\TD@thistocdata}{}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\settocdata}
+% Written to the |.toc| or |.lof| file, assigns \cs{TD@thistocdata}:
+% \begin{macrocode}
+\newcommand{\settocdata}[1]{\renewcommand{\TD@thistocdata}{#1}}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\tocdata} \marg{|toc| or |lof|} \marg{text}
+%
+% To be called by a higher-level macro to assign data to a |.toc| or |.lof| file:
+% \begin{macrocode}
+\newcommand{\tocdata}[2]{%
+ \@bsphack\addtocontents{#1}{\protect\settocdata{#2}}\@esphack%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\tocdatafont} \marg{text} \qquad
+% Provided for compatibility with older documents.
+% Instead, use and redefine \cs{tocdataformat} for newer documents.
+% \watchout[deprecated]
+%
+% \begin{macrocode}
+\newcommand{\tocdatafont}[1]{{\normalfont\textit{\small#1}}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\tocdataformat} \marg{text}
+%
+% Controls the font and formatting for the \acro{TOC} data:
+%
+% \begin{sourceverb}
+% \renewcommand{\tocdataformat}[1]{\textit{#1}}
+% \end{sourceverb}
+%
+% \begin{macrocode}
+\def\tocdataformat{\tocdatafont}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\TD@usetocdata}
+%
+% To be inserted into low-level \acro{TOC}-generation code where the data should appear.
+%
+% See the example using \pkg{titletoc}, below.
+%
+% Prints the data, then clears the storage so it is not printed again.
+%
+% \changes{v2.03}{2019/06/30}{Fix: No action if empty data.}
+% \changes{v2.03}{2019/06/30}{Uses \cs{tocdataformat} instead of \cs{tocdatafont}.}
+% \begin{macrocode}
+\newcommand{\TD@usetocdata}{%
+ \ifdefvoid{\TD@thistocdata}{}{%
+ \tocdataformat{\TD@thistocdata}%
+ \global\def\TD@thistocdata{}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\TD@checktocdatafont} \marg{text}
+%
+% Used to detect whether the user redefined \cs{tocdatafont},
+% in which case a warning is issued to use \cs{tocdataformat} instead.
+% \begin{macrocode}
+\let\TD@checktocdatafont\tocdatafont
+
+\AtBeginDocument{
+\ifdefequal\TD@checktocdatafont\tocdatafont{}{
+ \PackageWarningNoLine{tocdata}{%
+ You have redefined \protect\tocdatafont,\MessageBreak
+ which has been deprecated. Please redefine\MessageBreak
+ \protect\tocdataformat\space instead}
+}
+}
+% \end{macrocode}
+% \end{macro}
+
+
+
+
+% \subsection{Standard \LaTeX\ patches}
+%
+% \changes{v2.00}{2019/03/12}{Adds support for default \LaTeX\ \TOC\ formattting,
+% without using \pkg{titletoc} or \pkg{tocloft}.}
+% \changes{v2.03}{2019/06/30}{Fix: Don't try to patch \pkg{lwarp}.}
+%
+% \begin{macro}{\TD@patchstandardlatex} Patches standard \LaTeX\ \TOC\ formatting.
+% \begin{macrocode}
+\newcommand*{\TD@patchstandardlatex}{
+% \end{macrocode}
+%
+% \begin{macro}{\@dottedtocline} Patched for \pkg{tocdata}.
+% \begin{macrocode}
+\xpatchcmd{\@dottedtocline}
+ {\hfill\nobreak}
+ {\hfill\TD@usetocdata\nobreak}
+ {}%
+ {%
+ \PackageWarningNoLine{tocdata}{%
+ Could not patch LaTeX core \protect\@dottedtocline.\MessageBreak
+ Authors may not appear in TOC, LOF}
+ }%
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\l@part} Patched for \pkg{tocdata}.
+% \changes{v2.03}{2019/07/04}{Added support for \pkg{memoir}.}
+% \changes{v2.03}{2019/07/06}{Added support for \pkg{koma-script}.}
+% \begin{macrocode}
+\@ifclassloaded{memoir}{}{%
+\@ifpackageloaded{tocbasic}{}{%
+\xpatchcmd{\l@part}
+ {\hfil}
+ {\hfil\TD@usetocdata}
+ {}%
+ {%
+ \PackageWarningNoLine{tocdata}{%
+ Could not patch LaTeX core \protect\l@part.\MessageBreak
+ Authors may not appear in TOC parts}
+ }%
+}}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\l@chapter} Patched for \pkg{tocdata}.
+% \changes{v2.03}{2019/07/04}{Added support for \pkg{memoir}.}
+% \changes{v2.03}{2019/07/06}{Added support for \pkg{koma-script}.}
+% \begin{macrocode}
+\@ifclassloaded{memoir}{}{%
+\@ifpackageloaded{tocbasic}{}{%
+\@ifundefined{chapter}{}{%
+\xpatchcmd{\l@chapter}
+ {\hfil\nobreak}
+ {\hfil\TD@usetocdata\nobreak}
+ {}%
+ {%
+ \PackageWarningNoLine{tocdata}{%
+ Could not patch LaTeX core \protect\l@chapter.\MessageBreak
+ Authors may not appear in TOC chapters}
+ }%
+}}}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\l@section} Patched for \pkg{tocdata}.
+% \changes{v2.01}{2019/03/15}{Fix for \LaTeX\ core section \TOC\ entry.}
+% \changes{v2.03}{2019/06/30}{Fix: Only patch if \pkg{article}.}
+% \begin{macrocode}
+\@ifclassloaded{article}{
+\xpatchcmd{\l@section}
+ {\hfil\nobreak}
+ {\hfil\TD@usetocdata\nobreak}
+ {}%
+ {%
+ \PackageWarningNoLine{tocdata}{%
+ Could not patch LaTeX core \protect\l@section.\MessageBreak
+ Authors may not appear in TOC sections}
+ }%
+}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+}% TD@patchstandardlatex
+% \end{macrocode}
+% \end{macro}
+%
+%
+% Patch standard \LaTeX\ if not using \pkg{lwarp}, or if
+% \pkg{lwarp} is used in print mode:
+% \begin{macrocode}
+\@ifpackageloaded{lwarp}{%
+ \ifbool{warpingprint}{\TD@patchstandardlatex}{}%
+}{%
+ \TD@patchstandardlatex%
+}
+% \end{macrocode}
+
+
+% \subsection{\pkg{titletoc} support}
+%
+% \begin{figure}
+% \centering
+% \setlength{\fboxsep}{2ex}
+%
+% {\fontsize{140}{160}\selectfont$\pi$}
+% \captionartist{Pi\label{fig:workofart}}{Greek}{Alphabet}
+% \end{figure}
+%
+% \changes{v2.03}{2019/07/04}{Tested to work with \cs{dottedcontents}.}
+%
+% If \pkg{titletoc} is loaded, patch macros for its use:
+% \changes{v2.00}{2019/03/13}{Patches \cs{AtBeginDocument}.}
+% \begin{macrocode}
+\AtBeginDocument{
+\@ifpackageloaded{titletoc}{
+% \end{macrocode}
+%
+
+% \DescribeMacro{\titlecontents}
+% A set of \pkg{titletoc} commands which set up the formatting of the
+% \acro{TOC} entries. These are patched \cs{AtBeginDocument},
+% after user customizations in the preamble, to include the tocdata just after
+% the leader (|titlerule*|), and just before the page number.
+%
+% These macros also include spacing commands, and thus may need to be
+% redefined by the user.
+%
+% The default macros are patched via the \LaTeX\ core.
+% The following are only necessary if \cs{titlecontents} was used.
+% Since every combination is tried, but will only succeed if \cs{titlecontents}
+% was used, no warnings are printed if the patch fails.
+%
+% \changes{v2.00}{2019/03/13}{Improved patches for \pkg{titletoc}.}
+%
+% \begin{macrocode}
+\newcommand*{\TD@titletoc@patch}[1]{%
+ \expandafter\xpatchcmd\csname ttl@savel@#1\endcsname
+ {\nobreak\hfil\nobreak}
+ {\nobreak\hfil\TD@usetocdata\nobreak}
+ {}
+ {}
+ \expandafter\xpatchcmd\csname l@#1\endcsname
+ {\contentspage}
+ {\TD@usetocdata\contentspage}
+ {}
+ {}
+}
+
+\TD@titletoc@patch{part}
+\@ifundefined{chapter}{}{\TD@titletoc@patch{chapter}}
+\TD@titletoc@patch{section}
+\TD@titletoc@patch{subsection}
+\TD@titletoc@patch{subsubsection}
+\TD@titletoc@patch{paragraph}
+\TD@titletoc@patch{subparagraph}
+\TD@titletoc@patch{figure}
+\TD@titletoc@patch{table}
+}% end of titletoc loaded
+{% titletoc is not loaded
+}% end of \@ifpackageloaded{titletoc}
+}% end of \AtBeginDocument
+% \end{macrocode}
+
+
+% \subsection{\pkg{tocloft} and \pkg{memoir} support}
+%
+% If \pkg{tocloft} is loaded, the following patches are applied.
+% \pkg{memoir} emulates \pkg{tocloft}, so it is patched here as well.
+% \changes{v2.00}{2019/03/13}{Patches \cs{AtBeginDocument}.}
+% \changes{v2.03}{2019/07/04}{Added support for \pkg{memoir}.}
+% \begin{macrocode}
+\AtBeginDocument{
+\@ifclassloaded{memoir}
+{
+\appto{\cftpartleader}{\TD@usetocdata}
+\appto{\cftchapterleader}{\TD@usetocdata}
+\appto{\cftsectionleader}{\TD@usetocdata}
+\appto{\cftsubsectionleader}{\TD@usetocdata}
+\appto{\cftsubsubsectionleader}{\TD@usetocdata}
+\appto{\cftparagraphleader}{\TD@usetocdata}
+\appto{\cftsubparagraphleader}{\TD@usetocdata}
+\appto{\cftfigureleader}{\TD@usetocdata}
+\appto{\cfttableleader}{\TD@usetocdata}
+\appto{\cftsubfigureleader}{\TD@usetocdata}
+\appto{\cftsubtableleader}{\TD@usetocdata}
+}% memoir
+{% not memoir
+\@ifpackageloaded{tocloft}
+{
+% \end{macrocode}
+%
+% \DescribeMacro{\cftXleader} A set of commands used by \cs{tocloft} to
+% typeset the leader between the title and the page number.
+% These are patched to print the tocdata just after the leader.
+%
+% \changes{v2.00}{2019/03/13}{Improved patches for \pkg{tocloft}.}
+% \begin{macrocode}
+\appto{\cftpartleader}{\TD@usetocdata}
+\if@cfthaschapter
+ \appto{\cftchapleader}{\TD@usetocdata}
+\fi
+\appto{\cftsecleader}{\TD@usetocdata}
+\appto{\cftsubsecleader}{\TD@usetocdata}
+\appto{\cftsubsubsecleader}{\TD@usetocdata}
+\appto{\cftparaleader}{\TD@usetocdata}
+\appto{\cftsubparaleader}{\TD@usetocdata}
+\appto{\cftfigleader}{\TD@usetocdata}
+\appto{\cfttableader}{\TD@usetocdata}
+\appto{\cftsubfigleader}{\TD@usetocdata}
+\appto{\cftsubtableader}{\TD@usetocdata}
+% \end{macrocode}
+
+% \begin{macrocode}
+}% end of tocloft patches
+{}% tocloft not loaded
+}% not memoir
+}% \AtBeginDocument
+% \end{macrocode}
+%
+%
+%
+% \subsection{Koma-script \pkg{tocbasic} support}
+%
+% \changes{v2.03}{2019/07/06}{Added support for \pkg{tocbasic}.}
+%
+% There is no easy way to patch this\dots
+% \cs{TD@usetocdata} is inserted near the end of the following:
+%
+% \begin{macrocode}
+\AtBeginDocument{
+
+\@ifpackageloaded{tocbasic}{
+\renewcommand*{\scr@dte@tocline}[3]{%
+ \ifnum \@nameuse{#1tocdepth}>\c@tocdepth
+ \else
+ \tocbasic@DependOnPenaltyAndTOCLevel{#1}%
+ \addvspace{\@nameuse{scr@tso@#1@beforeskip}}\relax
+ {%
+ \leftskip \@nameuse{scr@tso@#1@indent}\relax
+ \rightskip \@tocrmarg
+ \parfillskip -\rightskip
+ \@nameuse{Ifscr@tso@#1@raggedpage}{%
+ \addtolength{\parfillskip}{\z@ \@plus 1fil}%
+ }{}%
+ \parindent \@nameuse{scr@tso@#1@indent}\relax
+ \@afterindenttrue
+ \interlinepenalty\@M
+ \expandafter\ifx\csname ragged#1entry\endcsname\raggedright
+ \addtolength\rightskip\@flushglue
+ \else
+ \def\reserved@a{\raggedright}%
+ \expandafter\ifx\csname ragged#1entry\endcsname\reserved@a
+ \addtolength\rightskip\@flushglue
+ \else
+ \renewcommand\reserved@a{\raggedright}%
+ \expandafter\ifx\csname ragged#1entry\endcsname\reserved@a
+ \addtolength\rightskip\@flushglue
+ \fi
+ \fi
+ \fi
+ \leavevmode
+ \@tempdima \@nameuse{scr@tso@#1@numwidth}\relax
+ \@nameuse{Ifscr@tso@#1@dynnumwidth}{%
+ \scr@ifundefinedorrelax{scr@dte@#1@lastmaxnumwidth}{}{%
+ \ifdim \@nameuse{scr@dte@#1@lastmaxnumwidth}>\@tempdima
+ \@tempdima\@nameuse{scr@dte@#1@lastmaxnumwidth}\relax
+ \fi
+ }%
+ }{}%
+ \advance\leftskip \@tempdima
+ \null\nobreak\hskip -\leftskip
+ {%
+ \usetocbasicnumberline
+ \let\scr@dte@numberline@box\numberline@box
+ \def\numberline@box##1{%
+ \sbox\scr@dte@tocline@numbox{\@nameuse{scr@tso@#1@numberformat}{##1}}%
+ \global\scr@dte@tocline@numberwidth
+ \dimexpr\wd\scr@dte@tocline@numbox+\@nameuse{scr@tso@#1@numsep}\relax
+ \relax
+ \ifdim \scr@dte@tocline@numberwidth
+ >\@nameuse{scr@dte@#1@maxnumwidth}\relax
+ \global\@nameuse{scr@dte@#1@maxnumwidth}\scr@dte@tocline@numberwidth
+ \fi
+ \@nameuse{Ifscr@tso@#1@dynnumwidth}{}{%
+ \ifdim \scr@dte@tocline@numberwidth
+ >\dimexpr \@nameuse{scr@tso@#1@numwidth}%
+ +\@nameuse{scr@tso@#1@numsep}\relax\relax
+ \PackageWarning{tocbasic%
+ }{%
+ number width of #1 toc entries should be
+ increased!\MessageBreak
+ Currently used number width =
+ \the\wd\scr@dte@tocline@numbox,\MessageBreak
+ Wanted number separation
+ \space\space\space =
+ \the\dimexpr\@nameuse{scr@tso@#1@numsep}\relax,\MessageBreak
+ Reserved number width \space\space\space\space\space\space =
+ \the\dimexpr\@nameuse{scr@tso@#1@numwidth}\relax%
+ }%
+ \fi
+ }%
+ \scr@dte@numberline@box{\@nameuse{scr@tso@#1@numberformat}{##1}}%
+ \@nameuse{Ifscr@tso@#1@breakafternumber}{%
+ {\parfillskip\@flushglue\par}\nobreak\hskip-\leftskip
+ }{}%
+ }%
+ \@nameuse{scr@tso@#1@entryformat}{%
+ #2%
+ \nobreak
+ {%
+ \normalfont\normalsize\@nameuse{scr@tso@#1@linefill}%
+ \TD@usetocdata% lwarp
+ \nobreak
+ \@nameuse{scr@tso@#1@pagenumberbox}{%
+ \@nameuse{scr@tso@#1@pagenumberformat}{#3}%
+ }%
+ }%
+ \@par
+ }%
+ }%
+ }%
+ \tocbasic@SetPenaltyByTOCLevel{#1}%
+ \fi
+}
+
+}{}
+}
+% \end{macrocode}
+%
+%
+% \subsection{\pkg{tocstyle} support}
+%
+% \changes{v2.03}{2019/07/06}{Added support for \pkg{tocstyle}.}
+%
+% \begin{macrocode}
+\AtBeginDocument{
+\@ifpackageloaded{tocstyle}{
+\xpatchcmd\tocstyle@dottedtocline
+ {%
+ \ifx\tocstyle@feature@leaders\relax
+ \leaders\hbox{$\m@th
+ \mkern \@dotsep mu\hbox{\tocstyle@feature@dothook .}%
+ \mkern \@dotsep mu$}\hfill
+ \else
+ \tocstyle@feature@leaders
+ \fi%
+ }
+ {%
+ \ifx\tocstyle@feature@leaders\relax
+ \leaders\hbox{$\m@th
+ \mkern \@dotsep mu\hbox{\tocstyle@feature@dothook .}%
+ \mkern \@dotsep mu$}\hfill
+ \else
+ \tocstyle@feature@leaders
+ \fi%
+ \TD@usetocdata%
+ }
+ {}%
+ {%
+ \PackageWarningNoLine{tocdata}{%
+ Could not patch tocstyle \protect\tocstyle@dottedtocline.\MessageBreak
+ Authors may not appear in TOC, LOF}
+ }%
+}{}
+}
+% \end{macrocode}
+%
+%
+%
+% \clearpage
+%
+% \subsection{User-level macros}
+% \label{sec:usermacros}
+%
+% \begin{figure}
+% \centering
+% \includegraphics[width=3in]{newton_astrolabe.jpg}
+% \captionartist{Sir Isaac Newton's Astrolabe}[][Sir]{Isaac}{Newton}
+% \end{figure}
+%
+%
+% Example user-level macros follow.
+%
+% These macros are in addition to the standard sectioning and caption commands,
+% adding first and last names for the table of contents and list of figures.
+% For parts, chapters, sections, and subsections,
+% the author's name with optional prefix and suffix
+% are also added below the title.
+% For figures, \cs{captionauthor} also prints the figure's artist's
+% name with optional prefix and suffix just below the figure.
+%
+% The regular sectioning and caption commands may still be used for anything
+% which does not have an author/artist name.
+%
+%
+% \subsubsection{User customization}
+%
+%
+% \begin{macro}{\TDoptionalnameprint} \marg{name}
+%
+% Adds optional artist's name and the following space.
+%
+% \changes{v2.03}{2019/07/04}{Name changed from \cs{TD@optionalnameprint}.}
+% \begin{macrocode}
+\newcommand{\TDoptionalnameprint}[1]
+{%
+ \ifblank{#1}%
+ {}%
+ {#1~}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \begin{macro}{\tocdatapartprint} \marg{prefix} \marg{first} \marg{last} \marg{suffix}
+%
+% User-redefinable macro to print the author's name underneath the part title.
+%
+% \changes{v0.12}{2016/11/29}{Improved spacing.}
+% \changes{v2.00}{2019/03/15}{Added.}
+% \changes{v2.03}{2019/07/04}{Removed \cs{unskip}.}
+%
+% \begin{macrocode}
+\newcommand{\tocdatapartprint}[4]
+{%
+ \par\noindent%
+ {%
+ \normalfont\normalsize%
+ \textit{%
+ \hspace*{4em}--- %
+ \TDoptionalnameprint{#1}\TDoptionalnameprint{#2}#3#4%
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\tocdatachapterprint} \marg{prefix} \marg{first} \marg{last} \marg{suffix}
+%
+% User-redefinable macro to print the author's name underneath the chapter title.
+%
+% \changes{v2.00}{2019/03/15}{Renamed from \cs{tocdatachapprint}.}
+%
+% \begin{macrocode}
+\@ifundefined{chapter}
+{}% if no chapters
+{% only of chapters exists in this documentclass:
+ \let\tocdatachapterprint\tocdatapartprint
+}% end of chapters-only
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\tocdatasectionprint} \marg{prefix} \marg{first} \marg{last} \marg{suffix}
+%
+% User-redefinable macro to print the author's name underneath the section title.
+%
+% \changes{v2.00}{2019/03/15}{Renamed from \cs{tocdatasecprint}.}
+%
+% \begin{macrocode}
+\let\tocdatasectionprint\tocdatapartprint
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\tocdatasubsectionprint} \marg{prefix} \marg{first} \marg{last} \marg{suffix}
+%
+% User-redefinable macro to print the author's name underneath the subsection title.
+%
+% \changes{v2.00}{2019/03/15}{Added.}
+% \begin{macrocode}
+\let\tocdatasubsectionprint\tocdatapartprint
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\TDartistauthorprint} \marg{1: "artist" or "author"}
+% \marg{2: prefix} \marg{3: first} \marg{4: last} \marg{5: suffix}
+%
+% \changes{v2.00}{2019/03/15}{Improved font control.}
+% \changes{v2.03}{2019/07/04}{Name changed from \cs{TD@artistauthorprint}.}
+%
+% \begin{macrocode}
+\newcommand{\TDartistauthorprint}[5]{%
+ \begin{minipage}{\linewidth}%
+ \csuse{TD@#1align}%
+ \footnotesize\normalfont%
+ \textsc{{\TDoptionalnameprint{#2}\TDoptionalnameprint{#3}#4#5}}%
+ \end{minipage}%
+ \par%
+ \addvspace{2ex}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\tocdataartistprint} \marg{prefix} \marg{first} \marg{last} \marg{suffix}
+%
+% User-redefinable macro to print the artist's name underneath the figure.
+%
+% \changes{v0.12}{2016/11/29}{Improved spacing.}
+% \changes{v0.12}{2016/11/30}{Added name alignment.}
+% \changes{v2.00}{2019/03/14}{Added.}
+% \changes{v2.02}{2019/03/20}{Improved spacing.}
+%
+% \begin{macrocode}
+\newcommand{\tocdataartistprint}{%
+ \par\smallskip%
+ \TDartistauthorprint{artist}%
+}
+% \end{macrocode}
+% To remove the artist's name, redefine this as a null function taking four arguments:
+% \begin{sourceverb}
+% \renewcommand{\tocdataartistprint}[4]{}
+% \end{sourceverb}
+% \end{macro}
+%
+%
+% \begin{macro}{\tocdataauthorprint} \marg{prefix} \marg{first} \marg{last} \marg{suffix}
+%
+% User-redefinable macro to print the author's name underneath the figure.
+%
+% \changes{v2.00}{2019/03/14}{Added.}
+% \changes{v2.02}{2019/03/20}{Improved spacing.}
+%
+% \begin{macrocode}
+\newcommand{\tocdataauthorprint}{%
+ \par\smallskip%
+ \TDartistauthorprint{author}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\TDartistauthortextprint}
+% \marg{"artist" or "author"} \marg{text}
+% \changes{v0.12}{2016/11/29}{Improved spacing.}
+% \changes{v0.12}{2016/11/29}{Added text alignment.}
+% \changes{v2.00}{2019/03/15}{Improved font control.}
+% \changes{v2.00}{2019/03/14}{Replaced \cs{tocdatafigtextprint} with
+% \cs{tocdataartisttextprint} and \cs{tocdataauthortextprint}.}
+% \changes{v2.03}{2019/07/04}{Name changed from \cs{TD@artistauthortextprint}.}
+% \begin{macrocode}
+\newcommand{\TDartistauthortextprint}[2]{%
+ \addvspace{2ex}%
+ \begin{minipage}{\linewidth}%
+ \csuse{TD@#1textalign}%
+ \footnotesize\normalfont%
+ \setlength{\parskip}{1.5ex}%
+ \setlength{\parindent}{0em}%
+ #2%
+ \end{minipage}%
+ \par%
+ \addvspace{2ex}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\tocdataartisttextprint} \marg{text}
+%
+% User-redefinable macro to print the optional text below the artist's name.
+%
+%
+% \begin{macrocode}
+\newcommand{\tocdataartisttextprint}{\TDartistauthortextprint{artist}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tocdataauthortextprint} \marg{text}
+%
+% User-redefinable macro to print the optional text below the author's name.
+%
+% \begin{macrocode}
+\newcommand{\tocdataauthortextprint}{\TDartistauthortextprint{author}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsubsection{Chapters and sections}
+%
+%
+% With \pkg{book} or \pkg{report} classes,
+% a starred \cs{part}'s name is printed on its own page,
+% \watchout[\cs{part*}]
+% making it difficult to add an author's name. If the author's name
+% is appended to the part's name, it also appears in name references as well.
+% Thus, if using one of these classes and a starred \cs{part}, the author's name is not
+% printed.
+% Using an unstarred \cs{part} with an author's name does work as expected.
+% The author's name is printed as part of the long name,
+% but does not appear in the name reference, which uses the short name.
+%
+% \begin{macro}{\TD@starredsectionauthorprint} \marg{author's name}
+% \changes{v2.03}{2019/07/04}{No author for \cs{part*} in \pkg{book} class.}
+% \begin{macrocode}
+\@ifclassloaded{article}
+{
+ \newcommand*{\TD@starredsectionauthorprint}[5]{%
+ \unskip\medskip\csuse{tocdata#1print}{#2}{#3}{#4}{#5}\par%
+ \bigskip%
+ }
+}
+{
+ \newcommand*{\TD@starredsectionauthorprint}[5]{%
+ \ifstrequal{#1}{part}%
+ {%
+ \PackageWarning{tocdata}{%
+ The author's name will not be printed for\MessageBreak
+ the starred \protect\part%
+ }
+ }%
+ {%
+ \unskip\medskip\csuse{tocdata#1print}{#2}{#3}{#4}{#5}\par%
+ \bigskip%
+ }%
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\TD@sectionauthor}
+% \marg{1: section type}
+% *
+% \oarg{3: \TOC\ entry} \marg{4: title}
+% \oarg{5: prefix} \marg{6: first} \marg{7: last} \oarg{8: suffix}
+%
+% \changes{v0.12}{2016/11/28}{Expands first name before index check.}
+% \changes{v2.00}{2019/03/15}{Improved page breaks.}
+% \changes{v2.00}{2019/03/15}{Factored.}
+% \changes{v2.02}{2019/03/21}{Fix: Sectioning name formatting.}
+% \changes{v2.03}{2019/06/30}{Fix: Starred sectioning name formatting and labels.}
+% \begin{macrocode}
+\NewDocumentCommand{\TD@sectionauthor}{m s o m O{} m m O{}}{%
+% \end{macrocode}
+% The starred version does not create a \acro{TOC} entry,
+% so it is simply used as-is:
+% \begin{macrocode}
+ \IfBooleanTF{#2}%
+ {% star:
+ \csuse{#1}*{#4}%
+ \TD@starredsectionauthorprint{#1}{#5}{#6}{#7}{#8}%
+ }%
+% \end{macrocode}
+% The un-starred version appears in the \acro{TOC}, so add the author's name:
+% \begin{macrocode}
+ {% no star:
+ \tocdata{toc}{#6 #7}%
+% \end{macrocode}
+% Create the section depending on the optional name:
+% \begin{macrocode}
+ \IfValueTF{#3}%
+ {\csuse{#1}[#3]{#4\nopagebreak\csuse{tocdata#1print}{#5}{#6}{#7}{#8}}}%
+ {\csuse{#1}[#4]{#4\nopagebreak\csuse{tocdata#1print}{#5}{#6}{#7}{#8}}}%
+ }% no star
+% \end{macrocode}
+% Create an index entry depending on whether there is a first name:
+% \begin{macrocode}
+ \ifblank{#6}%
+ {\index{#7}}%
+ {\index{#7, #6}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\partauthor} * \oarg{2: \TOC\ entry} \marg{3: title}
+% \oarg{4: prefix} \marg{5: first} \marg{6: last} \oarg{7: suffix}
+%
+% \changes{v2.00}{2019/03/15}{Added.}
+%
+% \begin{macrocode}
+\newcommand*{\partauthor}{\TD@sectionauthor{part}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\chapterauthor} * \oarg{2: \TOC\ entry} \marg{3: title}
+% \oarg{4: prefix} \marg{5: first} \marg{6: last} \oarg{7: suffix}
+%
+% \begin{macrocode}
+\@ifundefined{chapter}
+{}% if no chapters
+{% only of chapters exists in this documentclass:
+ \newcommand*{\chapterauthor}{\TD@sectionauthor{chapter}}
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\sectionauthor} * \oarg{2: \TOC\ entry} \marg{3: title}
+% \oarg{4: prefix} \marg{5: first} \marg{6: last} \oarg{7: suffix}
+%
+% \begin{macrocode}
+\newcommand*{\sectionauthor}{\TD@sectionauthor{section}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\subsectionauthor} * \oarg{2: \TOC\ entry} \marg{3: title}
+% \oarg{4: prefix} \marg{5: first} \marg{6: last} \oarg{7: suffix}
+%
+% \changes{v2.00}{2019/03/15}{Added.}
+%
+% \begin{macrocode}
+\newcommand*{\subsectionauthor}{\TD@sectionauthor{subsection}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsubsection{Figure artist name alignment}
+%
+% \changes{v2.00}{2019/03/14}{Replaced \cs{tdnameX} with
+% \cs{tdauthorX} and \cs{tdartistX}.}
+%
+% \begin{macro}{\TD@artistalign} Sets text alignment for the artist's name.
+% \begin{macrocode}
+\newcommand{\TD@artistalign}{\centering}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tdartistjustify} Sets justified text alignment for the artist's name.
+% \changes{v0.12}{2016/11/30}{etc. Added name alignment.}
+% \begin{macrocode}
+\newcommand{\tdartistjustify}{%
+ \renewcommand{\TD@artistalign}{}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tdartistcenter} Sets centered text alignment for the artist's name.
+% \begin{macrocode}
+\newcommand{\tdartistcenter}{%
+ \renewcommand{\TD@artistalign}{\centering}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tdartistleft} Sets left text alignment for the artist's name.
+% \begin{macrocode}
+\newcommand{\tdartistleft}{%
+ \renewcommand{\TD@artistalign}{\raggedright}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tdartistright} Sets right text alignment for the artist's name.
+% \begin{macrocode}
+\newcommand{\tdartistright}{%
+ \renewcommand{\TD@artistalign}{\raggedleft}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Figure author name alignment}
+%
+% \begin{macro}{\TD@authoralign} Sets text alignment for the author's name.
+% \begin{macrocode}
+\newcommand{\TD@authoralign}{\raggedleft}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tdauthorjustify} Sets justified text alignment for the author's name.
+% \changes{v0.12}{2016/11/30}{etc. Added name alignment.}
+% \begin{macrocode}
+\newcommand{\tdauthorjustify}{%
+ \renewcommand{\TD@authoralign}{}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tdauthorcenter} Sets centered text alignment for the author's name.
+% \begin{macrocode}
+\newcommand{\tdauthorcenter}{%
+ \renewcommand{\TD@authoralign}{\centering}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tdauthorleft} Sets left text alignment for the author's name.
+% \begin{macrocode}
+\newcommand{\tdauthorleft}{%
+ \renewcommand{\TD@authoralign}{\raggedright}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tdauthorright} Sets right text alignment for the author's name.
+% \begin{macrocode}
+\newcommand{\tdauthorright}{%
+ \renewcommand{\TD@authoralign}{\raggedleft}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Figure artist text alignment}
+%
+% \begin{macro}{\TD@artisttextalign} Sets text alignment in the optional text.
+% \begin{macrocode}
+\newcommand{\TD@artisttextalign}{\centering}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tdartisttextjustify} Sets justified text alignment in the optional text.
+% \changes{v0.12}{2016/11/30}{etc. Added text alignment.}
+% \begin{macrocode}
+\newcommand{\tdartisttextjustify}{%
+ \renewcommand{\TD@artisttextalign}{}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tdartisttextcenter} Sets centered text alignment in the optional text.
+% \begin{macrocode}
+\newcommand{\tdartisttextcenter}{%
+ \renewcommand{\TD@artisttextalign}{\centering}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tdartisttextleft} Sets left text alignment in the optional text.
+% \begin{macrocode}
+\newcommand{\tdartisttextleft}{%
+ \renewcommand{\TD@artisttextalign}{\raggedright}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tdartisttextright} Sets right text alignment in the optional text.
+% \begin{macrocode}
+\newcommand{\tdartisttextright}{%
+ \renewcommand{\TD@artisttextalign}{\raggedleft}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Figure author text alignment}
+%
+% \begin{macro}{\TD@authortextalign} Sets text alignment in the optional text.
+% \begin{macrocode}
+\newcommand{\TD@authortextalign}{\centering}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tdauthortextjustify} Sets justified text alignment in the optional text.
+% \changes{v0.12}{2016/11/30}{etc. Added text alignment.}
+% \begin{macrocode}
+\newcommand{\tdauthortextjustify}{%
+ \renewcommand{\TD@authortextalign}{}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tdauthortextcenter} Sets centered text alignment in the optional text.
+% \begin{macrocode}
+\newcommand{\tdauthortextcenter}{%
+ \renewcommand{\TD@authortextalign}{\centering}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tdauthortextleft} Sets left text alignment in the optional text.
+% \begin{macrocode}
+\newcommand{\tdauthortextleft}{%
+ \renewcommand{\TD@authortextalign}{\raggedright}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tdauthortextright} Sets right text alignment in the optional text.
+% \begin{macrocode}
+\newcommand{\tdauthortextright}{%
+ \renewcommand{\TD@authortextalign}{\raggedleft}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsubsection{Figure captions with artists and authors}
+%
+% These macros adds optional supplemental text, which will be printed below the
+% artist's name and above the caption, presuming that the caption is generated
+% below the figure.
+%
+% If using the optional prefix, the optional text must also be given, even if it
+% \watchout[Optional arguments]
+% is empty. For example, use:
+% \begin{sourcedisplay}
+% \cs{captionartist}\{Title\}\textcolor{red}{[]}[Sir]\{Isaac\}\{Newton\}
+% \end{sourcedisplay}
+% If only one optional argument is given before the first name, it will be
+% interpreted as the optional text, not as the optional prefix.
+%
+%
+% \begin{macro}{\TD@captionartistauthor}
+% \marg{1: "artist" or "author"}
+% *
+% \oarg{3: \LOF\ entry} \marg{4: title}
+% \oarg{5: supplemental text}
+% \oarg{6: prefix} \marg{7: first} \\
+% \marg{8: last} \oarg{9: suffix}
+%
+% Factored from \cs{captionartist} and \cs{captionauthor}, below.
+%
+% \changes{v0.12}{2016/11/28}{Allows paragraphs in add'l text.}
+% \changes{v0.12}{2016/11/28}{Expands first name before index check.}
+% \changes{v2.00}{2019/03/15}{Factored.}
+%
+% \begin{macrocode}
+\NewDocumentCommand{\TD@captionartistauthor}{m s o m +O{} O{} m m O{}}{%
+% \end{macrocode}
+%
+% Print the artist's name next to the figure:
+% \begin{macrocode}
+ \csuse{tocdata#1print}{#6}{#7}{#8}{#9}%
+% \end{macrocode}
+% If supplemental text is provided, print it below the author:
+% \begin{macrocode}
+ \ifblank{#5}%
+ {}%
+ {\par\csuse{tocdata#1textprint}{#5}}%
+% \end{macrocode}
+% Remove any existing vertical space and only use \cs{caption}'s built-in spacing:
+% \begin{macrocode}
+ \unskip%
+% \end{macrocode}
+% If starred, there should be no \acro{TOC} entry, so do not add tocdata.
+% Use \cs{caption*} from the \pkg{caption} or similar packages.
+% \begin{macrocode}
+ \IfBooleanTF{#2}%
+ {% starred
+ \IfValueTF{#3}{\caption*[#3]{#4}}{\caption*{#4}}%
+ }% starred
+ {% not starred
+% \end{macrocode}
+% No starred, so remember the artist's name for inclusion in the \acro{LOF}:
+% \changes{v2.00}{2019/03/14}{Added support for new float types.}
+% \begin{macrocode}
+ \tocdata{\csuse{ext@\@captype}}{#7 #8}%
+% \end{macrocode}
+% Create the caption depending on the optional name:
+% \begin{macrocode}
+ \IfValueTF{#3}{\caption[#3]{#4}}{\caption{#4}}%
+ }% not starred
+% \end{macrocode}
+% Create an index entry depending on whether there is a first name:
+% \begin{macrocode}
+ \ifblank{#7}%
+ {\index{#8}}%
+ {\index{#8, #7}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\captionartist} * \oarg{2: \LOF\ entry} \marg{3: title}
+% \oarg{4: supplemental text}
+% \oarg{5: prefix} \marg{6: first} \\
+% \marg{7: last} \oarg{8: suffix}
+%
+% \begin{macrocode}
+\newcommand*{\captionartist}{\TD@captionartistauthor{artist}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\captionauthor} * \oarg{2: \LOF\ entry} \marg{3: title}
+% \oarg{4: supplemental text}
+% \oarg{5: prefix} \marg{6: first} \\
+% \marg{7: last} \oarg{8: suffix}
+%
+% \begin{macrocode}
+\newcommand*{\captionauthor}{\TD@captionartistauthor{author}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{illustration}
+% \setlength{\fboxsep}{0pt}
+% \centering
+% \fbox{\includegraphics[width=4in]{lacquer_go_board.jpg}}
+% \captionartist{Lacquer Go Board}[From the series \textit{Uma Zukushi}.]{Katsushika}{Hokusai}
+% \end{illustration}
+%
+%
+%
+%
+%
+%
+% ^^A At end:
+%
+% \clearpage
+% ^^A \pagestyle{plain}
+% \phantomsection
+% \tocdata{toc}{\prog{makeindex}}
+% \addcontentsline{toc}{section}{Change History and \indexname}
+%
+% \pagestyle{plain}
+%
+% \Finale
+\endinput
diff --git a/macros/latex/contrib/tocdata/tocdata.ins b/macros/latex/contrib/tocdata/tocdata.ins
new file mode 100644
index 0000000000..22df61952b
--- /dev/null
+++ b/macros/latex/contrib/tocdata/tocdata.ins
@@ -0,0 +1,47 @@
+%% tocdata.ins
+%% Copyright 2016 Brian Dunn
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Brian Dunn.
+%%
+%% This work consists of the files tocdata.dtx and tocdata.ins
+%% and the derived file tocdata.sty.
+\input docstrip.tex
+\keepsilent
+\usedir{tex/latex/ package }
+\preamble
+This is a generated file.
+Copyright 2016 Brian Dunn
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+\endpreamble
+\askforoverwritefalse
+\generate{\file{tocdata.sty}{\from{tocdata.dtx}{package}}}
+\Msg{*********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the}
+\Msg{* following file into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space\space tocdata.sty}
+\Msg{*}
+\Msg{* To produce the documentation run the file tocdata.dtx}
+\Msg{* through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{*********************************************************}
+\endbatchfile
diff --git a/macros/latex/contrib/tocdata/tocdata.pdf b/macros/latex/contrib/tocdata/tocdata.pdf
new file mode 100644
index 0000000000..4f0498a95f
--- /dev/null
+++ b/macros/latex/contrib/tocdata/tocdata.pdf
Binary files differ