From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/tocdata/README.txt | 38 + macros/latex/contrib/tocdata/tocdata.dtx | 1810 ++++++++++++++++++++++++++++++ macros/latex/contrib/tocdata/tocdata.ins | 47 + macros/latex/contrib/tocdata/tocdata.pdf | Bin 0 -> 919235 bytes 4 files changed, 1895 insertions(+) create mode 100644 macros/latex/contrib/tocdata/README.txt create mode 100644 macros/latex/contrib/tocdata/tocdata.dtx create mode 100644 macros/latex/contrib/tocdata/tocdata.ins create mode 100644 macros/latex/contrib/tocdata/tocdata.pdf (limited to 'macros/latex/contrib/tocdata') 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 +%\NeedsTeXFormat{LaTeX2e}[1999/12/01] +%\ProvidesPackage{tocdata} +% [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} +% +% \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 Binary files /dev/null and b/macros/latex/contrib/tocdata/tocdata.pdf differ -- cgit v1.2.3