% \iffalse meta-comment % % Copyright (C) 2025 by Charles P. Schaum % ----------------------------------------------- % % This file 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 includes all source and generated files % described as such in README.md, included herein. % % ----------------------------------------------- % %<*internal> \iffalse % %<*readme> %<1 | Yes | | Cygwin | Cygwin (packages) | Not tested; likely1 | Not tested; likely 2 | | Cygwin | MikTeX (Windows) | Yes1, 3 | No;4 do manually | | Cygwin | TeXlive (Windows) | Not tested; likely1 | Not tested; do manually | | WSL | WSL Linux packages | Yes1 | Yes5 | | WSL | MikTeX (Windows) | Yes1, 3 | No;4 do manually | | WSL | TeXlive (Windows) | Not tested; likely1 | Not tested; do manually | 1 All dependencies must be met. Bear in mind possible MacOS issues. 2 Installs only to Cygwin environment; not to Windows environment. 3 The `make images` target using `pdfjam` likely will not work as desired. **Section 6.2.3 Images** 4 Neither `ltxfileinfo` nor `kpsewhich` will give useful results; do a manual install. 5 Installs only to WSL Linux distro environment; not to Windows environment. # 4 Building and Installing Regarding command line options longer than one letter, the programs included with major TeX distributions, except for `pdfjam`, use either single dashes or GNU-style double dashes. Here, for the sake of consistency, we use the GNU convention of single dashes with one-letter options and double dashes for longer options. ## 4.1 GNU `make` for Building and Installation ### 4.1.1 Build In the directory where the files unpacked from the zip archive are located, type `make`. This will do a fresh build of the package using `pdflatex`. To add more options, use, e.g.: `make ADDOPTS="--synctex=1"`. There is a make target, `make unpack`, that does not build the package. It only regenerates files from `nameauth.dtx`. ### 4.1.2 Install Currently, `Makefile` only installs into POSIX environments. For individual use, one must have a TDS-compliant tree set up in order for installation to work. For more info in setting up those trees, see **Section 4.2.3** for the individual case and **Section 4.2.4** for the site-wide case. For site-wide use, one must be able to get root privileges via `sudo`. * Type `make inst` to install the package files in the user's personal TDS-compliant directory tree. * Type `make install` to install the package files in the site-wide, local TDS-compliant directory tree. The user will be prompted for the `sudo` password. ### 4.1.3 Remove The same constraints that apply to installation also apply to removal. If one can do the former, one can do the latter. * Type `make uninst` to remove the package files in the user's personal TDS-compliant directory tree. * Type `make uninstall` to remove the package files in the site-wide, local TDS-compliant directory tree. The user will be prompted for the `sudo` password. The approach of `Makefile` is not to get too aggressive with deletions from the texmf tree, just in case. One may see harmless, extra, empty directories after removal. One can delete them manually. ## 4.2 Manual Building and Installation Unlike the case with the supplied `Makefile`, which automates adding extensions, in certain cases using Windows TeX distros, one may have to add the ".exe" extension to the programs. ### 4.2.1 Build 1. Using the unpacked files from the zip archive, we begin by creating the installation driver, unpacking additional files from `nameauth.dtx`, and generating a copy of the documentation without the table of contents and cross-references: pdflatex --shell-escape --recorder --interaction=batchmode nameauth.dtx a. We see the following main files: `Makefile`, `cat01.pdf`, `beamer01.pdf`, `beamer02.pdf`, `beamer03.pdf`, `nameauth.dtx`, `compat.tex`, `examples.tex`, `nameauth.pdf`, `README.md`, `nameauth.ins`, and `nameauth.sty`. b. We also see the following temporary files: `nameauth.aux`, `nameauth.fls`, `nameauth.glo`, `nameauth.hd`, `nameauth.idx`, `nameauth.log`, `nameauth.out`, `nameauth.tmp`, and `nameauth.toc`. 2. Generate the TOC and cross-references within the documentation: pdflatex --recorder --interaction=nonstopmode nameauth.dtx 3. Generate the index and glossary files using `makeindex`: makeindex -q -s gglo.ist -o nameauth.gls nameauth.glo makeindex -q -s gind.ist -o nameauth.ind nameauth.idx This adds three files: `nameauth.gls`, `nameauth.ilg`, and `nameauth.ind`. 4. Integrate the glossary (list of changes) and index into the documentation. The second run updates the TOC: pdflatex --recorder --interaction=nonstopmode nameauth.dtx pdflatex --recorder --interaction=nonstopmode nameauth.dtx The list of files now looks like: | Filename | Description | | :------------- | :--------------------------- | | `Makefile` | for use with GNU make | | `cat01.pdf` | manual illustration, ch. 7 | | `beamer01.pdf` | manual illustration, ch. 9 | | `beamer02.pdf` | manual illustration, ch. 9 | | `beamer03.pdf` | manual illustration, ch. 9 | | `nameauth.dtx` | commented style file | | | | | `compat.tex` | compatibility module | | `examples.tex` | example file | | `nameauth.pdf` | package documentation | | `README.md` | this file | | | | | `nameauth.ins` | installation driver | | `nameauth.sty` | style file | | | | | `nameauth.aux` | auxiliary file | | `nameauth.fls` | shows files read | | `nameauth.glo` | raw glossary entries | | `nameauth.hd` | | | `nameauth.idx` | raw index entries | | `nameauth.log` | log file | | `nameauth.out` | pdf bookmark/hypertext info | | `nameauth.tmp` | temp file used with fancyvrb | | `nameauth.toc` | table of contents info | | `manhook.tmp` | snippet with manual's fmt | | `nullhook.tmp | snippet with default format | | | | | `nameauth.gls` | typeset glossary entries | | `nameauth.ilg` | `makeindex` log file | | `nameauth.ind` | typeset index entries | ### 4.2.2 General Install Info In order to perform manual installation, one should be familiar with the general information at the [TeX FAQ](https://www.texfaq.org/FAQ-installthings). Different TeX distributions have somewhat different ways to store TDS-compliant configuration and package data. See, for example, for MikTeX [here](https://docs.miktex.org/manual/localadditions.html#id573803) and [here](https://miktex.org/kb/texmf-roots). Otherwise see the [TeX FAQ](https://www.texfaq.org/FAQ-privinst) and [this page](https://en.wikibooks.org/wiki/LaTeX/Installing_Extra_Packages). The instructions below conform generally to a Unix-like system. There are some cases under Windows where this method may not work. For other non-POSIX systems, one will have to know the appropriate procedures and documentation as needed for those cases, which are not covered here. The user must already have a TDS-compliant tree set up in order for installation to work. We assume that one knows how to become superuser, create directories, move files, and the like. ### 4.2.3 Install for a User `TEXMFHOME` is an environment (shell) variable that points to the root of a TDS-compliant directory tree available to a user. To get its value on POSIX-compliant systems, use: * `kpsewhich --var-value TEXMFHOME` Quite often, `$TEXMFHOME` is equivalent to `$HOME/texmf`. The dollar sign in front of the variable denotes the value of the variable instead of its name. If `$HOME` is `/home/bob`, then `$TEXMFHOME` would be `/home/bob/texmf`. We can understand the following paths to be under this home directory. | Path | Files | | :--------------------------------- | :------------- | | `$TEXMFHOME/source/latex/nameauth` | `Makefile` | | | `cat01.pdf` | | | `beamer01.pdf` | | | `beamer02.pdf` | | | `beamer03.pdf` | | | `nameauth.dtx` | | | | | `$TEXMFHOME/doc/latex/nameauth` | `compat.tex` | | | `examples.tex` | | | `nameauth.pdf` | | | `README.md` | | | | | `$TEXMFHOME/tex/latex/nameauth` | `nameauth.sty` | Create the directories in the left-hand column, or the equivalent. For manual installation, move or copy the files in the right-hand column to their respective directories in the left-hand column. On older TeX distributions, run `mktexlsr` on `$TEXMFHOME` to complete the install process (current distributions may not need this). ### 4.2.4 Install Site-Wide `TEXMFLOCAL` is a variable that points to the root of a TDS-compliant directory tree available to all users on a local site, system-wide installation. To get its value, use: * `kpsewhich --var-value TEXMFLOCAL` See the [TeX FAQ](https://www.texfaq.org/FAQ-what-TDS). We can understand the following paths to be under this local site, system-wide directory: | Path | Files | | :---------------------------------- | :------------- | | `$TEXMFLOCAL/source/latex/nameauth` | `Makefile` | | | `cat01.pdf` | | | `beamer01.pdf` | | | `beamer02.pdf` | | | `beamer03.pdf` | | | `nameauth.dtx` | | | | | `$TEXMFLOCAL/doc/latex/nameauth` | `compat.tex` | | | `examples.tex` | | | `nameauth.pdf` | | | `README.md` | | | | | `$TEXMFLOCAL/tex/latex/nameauth` | `nameauth.sty` | Create the directories in the left-hand column. For manual installation, move or copy the files in the right-hand column to their respective directories in the left-hand column. Change file ownership as needed. If needed, run `mktexlsr` with the appropriate permissions on `$TEXMFLOCAL` to complete the install process. See also the discussion on [this page](https://tex.stackexchange.com/questions/45231/how-to-install-system-wide-packages-without-requiring-an-ls-r-database-with-tex). # 5 More on Package Building * The package and manual build on current and older TeX distributions, being designed with that in mind. * The documentation is built only with `pdflatex` for the sake of its design elements. The examples and tests can be built with any LaTeX engine. * This release was tested on Linux (Pop! OS; vanilla TL, both current and 2017) and Windows 10 (MikTeX using shells from both Cygwin and WSL). Using TL 2017, this release was tested on the full manuscript of the published volume, *Breath of God, Yet Work of Man: Scripture, Philosophy, Dialogue, and Conflict*, with Dr. Albert B. Collver III. * The CTAN release was created with the current vanilla TL on Pop! OS. See also [this page](https://tug.org/texlive/debian.html) for Debian-based systems. For Arch-based systems, the AUR has a package that takes care of dependencies. * TeXlive versions are managed on Pop! OS using [tl-switch](https://github.com/ServusCarolus/tl-switch). * Four pdf files (`cat01.pdf` and `beamer*.pdf`) used in graphic illustrations are created from the output of test files associated with this manual (see below). Normally, the user need not generate them; they are supplied as source files. # 6 Examples / Testing The file `examples.tex` also includes `compat.tex`; they should be in the same directory when compiled. The examples document should be enough to illustrate various non-trivial features of this package. It includes most of the longer examples in the manual, edited to fit together in a single document. It also includes other material and tests. In addition to this file, a special run of `nameauth.dtx` that defines the macro `\NameauthDoTestFiles` will generate many separate test files. They are not included in the package archive by default. To test `nameauth`, either test the files right after installing, or create a new testing directory. One then can copy the files from the TDS-compliant source dir and optionally, the documentation directory as well, or unpack the CTAN zip file into the test directory and build the package. ## 6.1 Using GNU `make` ### 6.1.1 Examples * Use the default: `make examples`. * If one wants to change engines and re-test the file, type `make exclean`. * To create `examples.pdf` with other LaTeX engines, one can do the following: make examples ENGINE=xelatex make examples ENGINE=lualatex make examples ENGINE=dvilualatex make examples ENGINE=latex * To add more options, use, e.g.: make examples ADDOPTS="--synctex=1" ### 6.1.2 Tests This will produce many test files numbered by chapter and example within that chapter from the `nameauth.dtx` file. By default it will compile all of the test files using `pdflatex`. * To generate test files, type `make tests`. * If one wants to change engines and re-test the files, type `make testclean`. * One can add the value of ENGINE: make tests ENGINE=xelatex make tests ENGINE=lualatex make tests ENGINE=dvilualatex make tests ENGINE=latex * To add more options, use, e.g.: make tests ADDOPTS="--synctex=1" ### 6.1.3 Manual Illustrations Four manual illustrations are based on included tests. If, for some reason, one wanted to create those illustrations (usually not required), one would type `make images`. ## 6.2 Manual Method ### 6.2.1 Examples * Compile `examples.tex`. In the following command lines, one may substitute `latex`, `xelatex`, `lualatex`, and `dvilualatex` for `pdflatex`. pdflatex --interaction=nonstopmode examples pdflatex --interaction=nonstopmode examples makeindex -o examples.ind examples.idx * This next line is needed because the `index` package makes an index of persons. makeindex -o examples.rnd examples.rdx * These lines complete the indexes and TOC. pdflatex --interaction=nonstopmode examples pdflatex --interaction=nonstopmode examples * Another step is used only with `latex` and `dvilualatex`. We default to `dvipdfmx` in case Ghostscript is not installed. If Ghostscript is already installed, one can use `dvipdf` instead. If a file `examples.out.ps` exists, one may delete it after creating the pdf file. dvipdfmx examples If one changes LaTeX engines, one first must remove all of the auxiliary files. ### 6.2.2 Tests * Generate the test files in the following manner from the `dtx`: pdflatex "\def\NameauthDoTestFiles{}\input{nameauth.dtx}" * Compile the test files. In the following command lines, one may substitute `latex`, `xelatex`, `lualatex`, and `dvilualatex` for `pdflatex`. One must change the root or base file name for each test file. pdflatex --interaction=nonstopmode test01-01 pdflatex --interaction=nonstopmode test01-01 makeindex -o test01-01.ind test01-01.idx * This next line is needed only for `test07-01.tex` because the `index` package is used for an index of persons. makeindex -o test07-01.rnd test07-01.rdx * These lines complete the indexes and TOC. pdflatex --interaction=nonstopmode test01-01 pdflatex --interaction=nonstopmode test01-01 * This step is used only when using `latex` and `dvilualatex`. dvipdfmx test01-01 If one changes LaTeX engines, one first must remove all of the auxiliary files. ### 6.2.3 Images Four manual illustrations are based on included tests. If, for some reason, one wanted to make the manual illustrations (usually not required), this would be the default procedure: * Generate the test files in the following manner from the `dtx`: pdflatex "\def\NameauthDoTestFiles{}\input{nameauth.dtx}" * Compile the test files: pdflatex --interaction=nonstopmode test07-02 pdflatex --interaction=nonstopmode test07-02 makeindex -o test07-02.ind test07-02.idx pdflatex --interaction=nonstopmode test07-02 pdflatex --interaction=nonstopmode test07-02 pdflatex --interaction=nonstopmode test09-01 pdflatex --interaction=nonstopmode test09-01 makeindex -o test09-01.ind test09-01.idx pdflatex --interaction=nonstopmode test09-01 pdflatex --interaction=nonstopmode test09-01 * Split and convert the files. If `pdfjam` is not available, one would have to use other programs to do this. pdfjam --paper a6paper --landscape --quiet test07_02.pdf 3 --outfile cat01.pdf pdfjam --paper a5paper --landscape --quiet test09_01.pdf 1 --outfile beamer01.pdf pdfjam --paper a5paper --landscape --quiet test09_01.pdf 2 --outfile beamer02.pdf pdfjam --paper a5paper --landscape --quiet test09_01.pdf 3 --outfile beamer03.pdf # 7 Additional Notes Starting from version 4.0 we switched from `xargs` and `suffix` to `xparse`. Should any modifications still require `xargs` and `suffix`, one can use the `oldargs` package option. Version 3.7 remains here: [style](https://www.tug.org/svn/texlive/branches/branch2022.final/Master/texmf-dist/tex/latex/nameauth/), [docs](https://www.tug.org/svn/texlive/branches/branch2022.final/Master/texmf-dist/doc/latex/nameauth/), and [source](https://www.tug.org/svn/texlive/branches/branch2022.final/Master/texmf-dist/source/latex/nameauth/). # 8 Copyright Copyright (C) 2025 by Charles P. Schaum This file 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: [https://www.latex-project.org/lppl.txt](https://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 includes all source and generated files described as such in this file, README.md. %readmevb % %<*internal> \fi \def\nameofplainTeX{plain} \ifx\fmtname\nameofplainTeX\else \expandafter\begingroup \fi % %<*install> \input docstrip.tex \keepsilent \askforoverwritefalse \preamble This is a generated file. Copyright (C) 2025 by Charles P. Schaum This file 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: https://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 includes all source and generated files described as such in README.md, included herein. \endpreamble \usedir{tex/latex/nameauth} \generate{ \file{\jobname.sty}{\from{\jobname.dtx}{package}} } % %\endbatchfile %<*internal> \usedir{source/latex/nameauth} \generate{ \file{\jobname.ins}{\from{\jobname.dtx}{install}} } \usedir{doc/latex/nameauth} \nopostamble \generate{ \file{examples.tex}{\from{\jobname.dtx}{examples}} } \generate{ \file{compat.tex}{\from{\jobname.dtx}{compat}} } \nopreamble \generate{ \file{README.md}{\from{\jobname.dtx}{readme}} } \ifx\fmtname\nameofplainTeX \expandafter\endbatchfile \else \expandafter\endgroup \fi % % \fi % % \iffalse %<*driver> \ProvidesFile{nameauth.dtx} % %\NeedsTeXFormat{LaTeX2e}[2005/12/01] %\ProvidesPackage{nameauth} %<*package> [2025/02/04 4.1 Name authority mechanism for consistency in text and index] % % %<*driver> %^^A %%%%%%%%%%%%%%%%%%%%%%% Start of Preamble %%%%%%%%%%%%%%%%%%%%%%%%%% \documentclass[11pt]{ltxdoc} %^^A @@@@@ General Document Layout @@@@@ %^^A Set up page layout to fit both letter and DIN A4. \usepackage[paperheight=279.4mm,paperwidth=210mm, textheight=239.4mm,textwidth=138mm, right=20mm,marginparwidth=40mm, marginparsep=4mm,nohead]{geometry} %^^A Permit horizontal boxes to be overfull. \hfuzz=3pt %^^A @@@@@ Detecting LaTeX engine used @@@@@ %^^A Since we only use pdflatex to make the documentation, %^^A We only use these macros for some detection examples. %^^A We need etoolbox for this functionality. \usepackage{etoolbox} %^^A Provide a macro to check latex versions and define a macro. %^^A This must be done in the document preamble. %^^A We use the date 2018/10/05 because that is when Unicode %^^A processing changed for the better. %^^A We use the date 2018/04/30 because that is when xparse %^^A added the ! modifier. \makeatletter \@ifl@t@r\fmtversion{2018/10/05}{\newcommand\nameauthltx{}}{} \@ifl@t@r\fmtversion{2018/04/30}{\newcommand\nameauthxp{}}{} \makeatother %^^A @@@@@ Set up fonts and typography @@@@@ %^^A We do not load inputenc unless we are using an old distro. \IfFileExists{utf8-2018.def}{}{\usepackage[utf8]{inputenc}} \usepackage[TS1,T1]{fontenc} %^^A We load the Latin Modern font. \usepackage{lmodern} %^^A Load the dangerous bend symbol. \usepackage{manfnt} %^^A We load textcomp for backward compatibility. \usepackage{textcomp} %^^A Use babel for languages. \usepackage[main=american, ngerman, latin, polutonikogreek]{babel} \newcommand\DE[1]{{\itshape\foreignlanguage{ngerman}{#1}}} \newcommand\de[1]{\foreignlanguage{ngerman}{#1}} \newcommand{\LA}[1]{{\itshape\foreignlanguage{latin}{#1}}} \newcommand{\la}[1]{\foreignlanguage{latin}{#1}} \newcommand{\el}[1]{\foreignlanguage{polutonikogreek}{#1}} %^^A Use this in Greek text. \edef\nbsp{~} %^^A This bit is for an example that involves accents and names. \usepackage{newunicodechar} \DeclareTextSymbolDefault{\textlongs}{TS1} \DeclareTextSymbol{\textlongs}{TS1}{115} \newunicodechar{ſ}{\textlongs} %^^A Use microtypography. \usepackage{microtype} %^^A Do not automatically put extra space after a full stop. \frenchspacing %^^A Redefine emphasis in the body text because italic has dedicated uses. \let\oldemph\emph \let\emph\textbf \let\Title\textit %^^A ----- Font debugging; only for developer use ----- %^^A These two macros help track down changes to font sizes. %^^A They can be used only one time each. \let\savegraf\everypar \makeatletter \newcommand\FontDebugStart {%^^A \let\oldep\everypar%^^A \newtoks\everypar%^^A \oldep{\the\everypar \llap{%^^A \hbox to \marginparwidth {\f@size\hfill}}}%^^A } \newcommand\FontDebugStop {%^^A \let\oldep\savegraf%^^A \oldep{\the\everypar}%^^A } \makeatother %^^A @@@@@ Set up specific document elements @@@@@ %^^A ----- Names, the reason for it all ----- %^^A Include specifically the current version of the package. \usepackage{\jobname}[2025/02/04] %^^A Set up the ``actual'' character \IndexActual{=} %^^A ----- Vertical space ----- %^^A Define negative skip values. \newcommand\negsmallskip{\vspace{-\smallskipamount}} \newcommand\negmedskip{\vspace{-\medskipamount}} \newcommand\negbigskip{\vspace{-\bigskipamount}} %^^A ----- TOC and index ----- %^^A Two-column TOC \usepackage[toc]{multitoc} \newcommand\TOCbreak{\addtocontents{toc}{\protect\goodbreak}} %^^A Include an index \usepackage{makeidx} %^^A These options allow the index to focus on names in the index more %^^A like one might see in a normal document. %^^A We do not use \DisableCrossrefs \CodelineIndex \RecordChanges %^^A ----- Color and graphical diagram elements ----- %^^A Color helps categorize information. \usepackage{xcolor} \colorlet{nared}{red!80!black} \colorlet{nagrey}{white!93!black} %^^A Use color for yes/no indicators in tables. \newcommand\NO{{%^^A \color{white!80!black}\lower 0.075ex\hbox{\rule{1.5ex}{1.5ex}}}} \newcommand\YES{{%^^A \color{black}\lower 0.075ex\hbox{\rule{1.5ex}{1.5ex}}}} %^^A Diagrams \usepackage{tikz} \usepackage{tcolorbox} %^^A Set basic format for tcolorboxes drawn by TikZ. \tcbset{fonttitle=\bfseries\sffamily,box align=top,lower separated=false} %^^A ----- Hyperlinks and URLs ----- %^^A Have documentation with hyperlinks \usepackage[numbered]{hypdoc} %^^A Change URL color \hypersetup{urlcolor=purple} %^^A ----- Tables, lists, quote, center ----- \usepackage{booktabs} \usepackage{colortbl} %^^A Margin note in a table \newcommand\tmarg[2][white] {%^^A \llap {%^^A \colorbox{#1}{\hbox to 0.8\marginparwidth{\strut\hfill #2}}%^^A \qquad\qquad%^^A }%^^A } \usepackage{enumitem} \setlist{rightmargin=\leftmargin,itemsep=0pt} %^^A Make default font small for Quote and Center environments \newenvironment{Quote}{\begin{quote}\small}{\end{quote}} \newenvironment{Center}{\begin{center}\small}{\end{center}} %^^A ----- Verbatim environments ----- %^^A Let verbatim environments be fancy. \usepackage{fancyvrb} %^^A Define fancyvrb defaults. \fvset{gobble=2,numbers=left,fontsize=\small} %^^A ----- Various text elements ----- %^^A Put information in the margin. \NewDocumentCommand{\Info}{s O{0ex} m} {%^^A \unless\ifinner \begingroup%^^A \microtypesetup{activate=false}%^^A \IfBooleanTF{#1} {\leavevmode\marginpar{\raggedleft\footnotesize#3}} {%^^A \vspace{\dimexpr#2\relax}%^^A \marginpar{\raggedleft\footnotesize#3}%^^A \vspace{\dimexpr-#2\relax}%^^A }%^^A \endgroup%^^A \fi } %^^A Show name patterns in margin. \NewDocumentCommand{\PatInfo}{s O{0ex} m} {%^^A \IfBooleanTF{#1} {\Info*{Name Pattern(s):\hfill\break{\ttfamily #3}}} {\Info[#2]{Name Pattern(s):\hfill\break{\ttfamily #3}}}%^^A } %^^A Show both name patterns and index entries in margin. \NewDocumentCommand{\BothInfo}{s O{0ex} m m} {%^^A \IfBooleanTF{#1} {\Info*{Name Pattern(s):\hfill\break{\ttfamily #3}%^^A \break Basic Index:\hfill\break #4}} {\Info[#2]{Name Pattern(s):\hfill\break{\ttfamily #3}%^^A \break Basic Index:\hfill\break #4}}%^^A } %^^A Return to the TOC at the end of a major section. \newcommand*\ReturnLink {%^^A \begin{center} \normalsize%^^A \tcbox[colback=nagrey]{Back to \hyperlink{TOC}{Table of Contents}} \end{center} } %^^A Print a high-visibility callout that can have an optional title. \newenvironment{InfoBox}[1][] {%^^A \begin{quote}\negmedskip\normalsize%^^A \def\titulus{#1}%^^A \ifx\titulus\empty \begin{tcolorbox}[colback=white,colframe=red!90!black]%^^A \else \begin{tcolorbox}[colback=white,colframe=red!90!black, adjusted title={\bfseries\hfil #1}]%^^A \fi } {\end{tcolorbox}\end{quote}} %^^A Print a one-cell callout that can have an optional title. \newenvironment{SyntaxBox}[1][] {%^^A \begin{quote}\negmedskip\normalsize%^^A \def\titulus{#1}%^^A \ifx\titulus\empty \begin{tcolorbox}[colback=white,colframe=darkgray]%^^A \begin{tabular}{@{}l@{}} \else \begin{tcolorbox}[colback=white,colframe=darkgray, adjusted title={\bfseries\hfil #1}]%^^A \begin{tabular}{@{}l@{}} \fi } {\end{tabular}\end{tcolorbox}\end{quote}} %^^A Print a two-cell callout that can have an optional title. \newenvironment{SyntaxBoxii}[1][] {%^^A \begin{quote}\negmedskip\normalsize%^^A \def\titulus{#1}%^^A \ifx\titulus\empty \begin{tcolorbox}[colback=white,colframe=darkgray]%^^A \begin{tabular}{@{}ll@{}} \else \begin{tcolorbox}[colback=white,colframe=darkgray, adjusted title={\bfseries\hfil #1}]%^^A \begin{tabular}{@{}ll@{}} \fi } {\end{tabular}\end{tcolorbox}\end{quote}} %^^A Print a quote and the source. \renewcommand{\hrulefill}{% \leavevmode\leaders\hrule height 1.5pt\hfill\kern0pt} \newenvironment{Quotation}[2] {%^^A \vfill%^^A \begingroup%^^A \small\noindent\hrulefill \begin{quote}%^^A \newcommand\QuoteName{#1}%^^A \newcommand\QuotePub{#2}} {\par\negbigskip\hbox{}\hfill---\ForgetThis\QuoteName%^^A \unless\ifx\QuotePub\empty \\\hbox{}\hfill\QuotePub\fi \end{quote}%^^A \endgroup%^^A } %^^A Used for many examples \newenvironment{Block} {\begin{Quote}\microtypesetup{activate=false}} {\end{Quote}} %^^A Used to show when macros may need to be global. \newcommand\Global{\Info*{\small\cmd{\global}}} %^^A Warning repeated throughout the manual \newcommand\NameArgWarning {%^^A \begin{InfoBox}%^^A Address any concerns about expansion of macros in name arguments by using \cmd{\noexpand} before those macros. \end{InfoBox}%^^A } %^^A Macros that handle describing index states \newcommand\Stay[2] {%^^A \parbox{0.685\textwidth}{#1\dotfill}%^^A \lower 2ex\hbox{%^^A \quad\tcbox[boxsep=0.2ex,colback=nagrey] {\textls[-20]{\hyperlink{State #2}{Stay in State #2}}}%^^A }%^^A } \newcommand\Go[2] {%^^A \parbox{0.685\textwidth}{#1\dotfill}%^^A \lower 2ex\hbox{%^^A \quad\tcbox[boxsep=0.2ex,colback=nagrey] {\textls[30]{\hyperlink{State #2}{Go to State #2}}}%^^A }%^^A } %^^A Used when introducing name forms \newcommand\FUse{\leavevmode\hbox to 5em{First use:\hfill}} \newcommand\LUse{\leavevmode\hbox to 5em{Later use:\hfill}} \newcommand\UseL{\leavevmode\hbox to 5em{Long use:\hfill}} \newcommand\UseS{\leavevmode\hbox to 5em{Short use:\hfill}} \newcommand\UseB{\leavevmode\hbox to 5em{\hfill}} \newcommand\UseI{\leavevmode\hbox to 5em{Index:\hfill}} %^^A Use this example in the body text. It is defined here due %^^A to the vertical bars, which are redefined in the body text. \newcommand\Orphan[2]{#1(\hyperpage{#2})} \TagName[Lost]{Name}{ \S|Orphan{perdit}} \TagName{foo\Name {bar}}{ \S|hyperpage} %^^A Define macros to differentiate name arguments. \newcommand\nri{} \newcommand\nrii{} %^^A Set up all the shorthands, but not all the names. Even if one does %^^A not set up all the names here, it is a very good idea to set up the %^^A tags for all names just below, especially in a dtx file, where the %^^A vertical bars are active. \begin{nameauth} \< Aeth & & Æthelred, II & > \< Aris & & Aristotle & > \< Bailey & Betsey & Bailey & > \< Bradley & Omar N. & Bradley & > \< Carter & J.E. & Carter, Jr. & > \< CatoE & Marcus Porcius & Cato, the Elder & > \< CatoEi & Marcus & Porcius Cato the Elder & > \< CatoY & Marcus Porcius & Cato, the Younger & > \< CatoYi & Marcus Porcius & Cato the Younger & > \< Cicero & M.T. & Cicero & > \< Confucius & & Confucius & > \< Dagb & & Dagobert & I > \< Dem & & Demetrius, I & > \< deSmet & Pierre-Jean & \noexpand\Fbox{\noexpand\AltCaps{d}e~Smet} & > \< Soto & Hernando & de~Soto & > \< Doug & Frederick & Douglass & > \< DuBois & W.E.B. & Du~Bois & > \< AltDuBois & W.E.B. & DuBois & > \< Einstein & Albert & Einstein & > \< Eliz & & Elizabeth, I & > \< Faisal & & Faisal, bin Abdulaziz & > \< Fukuyama & & \noexpand\textUC{Fukuyama} & Takeshi > \ifdefined\nameauthltx \< Ghazali & & Ghazāli & > \else \< Ghazali & & Ghazali & > \fi \< JLF & Jean de & La Fontaine & > \< JWG & J.W. von & Goethe & > \< TGrac & \noexpand\TSemp & Gracchus & > \< Harnack & Adolf & Harnack & > \< AVH & Adolf & Harnack & Adolf\noexpand\von > \< Henry & & Henry & VIII > \< Ike & Dwight D. & Eisenhower & > \< Jeff & Thomas & \noexpand\textSC{Jefferson}\noexpand\GEN{} & > \< Eriugena & & John, Eriugena & > \< MLK & Martin Luther & King, Jr. & > \< Lewis & Clive Staples & Lewis & > \< CSL & Clive Staples & Lewis & C.S. > \< Linc & Abraham & Lincoln & > \< Luth & Martin & \noexpand\textSC{Luther} & > \< Cath & Catherine \noexpand\AltCaps{d}e' & \noexpand\textSC{Medici} & > \< Miyazaki & & Miyazaki, Hayao & > \< MSens & & Miyazaki, Hayao & Sensei > \< Molnar & Frenec & Molnár & > \< Noguchi & Hideyo & Noguchi & > \< Patton & George S. & Patton, Jr. & > \< Plato & & Plato & > \< JRIV & J.D. & Rockefeller, IV & > \< JayR & J.D. & Rockefeller, IV & Jay > \< Scipio & \noexpand\SCIPi & \noexpand\SCIPii & > \< OScipio & Lucius & \noexpand\CSB & > \< Senecai & Lucius Annaeus & Seneca\nri & > \< Senecaii & Lucius Annaeus & Seneca\nrii & > \< Shak & \noexpand\WM & \noexpand\SHK & > \< Striet & John & \noexpand\de{Strietelmeier} & > \< Sun & & Sun, Yat-sen & > \< KempMed & & Thomas, à~Kempis & > \< KempW & Thomas & à~Kempis & > \< Tyson & Mike & Tyson & > \< Iron & Mike & Tyson & Iron Mike > \< Wash & George & Washington & > %^^A We use the next row as an example in the docs. %^^A \< White & E.\,B. & White & > \< Yamt & & Yamamoto, Isoroku & > \< Yosh & & Yoshida & Shigeru > \end{nameauth} %^^A Exclude names form from the index. %^^A We index them without the comma. \ExcludeName[Marcus Porcius]{Cato, the Elder} \ExcludeName[Marcus Porcius]{Cato, the Younger} %^^A Add a name tag. We usually do this in %^^A the running text below, but we do it here too. \NameAddInfo{Faisal, bin Abdulaziz}{ Al Saud} %^^A Add index sorting tags here for names needing them. %^^A That includes active Unicode, spaces, Roman numerals, %^^A and macros in names. \PretagName{Æthelred, II}{Aethelred 2} \PretagName[Thomas]{à~Kempis}{Akempis, Thomas} \PretagName{Antiochus, III}{Antiochus 3} \PretagName{Antiochus, IV}{Antiochus 4} \PretagName{Atat\"urk}{Ataturk} \PretagName[W.H.]{Auden}{Auden, Wystan} \PretagName[Charles]{\noexpand\textBF{Babbage}}{Babbage, Charles} \PretagName{Bo\"ethius}{Boethius} \PretagName[Robert]{\textSC{Burns}}{Burns, Robert} \PretagName[Giovanni]{d'Andrea}{Dandrea, Giovanni} \PretagName{Demetrius, I}{Demetrius 1} \PretagName[Walter]{de la Mare}{delaMare, Walter} \PretagName[Jacques]{De~Pamele}{Depamele, Jacques} \PretagName[Charles-Louis]{de Secondat}{deSecondat, Charles} \PretagName[Pierre-Jean]{\noexpand\Fbox{\noexpand\AltCaps{d}e~Smet}} {deSmet, Pierre-Jean} \PretagName[Hernando]{de~Soto}{Desoto, Hernando} \PretagName{\textit{Doctor angelicus}}{Doctor angelicus} \PretagName{\textit{Doctor mellifluus}}{Doctor mellifluus} \PretagName[W.E.B.]{Du~Bois}{DuBois, William} \PretagName{du~Cange}{Ducange} \PretagName[Charles]{du~Fresne}{Dufresne, Charles} \PretagName[S.J.]{Du Toit}{DuToit, Stephanus} \PretagName{Elizabeth, I}{Elizabeth 1} \PretagName{\noexpand\textUC{Fukuyama}}[Takeshi]{Fukuyama Takeshi} \PretagName[Greta]{\noexpand\textSC{Garbo}}{Garbo, Greta} \ifdefined\nameauthltx \PretagName{Ghazāli}{Ghazali} \fi \PretagName[\noexpand\TSemp]{Gracchus}{Gracchus, Tiberius Sempronius} \PretagName{Gregory, I}{Gregory 1} \PretagName[Thomas]{\noexpand\textSC{Jefferson}\noexpand\GEN{}} {Jefferson, Thomas} \PretagName{\noexpand\textUC{Kanade}, Takeo}{Kanade Takeo} \PretagName[Jean de]{La Fontaine}{LaFontaine, Jean de} \PretagName[Manuel Antonio]{Las Heras}{LasHeras, Manuel} \PretagName[Pierre]{L'Enfant}{LEnfant, Pierre} \PretagName[Ada]{\noexpand\textIT{Lovelace}}{Lovelace, Ada} \PretagName[Martin]{\noexpand\textSC{Luther}}{Luther, Martin} \PretagName[Catherine \noexpand\AltCaps{d}e']{\noexpand\textSC{Medici}} {Medici, Catherine de} \PretagName{\noexpand\textSC{Misora}, Hibari}{Misora Hibari} \PretagName[Frenec]{Molnár}{Molnar, Frenec} \PretagName[Sandra Day]{O'Connor}{OConnor, Sandra} \PretagName{Ptolemy, IV}{Ptolemy 4} \PretagName{Ptolemy, V}{Ptolemy 5} \PretagName[J.D.]{Rockefeller, IV}{Rockefeller, John D 4} \PretagName[Heinrich Wilhelm]{\noexpand\textSC{R\"uhmann}} {Ruehmann, Heinrich Wilhelm} \PretagName[Heinz]{\noexpand\textSC{R\"uhmann}}{Ruehmann, Heinz} \PretagName[Lucius Annaeus]{Seneca\nri}{Seneca, Lucius Annaeus 1} \PretagName[Lucius Annaeus]{Seneca\nrii}{Seneca, Lucius Annaeus 2} \PretagName{Seleucus, III}{Seleucus 3} \PretagName[\noexpand\SCIPi]{\noexpand\SCIPii}{Scipio Africanus} \PretagName[Lucius]{\noexpand\CSB}{Cornelius Scipio Barbatus} \PretagName[\noexpand\WM]{\noexpand\SHK}{Shakespeare, William} \PretagName{\textit{Snellius}}{Snellius} \PretagName[John]{\noexpand\de{Strietelmeier}}{Strietelmeier, John} \PretagName[John]{\unexpanded{\noexpand\de{Strietelmeier}}} {Strietelmeier, John} \PretagName{Thomas, à~Kempis}{Thomas Akempis} \PretagName[Martin]{Van Buren}{VanBuren, Martin} \PretagName[Daisy]{Ver Boven}{VerBoven, Daisy} \PretagName{Vlad, {\c T}epe{\c s}}{Vlad Tepes} \PretagName[E.\,B.]{White}{White, Elwyn} \PretagName[Otto]{Zur Linde}{ZurLinde, Otto} \PretagName[Konrad]{\noexpand\textSC{Zuse}}{Zuse, Konrad} %^^A Add index tags for all names in the dtx file. \TagName{Æthelred, II}{, king|hyperpage} \TagName{Antiochus, III}{ the Great, king|hyperpage} \TagName{Antiochus, IV}{ Epiphanes, king|hyperpage} \TagName{Aristotle}{|hyperpage} \TagName{Attila, the Hun}{|hyperpage} \TagName[W.H.]{Auden}{|hyperpage} \TagName[Charles]{\noexpand\textBF{Babbage}}{|hyperpage} \TagName[Betsey]{Bailey}{|hyperpage} \TagName[Omar N.]{Bradley}{|hyperpage} \TagName[Leonard]{Bernstein}{|hyperpage} \TagName{Bernard, of Clairvaux}{|hyperpage} \TagName{Bo\"ethius}{|hyperpage} \TagName[Anic. Manl.]{Severinus Boethius}{|hyperpage} \TagName[Max]{Born}{|hyperpage} \TagName[Bernhard ten]{Brink}{|hyperpage} \TagName[Ferris]{Bueller}{ \S|hyperpage} \TagName[Robert]{\textSC{Burns}}{|hyperpage} \TagName[Julius]{Caesar}{, imperator|hyperpage} \TagName[Rudolph]{Carnap}{|hyperpage} \TagName[J.E.]{Carter, Jr.}{, pres.|hyperpage} \TagName[Marcus]{Porcius Cato the Elder}{|hyperpage} \TagName[Marcus Porcius]{Cato the Younger}{|hyperpage} \TagName[Charlie]{Chaplin}{|hyperpage} \TagName[Charles W.]{Chesnutt}{|hyperpage} \TagName[M.T.]{Cicero}{|hyperpage} \TagName{Chiang}[Kai-shek]{\ddag, pres.|hyperpage} \TagName[Schuyler]{Colfax}{, v.p.|hyperpage} \TagName{Confucius}{|hyperpage} \TagName{Cratylus}{|hyperpage} \TagName[e.e.]{cummings}{|hyperpage} \TagName{Dagobert}[I]{\ddag, king|hyperpage} \TagName[Sammy]{Davis,Jr.}{|hyperpage} \TagName[Giovanni]{d'Andrea}{|hyperpage} \TagName[Walter]{de la Mare}{|hyperpage} \TagName{Demetrius, I}{ Soter, king|hyperpage} \TagName[Jacques]{De~Pamele}{|hyperpage} \TagName[Pierre-Jean] {\noexpand\Fbox{\noexpand\AltCaps{d}e~Smet}}{|hyperpage} \TagName[Hernando]{de~Soto}{|hyperpage} \TagName[Marc van]{Dongen}{|hyperpage} \TagName[Frederick]{Douglass}{|hyperpage} \TagName[W.E.B.]{Du~Bois}{|hyperpage} \TagName[Charles]{du~Fresne}{|hyperpage} \TagName[S.J.]{Du Toit}{|hyperpage} \TagName[Albert]{Einstein}{|hyperpage} \TagName[Dwight D.]{Eisenhower}{, pres.|hyperpage} \TagName{Elizabeth, I}{, queen|hyperpage} \TagName[Leif]{Erikson}{|hyperpage} \TagName[Robin]{Fairbairns}{|hyperpage} \TagName{Faisal, bin Abdulaziz}{ Al Saud, king|hyperpage} \TagName[Francisco de]{Figueroa}{|hyperpage} \TagName[Cameron]{Frye}{ \S|hyperpage} \TagName{\noexpand\textUC{Fukuyama}}[Takeshi]{\ddag|hyperpage} \TagName[Greta]{\noexpand\textSC{Garbo}}{|hyperpage} \TagName{Ghazāli}{|hyperpage} \TagName{Ghazali}{|hyperpage} \TagName[\noexpand\TSemp]{Gracchus}{, consul|hyperpage} \TagName[J.W. von]{Goethe}{|hyperpage} \TagName[Ulysses S.]{Grant}{, pres.|hyperpage} \TagName[Enrico]{Gregorio}{|hyperpage} \TagName{Gregory, I}{ the Great, pope|hyperpage} \TagName[Oskar]{Hammerstein, II}{|hyperpage} \TagName[Adolf]{Harnack}{|hyperpage} \TagName[Lafcadio]{Hearn}{|hyperpage} \TagName{Hermogenes}{|hyperpage} \TagName{Henry}[VIII]{, king|hyperpage} \TagName[Herbert]{Hoover}{, pres.|hyperpage} \TagName[Bob]{Hope}{|hyperpage} \TagName[Hubert H.]{Humphrey}{, v.p.|hyperpage} \TagName[Thomas]{\noexpand\textSC{Jefferson}\noexpand\GEN{}} {, pres.|hyperpage} \TagName{Jesus, Christ}{|hyperpage} \TagName{John, Eriugena}{|hyperpage} \TagName[Mustafa]{Kemal}{|hyperpage} \TagName[John F.]{Kennedy}{, pres.|hyperpage} \TagName{Kim, Jong Un}{|hyperpage} \TagName[Martin Luther]{King, Jr.}{|hyperpage} \TagName[Jean de]{La Fontaine}{|hyperpage} \TagName{Lao-tzu}{|hyperpage} \TagName[Manuel Antonio]{Las Heras}{|hyperpage} \TagName[Pierre]{L'Enfant}{|hyperpage} \TagName[Clive Staples]{Lewis}{|hyperpage} \TagName[Abraham]{Lincoln}{, pres.|hyperpage} \TagName[Frenec]{Liszt}{\dag|hyperpage} \TagName[Titus]{Livius}{|hyperpage} \TagName{Llywelyn, ap Gruffudd}{, prince|hyperpage} \TagName{Louis, XIV}{, king|hyperpage} \TagName[Ada]{\noexpand\textIT{Lovelace}}{|hyperpage} \TagName[Uwe]{Lueck}{|hyperpage} \TagName[Dan]{Luecking}{|hyperpage} \TagName[Martin]{\noexpand\textSC{Luther}}{|hyperpage} \TagName{Maimonides}{|hyperpage} \TagName[Dean]{Martin}{|hyperpage} \TagName{\noexpand\textSC{Misora}, Hibari}{|hyperpage} \TagName[Nicolas]{Malebranche}{|hyperpage} \TagName[Catherine \noexpand\AltCaps{d}e']{\noexpand\textSC{Medici}} {|hyperpage} \TagName{\noexpand\textSC{Mencius}}{|hyperpage} \TagName{Miyazaki, Hayao}{|hyperpage} \TagName[L.M.]{Montgomery}{|hyperpage} \TagName[Frenec]{Molnár}{\dag|hyperpage} \TagName[Nancy C.]{Mulvany}{|hyperpage} \TagName{Nippon Gakki}{|hyperpage} \TagName[Hideyo]{Noguchi}{\dag|hyperpage} \TagName[Sandra Day]{O'Connor}{, justice|hyperpage} \TagName[Heiko]{Oberdiek}{|hyperpage} \TagName[M.S.]{Omartian}{|hyperpage} \TagName[George S.]{Patton, Jr.}{|hyperpage} \TagName[Lucius]{Sergius Paulus}{|hyperpage} \TagName{Plato}{|hyperpage} \TagName{Pontius, Pilate}{|hyperpage} \TagName{Ptolemy, IV}{ Philopator, king|hyperpage} \TagName{Ptolemy, V}{ Epiphanes, king|hyperpage} \TagName{Rambam}{|hyperpage} \TagName[Luke]{Ranieri}{|hyperpage} \TagName[the]{Rat Pack}{|hyperpage} \TagName[J.D.]{Rockefeller, IV}{|hyperpage} \TagName[Theodore]{Roosevelt}{, pres.|hyperpage} \TagName[Heinz]{\noexpand\textSC{R\"uhmann}}{|hyperpage} \TagName[Salman]{Rushdie}{|hyperpage} \TagName{Saul, of Tarsus}{|hyperpage} \TagName[Robert]{Schlicht}{|hyperpage} \TagName{Seleucus, III}{ Ceraunus, king|hyperpage} \TagName[Lucius Annaeus]{Seneca\nri}{ (the Elder)|hyperpage} \TagName[Lucius Annaeus]{Seneca\nrii}{ (the Younger)|hyperpage} \TagName[\noexpand\SCIPi]{\noexpand\SCIPii}{|hyperpage} \TagName[Lucius]{\noexpand\CSB}{, consul|hyperpage} \TagName[\noexpand\WM]{\noexpand\SHK}{|hyperpage} \TagName[Frank]{Sinatra}{|hyperpage} \TagName[R.]{Snel van Royen}{|hyperpage} \TagName[W.]{Snel van Royen}{|hyperpage} \TagName{Socrates}{|hyperpage} \TagName[Philipp]{Stephani}{|hyperpage} \TagName[John]{\noexpand\de{Strietelmeier}}{|hyperpage} \TagName{Sun, Yat-sen}{, pres.|hyperpage} \TagName{Thomas, à~Kempis}{|hyperpage} \TagName{Thomas, Aquinas}{|hyperpage} \TagName[Henry David]{Thoreau}{|hyperpage} \TagName{\noexpand\textUC{Kanade}, Takeo}{|hyperpage} \TagName[Mark]{Twain}{|hyperpage} \TagName[Mike]{Tyson}{|hyperpage} \TagName[Bob]{Uecker}{|hyperpage} \TagName[Harold]{Urey}{|hyperpage} \TagName[Martin]{Van Buren}{, pres.|hyperpage} \TagName[Publius]{Vegetius Renatus}{|hyperpage} \TagName[Daisy]{Ver Boven}{|hyperpage} \TagName[Jesse]{Ventura}{|hyperpage} \TagName{Vlad, II}{ Dracul|hyperpage} \TagName{Vlad, III}{ Dracula|hyperpage} \TagName{Voltaire}{|hyperpage} \TagName[George]{Washington}{, pres.|hyperpage} \TagName[Alan]{Watts}{|hyperpage} \TagName[Marcus]{Welby,M.D.}{ \S|hyperpage} \TagName[E.\,B.]{White}{|hyperpage} \TagName{William, I}{, king |hyperpage} \TagName{William, the Conqueror}{|hyperpage} \TagName[John]{Wyche}{|hyperpage} \TagName{Yamaha, Torakusu}{|hyperpage} \TagName{Yamaha Corp.}{|hyperpage} \TagName{Yamamoto, Isoroku}{|hyperpage} \TagName{Yoshida}[Shigeru]{\ddag, PM|hyperpage} \TagName[Caspar]{Ziegler}{|hyperpage} \TagName[Otto]{Zur Linde}{|hyperpage} \TagName[Konrad]{\noexpand\textSC{Zuse}}{|hyperpage} \begin{document} \DocInput{\jobname.dtx} \end{document} %^^A %%%%%%%%%%%%%%%%%%%%%%% End of Preamble %%%%%%%%%%%%%%%%%%%%%%%%%% % % \fi %^^A %%%%%%%%%%%%%%%%%%%%%%% Start of Document %%%%%%%%%%%%%%%%%%%%%%%%%% % %^^A @@@@@ Error Correction @@@@@ % % \CheckSum{3779} % % \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{0.7}{2011/12/26}{Initial release} % \changes{1.0}{2012/02/20} % {Works with \textsf{microtype}, \textsf{memoir}} % \changes{2.3}{2016/01/05}{New back-end for naming macros} % \changes{2.5}{2016/04/06}{No default format} % \changes{3.5}{2020/11/23}{Update and merge most included files into \texttt{dtx} file} % \changes{3.7}{2023/02/03}{Major updates to all files} % \changes{4.0}{2024/02/09}{Update included files} % \changes{4.1}{2025/02/04}{Update included files} % % %^^A @@@@@ Administrative Setup @@@@@ % % \GetFileInfo{\jobname.dtx} % % \DoNotIndex{\@empty, \@gobble, \@period, % \@token, \trim@spaces, \zap@space} % % \DoNotIndex{\begingroup, \bfseries, \bgroup, % \csdef, \csgdef, \csname, \csundef, % \DeclareOption, \def, \detokenize, \edef, % \egroup, \else, \endcsname, \endgroup, \endinput, % \ExecuteOptions, \expandafter, \fi, \futurelet, % \global, \hbox, \if, \ifcsname, \ifx, \ignorespaces, % \ignorespacesafterend, \index, \itshape, \leavevmode, % \let, \newcommand, \NewDocumentCommand, \newenvironment, % \newif, \nobreakspace, \PackageError, \PackageWarning, % \ProcessOptions, \relax, \renewcommand, % \RequirePackage, \scshape, \textbackslash, \uppercase} % % %^^A @@@@@ Items Defined Here, or Stuff Doesn't Work @@@@@ % %^^A ----- Lengths ----- % % \newlength{\nameboxi} % \newlength{\nameboxii} % \newlength{\nameboxiii} % % %^^A ----- Conditionals ----- % %^^A Global definitions of conditionals used for examples %^^A must be included here because \newif statements cannot %^^A occur within an \iffalse ... \fi pair (driver section). % %^^A For George Washington/Mustafa Kemal % \newif\ifNoTag % %^^A For Thomas Jefferson % \newif\ifGenitive % \newif\ifDoGenitive % %^^A For the Cornelii Scipiones and Gracchi % \newif\ifNoPraenomen % \newif\ifNoGens % \newif\ifNoCognomen % \newif\ifNoAgnomen % \newif\ifXPrae % \newif\ifXGens % \newif\ifXCogn % \newif\ifXAgno % %^^A For Babbage and company % \newif\ifHeadword % \newif\ifAncientName % %^^A For William Shakespeare % \newif\ifSpecialFN % \newif\ifSpecialSN % \newif\ifRevertSN % % %^^A ----- Macros in Names ----- % %^^A For Thomas Jefferson % \newcommand*\GEN{\ifDoGenitive\textSC{'s}\fi} % %^^A For Scipio Africanus % \newcommand*\SCIPi % {^^A % \ifXGens Publius\else % \ifXPrae Cornelius\else % Publius Cornelius^^A % \fi % \fi % } % % \newcommand*\SCIPii % {\ifXAgno Scipio\else Scipio Africanus\fi} % %^^A For Gracchus % \newcommand*\TSemp % {^^A % \ifXGens Tiberius\else % \ifXPrae Sempronius\else % Tiberius Sempronius^^A % \fi % \fi % } % %^^A For Scipio Barbatus % \newcommand*\CSB % {^^A % \ifXGens % \ifXAgno Scipio\else Scipio Barbatus\fi % \else % \ifXCogn Cornelius\else % \ifXAgno Cornelius Scipio\else % Cornelius Scipio Barbatus^^A % \fi % \fi\noindent % \fi % } % %^^A For William Shakespeare % \newcommand*\WM % {\ifSpecialFN Wm.\else William\fi} % % \newcommand*\SHK % {^^A % \ifRevertSN % \textSC{Shakespeare}\else % \ifSpecialSN % \noexpand\AltCaps{t}he Bard\else % \textSC{Shakespeare}^^A % \fi % \fi % } % % \newcommand*\Revert{\RevertSNtrue} % % %^^A ----- Name Format Standards ----- % %^^A Redefine and save name formatting for this manual. % \begin{VerbatimOut}{manhook.tmp} % \renewcommand*\FrontNamesFormat{\color{violet}\sffamily} % \renewcommand*\FrontNameHook{\color{darkgray}\sffamily} % \renewcommand*\NamesFormat{\color{blue}\sffamily} % \renewcommand*\MainNameHook{\sffamily} % \end{VerbatimOut} % % \begin{VerbatimOut}{nullhook.tmp} % \renewcommand*\FrontNamesFormat{} % \renewcommand*\FrontNameHook{} % \renewcommand*\NamesFormat{} % \renewcommand*\MainNameHook{} % \end{VerbatimOut} % % \input{manhook.tmp} % %^^A @@@@@ Title Page @@@@@ % % \title{\textsf{nameauth} --- Name authority mechanism\\ % for consistency in text and index^^A % \thanks{This file describes version \fileversion, last revised \filedate.}} % \author{Charles P. Schaum\thanks{Email: charles[dot]schaum@comcast.net}} % \date{Released \filedate} % % \maketitle % % \begin{abstract} % \noindent The \textsf{nameauth} package automates the correct formatting and indexing of names for professional writing. This aids the use of a \emph{name authority} and the editing process without needing to retype name instances. % \end{abstract} % % %^^A @@@@@ Table of Contents @@@@@ % % \begingroup % \small % \hypertarget{TOC}{}^^A % \tableofcontents % \endgroup % % %^^A ----- Paragraph Skip ----- %^^A Changed from initial 0pt plus 1pt % \setlength{\parskip}{2.5pt plus 0.5pt minus 0.5pt} % % \subsection*{Disclaimer} % % This manual mentions names of historical figures both living and deceased. We intend to use all names herein with respect, for teaching purposes only, and never to express or imply any disrespect or bias. % % \subsection*{Fair Use} % % Works quoted herein either are in the public domain or they are under copyright, but cited under the terms of fair use. The transformative purpose is to show the evocative power of words and names. % % \subsection*{Thanks} % % For assistance at various times, thanks to \Name[Marc van]{Dongen}, \Name[Enrico]{Gregorio}, \Name[Philipp]{Stephani}, \Name[Heiko]{Oberdiek}, \Name[Uwe]{Lueck}, \Name[Dan]{Luecking}, \Name[Robert]{Schlicht}, and others.\\[1ex] % \hbox{}\hfil \LA{In memoriam} \Name[Robin]{Fairbairns}\\[1ex] % He was very kind when I first uploaded \textsf{nameauth}, and gracious thereafter as well. % % \begin{Quotation}{\Wash} % {Farewell Address (1796)} % I have already intimated to you the danger of parties in the State, with particular reference to the founding of them on geographical discriminations. Let me now take a more comprehensive view, and warn you in the most solemn manner against the baneful effects of the spirit of party generally. % % This spirit, unfortunately, is inseparable from our nature, having its root in the strongest passions of the human mind. It exists under different shapes in all governments, more or less stifled, controlled, or repressed; but, in those of the popular form, it is seen in its greatest rankness, and is truly their worst enemy. % % \textls[5]{The alternate domination of one faction over another, sharpened by the spirit of revenge, natural to party dissension, which in different ages and countries has perpetrated the most horrid enormities, is itself a frightful despotism. But this leads at length to a more formal and permanent despotism. The disorders and miseries which result gradually incline the minds of men to seek security and repose in the absolute power of an individual; and sooner or later the chief of some prevailing faction, more able or more fortunate than his competitors, turns this disposition to the purposes of his own elevation, on the ruins of public liberty.} % \index{politicians, quotes of\noexpand\string|hyperpage} % \end{Quotation} % % \newpage % %^^A %%%%%%%%%%%%%%%%% Start of Documentation Proper %%%%%%%%%%%%%%%%%%%%% % % \section{Quick Start} % \label{sec:QuickStart} % % A \emph{name authority} (Section~\ref{sec:NameAuthority}) is a canonical list of names to which variant names refer. Books can have hundreds of names and index entries. The \textsf{nameauth} package assists academic and business writing: % \begin{itemize} % \item Automate the syntax and formatting of names. % % \item Manage and display information that is associated with names. % % \item Make decisions relating to names. % % \item Sort name index entries properly. % % \item Automatically add information to index entries. % % \item Ensure correct indexing of names that span page breaks. % % \item Change name forms in the text while retaining consistent index entries. % % \item Use culturally appropriate name forms in the text and index. % % \item Do not force users to use any particular naming convention. % % \item Permit European academic conventions (``Continental'' formatting). % \end{itemize} % % Indexing rules are based on \Name[Nancy C.]{Mulvany}, \Title{Indexing Books} (Chicago: University of Chicago Press, 1994). All references [\hypertarget{Mulvany}{Mulvany}] refer to this edition.\footnote{Compare \Title{The Chicago Manual of Style} (15\textsuperscript{th} ed., Chicago: Chicago UP, 2003, 309f., 755f.) or newer editions. All references [\hypertarget{Chicago}{Chicago}] refer to this edition.} % % \subsection{Simple Example} % % \input{nullhook.tmp} % % Using the default \textsf{nameauth} options and formatting hooks (not the general formatting used in this manual; cf. Section~\ref{sec:Formatting}), we show how names change automatically when we reorder statements by African-American author \Name[Charles W.]{Chesnutt}[Charles Waddell].\footnote{\Name[Charles W.]{Chesnutt}, \Title{Frederick Douglass} (Boston: Small, Maynard, 1899). See also \href{https://docsouth.unc.edu/neh/chesnutt/summary.html} {\bfseries this web page}.} % % The \texttt{nameauth} environment (Section~\ref{sec:QuickUIStart}) resembles a \texttt{tabular} with four columns. In column one we define name shorthands. Columns two and three hold the names. We leave column four empty. \cmd{\ForgetName} (Section~\ref{sec:NameControl}) used before Group~2 lets us ``start over'' with the names by forgetting their patterns. %^^A % \ifdefined\NameauthDoTestFiles \edef\NameauthTestFile{test01_01.tex}\else % \edef\NameauthTestFile{\jobname.tmp}\fi %^^A % \begin{VerbatimOut}{\NameauthTestFile} % \documentclass{article} % \input{compat.tex} % Included with nameauth; example file aids % % compatibility across different LaTeX versions and engines. % \usepackage{makeidx} % \usepackage{nameauth} % \makeindex % % \begin{nameauth} % % Col. 1 Col. 2 Col. 3 Col. 4 % \< Doug & Frederick & Douglass & > % \< Bailey & Betsey & Bailey & > % \end{nameauth} % % \begin{document} % % \textbf{Group 1} % \begin{enumerate} % \item[\textbf{1.}] \Doug\ rose to eminence by sheer force % of character and talents that neither slavery nor caste % proscription could crush. % \item[\textbf{2.}] \Doug's early life is perhaps the most % complete indictment of the slave system ever presented at % the bar of public opinion. % \item[\textbf{3.}] \Doug\ was born in February, 1817. His % earliest memories centered around the cabin of his % grandmother, \Bailey. % \end{enumerate} % % \textbf{Group 2} (Statement order changed.) % \ForgetName[Frederick]{Douglass} % \ForgetName[Betsey]{Bailey} % \begin{enumerate} % \item[\textbf{2.}] \Doug's early life is perhaps the most % complete indictment of the slave system ever presented at % the bar of public opinion. % \item[\textbf{3.}] \Doug\ was born in February, 1817. His % earliest memories centered around the cabin of his % grandmother, \Bailey. % \item[\textbf{1.}] \Doug\ rose to eminence by sheer force % of character and talents that neither slavery nor caste % proscription could crush. % \end{enumerate} % % \printindex % \end{document} % \end{VerbatimOut} %^^A % \begin{Quote} % \VerbatimInput[gobble=0,lastline=15]{\NameauthTestFile} % % \newpage % % \VerbatimInput[gobble=0,firstline=16]{\NameauthTestFile} % % \textbf{Group 1} % \begin{enumerate} % \item[\textbf{1.}] \Doug\ rose to eminence by sheer force % of character and talents that neither slavery nor caste % proscription could crush. % \item[\textbf{2.}] \Doug's early life is perhaps the most % complete indictment of the slave system ever presented at % the bar of public opinion. % \item[\textbf{3.}] \Doug\ was born in February, 1817. His % earliest memories centered around the cabin of his % grandmother, \Bailey. % \end{enumerate} % % \textbf{Group 2} (Statement order changed.) % \ForgetName[Frederick]{Douglass} % \ForgetName[Betsey]{Bailey} % \begin{enumerate} % \item[\textbf{2.}] \Doug's early life is perhaps the most % complete indictment of the slave system ever presented at % the bar of public opinion. % \item[\textbf{3.}] \Doug\ was born in February, 1817. His % earliest memories centered around the cabin of his % grandmother, \Bailey. % \item[\textbf{1.}] \Doug\ rose to eminence by sheer force % of character and talents that neither slavery nor caste % proscription could crush. % \end{enumerate} % \end{Quote} % % The goal of this example is to suggest that, if one has a project typeset using \LaTeX, it takes a lot of time and attention to ensure the proper appearance of names. If a unit of text gets moved somewhere else, the knock-on effect could involve re-examining many names to see if their forms are acceptable. Our mission is to automate the editing process to a degree and let names take care of themselves. % % \newpage % % \subsection{How To Use the Manual} % % \input{manhook.tmp} % % This manual tries to support various learning styles by using layout, colors, shapes, and similar ordering of both document sections and package code. % % \subsubsection*{\hfil Macro Argument Types} % % \negbigskip % \begin{multicols}{2} % \tcbox{\bfseries Mandatory args in black} % % \tcbox[colback=white]{\color{nared}\bfseries Optional args in dark red} % \end{multicols} % % \subsubsection*{\hfil Scope and Sequence} % % The table of contents goes from simpler, frequently-used features to more complex, infrequent ones. The end of each major section has a return link to the \hyperlink{TOC}{TOC}. Thus, as the section numbers increase in the lists below, so does the complexity. % \begin{center} % \begin{tabular}{ll} % General concepts: & % \ref{sec:QuickStart}, \ref{sec:Indexing}, \ref{sec:DataTags}, % \ref{sec:FormatChoice}, \ref{sec:NameAuthority}\\ % Multilingual: & % \ref{sec:Lang}, \ref{sec:AdvancedFormat}\\ % Details and debugging: & % \ref{sec:PkgOptions}, \ref{sec:Priorities}, % \ref{sec:NamePedantic}, \ref{sec:Debugging}, % \ref{sec:OldStuff}\\ % \end{tabular} % \end{center} % % \subsubsection*{\hfil Key Concepts} % % Starting in Section~\ref{sec:BasicStart}, \emph{name patterns} appear in the margin (overview in Section~\ref{sec:NamePatterns}), which are key to how names work in \textsf{nameauth}. Through Section~\ref{sec:RomanScholari} \emph{basic index entries} appear in the margin to show how macro arguments and index entries relate. Thereafter, we use margin notes less due to greater complexity. % % \subsubsection*{\hfil Special Signs and Typography} % % \begin{itemize} % \item[\ \ ]We highlight {\NamesFormat{First Uses}} and {\MainNameHook{Later Uses}} of names (Sections~\ref{sec:Formatting}--\ref{sec:NameControl}). % \end{itemize} % % \begin{InfoBox} % \VerbatimInput[gobble=0,numbers=none,fontsize=\small]{manhook.tmp} % \end{InfoBox} % % \begin{itemize} % \item[\dag\ ]A dagger indicates reversed Western forms (Sections~\ref{sec:RevNames}). % % \item[\ddag\ ]A double dagger shows usage of the obsolete syntax (Section~\ref{sec:Obsolete}). % % \item[\S\ ]A section mark denotes index entries of fictional names. % % \item[\dbend]The ``dangerous bend'' shows where extra caution is needed. % \end{itemize} % % \begin{Quotation}{\Doug} % {speech at Rochester, NY, 1852)} % You profess to believe that ``of one blood God made all nations of men to dwell on the face of the earth''\,---\,and hath commanded all men, everywhere, to love one another\,---\,yet you notoriously hate (and glory in your hatred!) all men whose skins are not colored like your own. % \index{civil rights leaders, quotes of\noexpand\string|hyperpage} % \end{Quotation} % % \newpage % % \subsubsection*{\hfil General Advice} % % \begin{itemize} % \item See \texttt{README.md} for details about package development and testing. % % \item Both \texttt{compat.tex} and \texttt{examples.tex} contain useful information. They are located with this manual. % % \item Do not put naming macros withing a macro defined with \cmd{\edef}. % % \item Naming macros can be arguments of a macro defined with \cmd{\edef}. % % \item In \texttt{dtx} files, it can be simpler to put the \texttt{nameauth} environment and initial tagging macros in the \texttt{} part. Yet \cmd{\newif} statements must occur in the ``commented part''. % \end{itemize} % % We summarize some issues related to backward compatibility, which \textsf{nameauth} takes quite seriously as a partner to those who want to preserve their publications. % \begin{itemize} % \item Starting with version 4.0, \textsf{nameauth} has used \textsf{xparse} for starred macros and name arguments, which offers many benefits. % % \item Users of \TeX\ distribution before 2018 might encounter unexpected or undefined behavior. To mitigate them, see Sections~\ref{sec:FinalOptargs}, \ref{sec:Unicode}f., \ref{sec:CompatON}, and~\ref{sec:FullCustomize}. See also \texttt{compat.tex}. % % \item Older customizations using \textsf{xargs} may still work with the \texttt{oldargs} option. See Section~\ref{sec:OptionCompat} and \texttt{examples.tex}. It includes additional code snippets that deal with compatibility. If one should require \textsf{nameauth} version 3.7, see section 7 of \texttt{README.md}. % \item To use older \TeX\ distributions (2018 and before), one must include the \textsf{textcomp} package for backward compatibility. % % \item If users need to preserve older \TeX\ distributions in order to maintain publications for reprint, they are encouraged to view and modify \texttt{compat.tex}, then \cmd{\input} it into the preambles of their projects. % \end{itemize} % % \begin{Quotation}{\Name{Aristotle}} % {\Title{Politics} (post-338 \textsc{bc})} % Man is by nature a social animal; an individual who is unsocial % naturally and not accidentally is either beneath our notice or more % than human. Society is something that precedes the individual. Anyone % who either cannot lead the common life or is so self-sufficient as not % to need to, and therefore does not partake of society, is either a % beast or a god. % \index{philosophers, quotes of\noexpand\string|hyperpage} % \end{Quotation} % % \newpage % % \subsection{Basic Concepts} % % \subsubsection{Name Ambiguity} % % \subsubsection*{\hfil Culture resolves ambiguity.} % % Western culture often includes forenames followed by a surname and an optional affix. Exceptions can include patronyms like \Name[Leif]{Erikson} and \Name{Llywelyn, ap Gruffudd}, as well as ancient and royal names.\footnote{Indexed here under \Name[Leif]{Erikson} and \Name{Llywelyn, ap Gruffudd}. See \href{https://www.theindexer.org/wp-content/uploads/2020/07/welsh-personal-names.pdf} {\bfseries this document} on Welsh names.} % Due to the conventions taught to them, Western readers might misinterpret the following names: % % \begin{Block} % \begin{tabular}{llll} % Forenames: & % \ForceName\SubvertThis\FName[M.T.]{Cicero}[Marcus Tullius] & % Surname: & % \ForceName\Name[M.T.]{Cicero}\\[0.5ex] % % Forename: & % \ForceName\SubvertThis\Name{Pontius, Pilate} & % Surname: & % \ForceName\ForceFN\FName{Pontius, Pilate}\\[0.5ex] % % Forename: & % \ForceName\SubvertThis\Name{Jesus, Christ} & % Surname: & % \ForceName\ForceFN\FName{Jesus, Christ} % \end{tabular} % \end{Block} % % Yet these names have meanings that cannot be known \emph{as signs in themselves} apart from their native cultural setting. That reveals the following information: % % \begin{Block} % \begin{tabular}{cllll} % \LA{Praenomen}: % \SubvertThis\FName[M.T.]{Cicero}[Marcus] & % \LA{Nomen}: & % % \SubvertThis\FName[M.T.]{Cicero}[Tullius] & % \LA{Cognomen}: & % \Name[M.T.]{Cicero}\\[0.5ex] % % \meta{empty} & % \LA{Nomen}: & % \SubvertThis\Name{Pontius, Pilate} & % \LA{Cognomen}: & % \ForceFN\FName{Pontius, Pilate}[Pilatus]\\[0.5ex] % % \hfil \meta{empty} & % Name: & % \SubvertThis\Name{Jesus, Christ} & % Sobriquet: & % \ForceFN\FName{Jesus, Christ} % \end{tabular} % \end{Block} % % Roman names have a forename, a clan name, and one or more names that can denote branch families, nicknames, etc. Forenames (\LA{praenomina}) do not carry great weight; the clan name (\LA{nomen}) is of most importance. The clan name of \Name[M.T.]{Cicero} actually is \FName[M.T.]{Cicero}[Tullius]. In English, he used to be known as \IndexRef{Tully}{Cicero, M.T.}\Name{Tully}. \Name*{Pontius, Pilate} has no forename. \Name{Pontius, Pilate} is a clan name. The ``nickname'' (\LA{cognomen}) \ForceFN\FName{Pontius, Pilate}[Pilatus] refers to skill with the \LA{pilum}, a barbed spear. The name \Name*{Jesus, Christ} comes from \el{Ἰησοῦς ὁ\nbsp Χριστός}, from Hebrew \textit{Y'shua ha-Mashiach}, ``Joshua the Anointed One''. % % \subsubsection*{\hfil \textbf{We embrace ambiguity.}} % % \IndexRef{Pilate}{Pontius Pilate} % The market determines usage, whether general or scholarly (Section~\ref{sec:Romani}).\footnote{For an example of a resource that tries to span both the popular and the scholarly, see John Bartlett, \Title{Bartlett's Familiar Quotations}, 16\textsuperscript{th} ed., ed. Justin Kaplan (Boston: Little, Brown, 1991).} % Here we represent \Name[M.T.]{Cicero} as a Western name and both \ForceFN\FName{Pontius, Pilate} and \ForceFN\FName{Jesus, Christ} as Non-Western names. \Name[M.T.]{Cicero} is indexed by his \LA{cognomen}; \ForceFN\FName{Pontius, Pilate} by his \LA{nomen}.\footnote{\cmd{\IndexRef\{Pilate\}\{Pontius Pilate\}} makes ``Pilate \dots\ \textit{see} Pontius Pilate'', a cross-reference that guides Western readers from the expected index entry to the entry used here (Section~\ref{sec:IndexRef}).} % \begin{itemize} % \item Western Index Entry:\smallskip % % \begingroup\small % \begin{tabular}{p{2.2cm}p{4.2cm}p{2.5cm}}\toprule % \rowcolor{nagrey}\bfseries Text & % \bfseries Macro / Arguments & \bfseries Index\\ % \Name*[M.T.]{Cicero} & \cmd{\Name[M.T.]\{Cicero\}} & % \ShowIdxPageref*{}\\\bottomrule % \end{tabular} % \endgroup\medskip % % \item Non-Western Index Entries:\smallskip % % \begingroup\small % \begin{tabular}{p{2.2cm}p{4.2cm}p{2.5cm}}\toprule % \rowcolor{nagrey}\bfseries Text & % \bfseries Macro / Arguments & \bfseries Index\\ % \Name*{Pontius, Pilate} & % \cmd{\Name\{Pontius, Pilate\}} & % \ShowIdxPageref*{}\\ % \rowcolor{nagrey}\Name*{Jesus, Christ} & % \cmd{\Name\{Jesus, Christ\}} & % \ShowIdxPageref*{}\\\bottomrule % \end{tabular} % \endgroup % \end{itemize} % % \newpage % % Name forms in the text can be changed independently of their index entries. This is necessary for cases like Hungarian names, Roman names, or when a publisher wants to use Western index entry forms with Eastern names. % % For example, the Hungarian name \RevName\Name[Frenec]{Liszt}\dag\ has the index entry ``\ShowIdxPageref*{}''. We used the macro arguments for Western names to get the correct index entry, but we reversed the name in the text via |\RevName\Name[Frenec]{Liszt}|. \IndexRef[Franz]{Liszt}{Liszt, Frenec}\Name[Franz]{Liszt} is his equivalent German name, cross-referenced to the Hungarian form. % % \subsubsection*{\hfil \textbf{Name arguments determine index entries.}} % % The way that one encodes names using macro arguments primarily determines the form of the index entry\,—\,not the mutable form in the text. This is the key reason to use \textsf{nameauth} over manual methods. We do not index the names below, but we show how the index entries would appear: % \IndexInactive % \begin{itemize} % \item Western Index Entries:\smallskip % % \begingroup\small % \begin{tabular}{p{2.2cm}p{5.6cm}p{2.7cm}}\toprule % \rowcolor{nagrey}\bfseries Text & % \bfseries Macro / Arguments & \bfseries Index\\ % \Name[First]{Last, Affix} & |\Name[First]{Last, Affix}| & % \ShowIdxPageref*[First]{Last, Affix}\\ % \Name[First]{Last, Affix} & |\Name[First]{Last, Affix}| & % \ShowIdxPageref*[First]{Last, Affix}\\ % \Name[First]{Last} & |\Name[First]{Last}| & % \ShowIdxPageref*[First]{Last}\\ % \Name[First]{Last} & |\Name[First]{Last}| & % \ShowIdxPageref*[First]{Last}\\ % \RevName\Name*[First]{Last} & |\RevName\Name*[First]{Last}| & % \ShowIdxPageref*[First]{Last}\\\bottomrule % \end{tabular} % \endgroup\medskip % % \item Non-Western Index Entries:\smallskip % % \begingroup\small % \begin{tabular}{p{2.2cm}p{5.6cm}p{2.7cm}}\toprule % \rowcolor{nagrey}\bfseries Text & % \bfseries Macro / Arguments & \bfseries Index\\ % \Name{Family, Person} & |\Name{Family, Person}| & % \ShowIdxPageref*{Family, Person}\\ % \Name{Family, Person} & |\Name{Family, Person}| & % \ShowIdxPageref*{Family, Person}\\ % \RevName\Name*{Family, Person} & % |\RevName\Name*{Family, Person}| & % \ShowIdxPageref*{Family, Person}\\ % \Name{Person, Affix} & |\Name{Person, Affix}| & % \ShowIdxPageref*{Person, Affix}\\ % \Name{Person, Affix} & |\Name{Person, Affix}| & % \ShowIdxPageref*{Person, Affix}\\ % \Name{Person} & |\Name{Person}| & % \ShowIdxPageref*{Person}\\\bottomrule % \end{tabular} % \endgroup % \end{itemize} % \IndexActive % % \subsubsection*{\hfil \textbf{Name complexity creates \textsf{nameauth} complexity.}} % % We might take names for granted until we have to consider them, use them in multicultural contexts, index them, and so on. Even if one does not use the \textsf{nameauth} package, one cannot escape this complexity. % % The process of making \textsf{nameauth} became the means by which the present author learned about both the many intricate and fascinating complexities of names and the complexities of \LaTeX. One hopes that this package might facilitate accurate and respectful cross-cultural use of names in quality publications. % % \begin{Quotation}{\Name[Harold]{Urey} (1961)}{} % The space program is not only scientific in purpose but also is % an expression of man's insistent determination to do the nearly % impossible\,---\,to explore the unknown, even at great risk. % \index{scientists, quotes of\noexpand\string|hyperpage} % \end{Quotation} % % \newpage % % \subsubsection{Name Arguments} % \label{sec:NameArgs} % % \begingroup\small % \setbox0\hbox{Family / clan name\ } % \global\setlength{\nameboxi}{\wd0} % \setbox0\hbox{nomen / cognomen\ } % \global\setlength{\nameboxii}{\wd0} % \setbox0\hbox{notable attribute\ } % \global\setlength{\nameboxiii}{\wd0} % \endgroup % % We describe the general form of names according to the current \textsf{nameauth} syntax.\footnote{Adopted from [\hyperlink{Mulvany}{Mulvany}, 152--82] and [\hyperlink{Chicago}{Chicago}].} % Mandatory and optional \emph{macro arguments} aid a natural-language approach. They are subordinate to \emph{required and optional name elements}, shown by black and red text. Issues with final optional arguments are covered in Section~\ref{sec:FinalOptargs}. % % \newcommand*\WestSyntax{Western Names: \cmd{\Name}\oarg{FNN}^^A % \marg{SNN{\color{nared}\textbf{,}Affix}}^^A % \oarg{{\color{nared}Alternate}}} % \newcommand*\EastSyntax{``Native'' Eastern Names: % \cmd{\Name}\marg{SNN\textbf{,}Affix}^^A % \oarg{{\color{nared}Alternate}}} % \newcommand*\AncientSyntax{Ancient / Royal Names: % \cmd{\Name}\marg{SNN{\color{nared}\textbf{,}Affix}}^^A % \oarg{{\color{nared}Alternate}}} % % \subsubsection*{\hfil \protect\WestSyntax} % \begin{tcolorbox}[colframe=gray] % \centering\small^^A %^^A % \tcbox[equal height group=A,on line,tikznode,colback=white, % adjusted title={\centering\bfseries\sffamily Forename(s):\meta{FNN}}] % {\hbox to \nameboxi {\hfil Personal name(s):\hfil}\\ % \textit{baptismal name}\\ % \textit{Christian name}\\ % \textit{multiple names}\\ % (\LA{prae})\LA{nomen}\footnotemark}\hfill^^A %^^A % \tcbox[equal height group=A,on line,tikznode,colback=white, % adjusted title={\centering\bfseries\sffamily % Surname(s):\meta{SNN}}] % {\hbox to \nameboxii {\hfil Family name:\hfil}\\ % \textit{of father, mother}\\ % \textit{ancestor, vocation}\\ % \textit{origin, region}\\ % \LA{nomen\,/\,cognomen}\\ % \textit{patronym}}\hfill^^A %^^A % \tcbox[equal height group=A,on line,tikznode,colback=white,colframe=nared, % adjusted title={\centering\bfseries\sffamily % Qualifier:\meta{Affix}}] % {\hbox to \nameboxiii {\hfil Sobriquet\,/\,title:\hfil}\\ % \textit{Sr., Jr., III\dots}\\ % \textit{notable attribute}\\ % \textit{origin, region}\\ % \LA{agnomen}} % % \begin{tcolorbox}[colback=white,colframe=nared, % adjusted title={\centering\bfseries\sffamily % Alias:\meta{Alternate}}] % \centering Replaces \meta{FNN} only in the text, not in the index. % \end{tcolorbox} % % \end{tcolorbox} % \footnotetext{There are several ways of handling the Roman \LA{tria % nomina}. See Section~\ref{sec:Romani}.} % % \subsubsection*{\hfil \protect\EastSyntax} % % \begin{tcolorbox}[colframe=gray] % \centering\small^^A %^^A % \tcbox[equal height group=B,on line,tikznode,colback=white, % adjusted title={\centering\bfseries\sffamily % Family:\meta{SNN}}] % {\hbox to \nameboxi {\hfil Family\,/\,clan name\hfil}}\hfill^^A %^^A % \tcbox[equal height group=B,on line,tikznode,colback=white, % adjusted title={\centering\bfseries\sffamily % Personal:\meta{Affix}}] % {\hbox to \nameboxii {\hfil Usually one name\hfil}}\hfill^^A %^^A % \tcbox[equal height group=B,on line,tikznode,colback=white,colframe=nared, % adjusted title={\centering\bfseries\sffamily % Alias:\meta{Alternate}}] % {\hbox to \nameboxiii {\hfil Replaces \meta{Affix}\hfil}\\ % only in text.\footnotemark} % \end{tcolorbox} % \footnotetext{The obsolete syntax uses \meta{Alternate} instead of % \meta{Affix} for a personal name (Section~\ref{sec:Obsolete}).} % % \subsubsection*{\hfil \protect\AncientSyntax} % % \begin{tcolorbox}[colframe=gray] % \centering\small^^A %^^A % \tcbox[equal height group=C,on line,tikznode,colback=white, % adjusted title={\centering\bfseries\sffamily % Personal:\meta{SNN}}] % {\hbox to \nameboxi {\hfil Given name(s)\hfil}\\ % \phantom{Family\,/\,clan name}}\hfill^^A %^^A % \tcbox[equal height group=C,on line,tikznode,colback=white,colframe=nared, % adjusted title={\centering\bfseries\sffamily % Qualifier:\meta{Affix}}] % {\hbox to \nameboxii {\hfil Sobriquet\,/\,title:\hfil}\\ % \textit{Sr., Jr., III\dots}\\ % \textit{notable attribute}\\ % \textit{origin, region}\\ % \textit{patronym}}\hfill^^A %^^A % \tcbox[equal height group=C,on line,tikznode,colback=white,colframe=nared, % adjusted title={\centering\bfseries\sffamily % Alias:\meta{Alternate}}] % {\hbox to \nameboxiii {\hfil Replaces \meta{Affix}\hfil}\\ % only in text.\footnotemark} % \end{tcolorbox} % \footnotetext{The obsolete syntax uses \meta{Alternate} instead of % \meta{Affix} for a qualifier (Section~\ref{sec:Obsolete}).} % % \newpage % % \subsection{Basic Interface} % \label{sec:BasicStart} % % The description of macro arguments in this section applies to all \textsf{nameauth} macros that take name arguments (Sections~\ref{sec:NameArgs}, \ref{sec:NameArgMacros}, and~\ref{sec:FinalOptargs}), making this section critical to using and mastering \textsf{nameauth}. Here are some general tips: % \begin{itemize} % \item If the required argument \meta{SNN} is empty, \textsf{nameauth} issues a package error, even when the \meta{Affix} part of an \meta{SNN}\textbf{,}\meta{Affix} pair is not empty. Macros that take null arguments (Section~\ref{sec:NullArgs}) are the exception. % % \item Extra spaces around each argument are stripped. % % \item Include name arguments consistently to have consistent index entries. % \end{itemize} % % \subsubsection{Western Names} % % \begin{tcolorbox}[colframe=gray]\centering % \begin{tabular}{l@{ }c@{ }c@{ }c} % & Required & Required \meta{SNN} & Optional\\ % & \meta{FNN} & optional \meta{Affix} & (text only)\\[1ex] % \tcbox[equal height group=D,colback=white,tikznode, % left=1mm,right=1mm,valign=center] % {\normalsize\bfseries \hbox{\cmd{\Name}\texttt{ }}\\ % \cmd{\Name*}\\ % \cmd{\FName}} & % \tcbox[equal height group=D,colback=white,tikznode, % left=1mm,right=1mm,valign=center] % {\normalsize\bfseries\oarg{FNN}} & % \tcbox[equal height group=D,colback=white,tikznode, % left=1mm,right=1mm,valign=center] % {\normalsize\bfseries\marg{SNN\color{nared}\textbf{,}Affix}} & % \tcbox[equal height group=D,colback=white,tikznode, % left=1mm,right=1mm,valign=center] % {\normalsize\bfseries\oarg{\color{nared}Alternate}} % \end{tabular} % \end{tcolorbox} % % \begin{itemize} % \item Western names must use the \meta{FNN} argument. % % \item They require a comma to delimit any affixes (Section~\ref{sec:Affix}). % % \item They use \meta{Alternate} to swap with \meta{FNN} in the text. % % \item They have Western name patterns (Section~\ref{sec:NamePatterns}) and index entries: % \begin{itemize} % \item[] \meta{SNN}, \meta{FNN} % % \item[] \meta{SNN}, \meta{FNN}, \meta{Affix} % \end{itemize} % \end{itemize} % % \subsubsection*{\hfil Full, Last, and First Names} % % \cmd{\Name} prints first uses of names long, then short thereafter. \cmd{\Name*} ensures a long form. Both \cmd{\FName} and \cmd{\FName*} print long names in first uses, then just a forename in later uses. The intent is that one can just add an \texttt{F} to either \cmd{\Name} or \cmd{\Name*}. The affix in a surname only appears in long name instances. % % \BothInfo[5ex]{\ShowPattern[George]{Washington}\break % \ShowPattern[George S.]{Patton, Jr.}} % {\ShowIdxPageref*[George]{Washington}\break % \ShowIdxPageref*[George S.]{Patton, Jr.}} % \begin{Block} % \ForgetName[George]{Washington} % \FUse \Name [George]{Washington}\dotfill^^A % |\Name [George]{Washington}|\\ % \UseL \Name*[George]{Washington}\dotfill^^A % |\Name*[George]{Washington}|\\ % \LUse \Name [George]{Washington}\dotfill^^A % |\Name [George]{Washington}|\\ % \UseS \FName[George]{Washington}\dotfill^^A % |\FName[George]{Washington}| % \end{Block} % % \begin{Block} % \FUse \Name [George S.]{Patton, Jr.}\dotfill^^A % |\Name [George S.]{Patton, Jr.}|\\ % \UseL \Name*[George S.]{Patton, Jr.}\dotfill^^A % |\Name*[George S.]{Patton, Jr.}|\\ % \LUse \Name [George S.]{Patton, Jr.}\dotfill^^A % |\Name [George S.]{Patton, Jr.}|\\ % \UseS \FName[George S.]{Patton, Jr.}\dotfill^^A % |\FName[George S.]{Patton, Jr.}| % \end{Block} % % \newpage % % \subsubsection*{\hfil Affixes and Alternate Forms} % % Here we use prefix macros to change name forms (Section~\ref{sec:ListPrefix}). In a long name instance, \cmd{\DropAffix} drops the affix from a Western surname. The \meta{Alternate} argument appears only in long names or forename-only names in the text. Otherwise, the automatic shortening of names will display only a short surname. % \begin{itemize} % \item Drop the affix in a first- or long use (\cmd{\Name*}): % \BothInfo*{\ShowPattern[George S.]{Patton, Jr.}\break % \ShowPattern[J.D.]{Rockefeller, IV}\break % \ShowPattern[Clive Staples]{Lewis}} % {\ShowIdxPageref*[George S.]{Patton, Jr.}\break % \ShowIdxPageref*[J.D.]{Rockefeller, IV}\break % \ShowIdxPageref*[Clive Staples]{Lewis}} % \begin{Block} % \FUse \ForgetThis\DropAffix\Name[George S.]{Patton, Jr.}\\ % \UseB |\DropAffix\Name[George S.]{Patton, Jr.}|\\ % \UseL \DropAffix\Name*[George S.]{Patton, Jr.}\\ % \UseB |\DropAffix\Name*[George S.]{Patton, Jr.}| % \end{Block} % % \item To force the printing of only \meta{Affix} in the subsequent use of a Roman name, see the use of \cmd{\ForceAffix} in Section~\ref{sec:RomanGeneral}. % % \item Use an alternate forename in a first- or long use: % \begin{Block} % \FUse \Name[J.D.]{Rockefeller, IV}[John Davison]\\ % \UseB |\Name[J.D.]{Rockefeller, IV}[John Davison]|\\ % \UseL \Name*[J.D.]{Rockefeller, IV}[John Davison]\\ % \UseB |\Name*[J.D.]{Rockefeller, IV}[John Davison]| % \end{Block} % % \item Use an alternate forename in a forename-only use (\cmd{\FName}): % \begin{Block} % \UseS \FName[George S.]{Patton, Jr.}[George]\dotfill^^A % |\FName[George S.]{Patton, Jr.}[George]|\\ % \UseS \FName[J.D.]{Rockefeller, IV}[Jay]\dotfill^^A % |\FName[J.D.]{Rockefeller, IV}[Jay]| % \end{Block} % % \item Drop the affix and alter the forenames: % \begin{Block} % \FUse \ForgetThis\DropAffix\Name[J.D.]{Rockefeller, IV}[Jay]\\ % \UseB |\DropAffix\Name[J.D.]{Rockefeller, IV}[Jay]|\\ % \UseL \DropAffix\Name*[J.D.]{Rockefeller, IV}[Jay]\\ % \UseB |\DropAffix\Name*[J.D.]{Rockefeller, IV}[Jay]| % \end{Block} % % \item Use multiple alternate forenames for the same person: % \begin{Block} % \FUse \Name [Clive Staples]{Lewis}\dotfill^^A % |\Name [Clive Staples]{Lewis}|\\ % \UseL \Name*[Clive Staples]{Lewis}[C.S.]\dotfill^^A % |\Name*[Clive Staples]{Lewis}[C.S.]|\\ % \UseS \FName[Clive Staples]{Lewis}[Jack]\dotfill^^A % |\FName[Clive Staples]{Lewis}[Jack]| % \end{Block} % \end{itemize} % \smallskip % % \begin{InfoBox} % All names should be sorted in the index by their longest unique forms. Convert Roman numerals to Arabic in order to avoid sorting the numbers alphabetically. See Sections~\ref{sec:IndexSort}, \ref{sec:IndexInitials}, and~\ref{sec:VarNames}.\smallskip % % \begin{Center} % |\PretagName[J.D.]{Rockefeller, IV}{Rockefeller, John D 4}| % \end{Center} % \end{InfoBox} % % \begin{Quotation}{\Name[W.H.]{Auden}} % {\Title{Paris Review} interview (1972) p. 206} % I don't think the mystical experience can be verbalized. When % the ego disappears, so does power over language. % \index{creatives, quotes of\noexpand\string|hyperpage} % \end{Quotation} % % \newpage % % \subsubsection[Reversed Western]{Reversed Western Names} % % \begin{tcolorbox}[colframe=gray]\centering % \begin{tabular}{l@{ }c@{ }c@{ }c} % & Required & Required \meta{SNN} & Optional\\ % & \meta{FNN} & no \meta{Affix} & (text only)\\[1ex] % \tcbox[equal height group=D,colback=white,tikznode, % left=1mm,right=1mm,valign=center] % {\normalsize\bfseries \hbox{\cmd{\Name}\texttt{ }}\\ % \cmd{\Name*}\\ % \cmd{\FName}} & % \tcbox[equal height group=D,colback=white,tikznode, % left=1mm,right=1mm,valign=center] % {\normalsize\bfseries\oarg{FNN}} & % \tcbox[equal height group=D,colback=white,tikznode, % left=1mm,right=1mm,valign=center] % {\normalsize\bfseries\quad\marg{SNN}\quad\hbox{}} & % \tcbox[equal height group=D,colback=white,tikznode, % left=1mm,right=1mm,valign=center] % {\normalsize\bfseries\oarg{\color{nared}Alternate}} % \end{tabular} % \end{tcolorbox} % % \begin{itemize} % \item Names must use the \meta{FNN} argument. They do not use \meta{Affix}.\footnote{This prevents strange name forms. Using \cmd{\DropAffix} (Section~\ref{sec:Affix}) will not help.} % % \item They use \meta{Alternate} to swap with \meta{FNN} in the text. % % \item They have Western name patterns and index entries: % \begin{itemize} % \item[] \meta{SNN}, \meta{FNN} % \end{itemize} % % \item They do not work with the obsolete syntax (Section~\ref{sec:Obsolete}). % \end{itemize} % % \subsubsection*{\hfil Starting with Western Name Forms} % % Reversed Western forms (as with Hungarian and other names) start out as Western names before we put them into reverse order. They retain Western index entries [\hyperlink{Mulvany}{Mulvany}, 166]. Without being reversed, they look like:\footnote{Regarding the margin note that shows name patterns, with \texttt{pdflatex} and \texttt{latex} using \textsf{inputenc} and \textsf{fontenc}, in \texttt{\ShowPattern[Frenec]{Molnár}} the glyphs \texttt{Ãą} correspond to \cmd{\IeC\{\textbackslash\textquotesingle a\}}.} % % \BothInfo[5ex]{\ShowPattern[Frenec]{Molnár}\break % \ShowPattern[Hideyo]{Noguchi}} % {\ShowIdxPageref*[Hideyo]{Noguchi}\break % \ShowIdxPageref*[Frenec]{Molnár}} % \begin{Block} % \FUse \Name[Frenec]{Molnár}\dotfill^^A % |\Name[Frenec]{Molnár}|\\ % \LUse \Name[Frenec]{Molnár}\dotfill^^A % |\Name[Frenec]{Molnár}|\\ % \FUse \Name[Hideyo]{Noguchi}\dotfill^^A % |\Name[Hideyo]{Noguchi}|\\ % \LUse \Name[Hideyo]{Noguchi}\dotfill^^A % |\Name[Hideyo]{Noguchi}|\\ % \UseL \Name*[Hideyo]{Noguchi}[Doctor]\dotfill^^A % |\Name*[Hideyo]{Noguchi}[Doctor]| % \end{Block} % % \subsubsection*{\hfil Using the Reversing and Other Macros} % % We use \cmd{\RevName} and optionally \cmd{\CapName} (Section~\ref{sec:AllCaps}) to print reversed names in the text without changing the Western forms of their index entries. They function well in context, not arbitrarily: % % \begin{Block} % \FUse \ForgetThis\RevName\Name[Frenec]{Molnár}\dag\\ % \UseB |\RevName\Name[Frenec]{Molnár}\dag|\\ % \LUse \RevName\Name[Frenec]{Molnár}\dag\\ % \UseB |\RevName\Name[Frenec]{Molnár}\dag|\\ % \FUse \ForgetThis\CapName\RevName\Name[Hideyo]{Noguchi}[Sensei]\dag\\ % \UseB |\CapName\RevName\Name[Hideyo]{Noguchi}[Sensei]\dag|\\ % \LUse \CapName\RevName\Name[Hideyo]{Noguchi}[Sensei]\dag\\ % \UseB |\CapName\RevName\Name[Hideyo]{Noguchi}[Sensei]\dag|\\ % \UseL \CapName\RevName\Name*[Hideyo]{Noguchi}[Sensei]\dag\\ % \UseB |\CapName\RevName\Name*[Hideyo]{Noguchi}[Sensei]\dag| % \end{Block} % % \newpage % % \subsubsection[Eastern Names]{``Native'' Eastern Names} % % \begin{tcolorbox}[colframe=gray]\centering % \begin{tabular}{l@{ }c@{ }c} % & Required \meta{SNN} & Optional\\ % & required \meta{Affix} & (text only)\\[1ex] % \tcbox[equal height group=D,colback=white,tikznode, % left=1mm,right=1mm,valign=center] % {\normalsize\bfseries \hbox{\cmd{\Name}\texttt{ }}\\ % \cmd{\Name*}\\ % \cmd{\FName}} & % \tcbox[equal height group=D,colback=white,tikznode, % left=1mm,right=1mm,valign=center] % {\normalsize\bfseries\marg{SNN\textbf{,}Affix}} & % \tcbox[equal height group=D,colback=white,tikznode, % left=1mm,right=1mm,valign=center] % {\normalsize\bfseries\oarg{\color{nared}Alternate}} % \end{tabular} % \end{tcolorbox} % % \begin{itemize} % \item They must \emph{leave empty} the \meta{FNN} argument. % % \item They use instead the \meta{SNN\textbf{,}Affix} arguments. % % \item They can swap \meta{Alternate} and \meta{Affix} in the text.\footnote{We discourage the obsolete syntax (Section~\ref{sec:Obsolete}) because \meta{Alternate} does not work with it.} % % \item They have Non-Western name patterns and index entries: % \begin{itemize} % \item[] \meta{SNN} \meta{Affix} % \end{itemize} % % \item If name order is reversed in the text with \cmd{\RevName}, these names retain Non-Western index entries. % \end{itemize} % % \subsubsection*{\hfil Starting with Eastern Name Forms} % % Among the names shown below, \cmd{\FName} does not show a personal name by default. This design helps to prevent Western writers from being culturally insensitive. % % \BothInfo[5ex]{\ShowPattern{Miyazaki, Hayao}} % {\ShowIdxPageref*{Miyazaki, Hayao}} % \begin{Block} % \ForgetName{Miyazaki, Hayao} % \FUse \Name{Miyazaki, Hayao}\dotfill |\Name{Miyazaki, Hayao}|\\ % \LUse \Name{Miyazaki, Hayao}\dotfill |\Name{Miyazaki, Hayao}|\\ % \UseL \Name*{Miyazaki, Hayao}[Sensei]\dotfill |\Name*{Miyazaki, Hayao}[Sensei]|\\ % \UseS \FName{Miyazaki, Hayao}\dotfill |\FName{Miyazaki, Hayao}| % \end{Block} % % \subsubsection*{\hfil Using the Reversing and Other Macros} % % The reversing macros produce a Western name ordering in the text. One must use \cmd{\ForceFN} with \cmd{\FName} (Section~\ref{sec:FName}) to print just a personal name: % % \begin{Block} % \FUse \ForgetThis\RevName\Name{Miyazaki, Hayao}\\ % \UseB |\RevName\Name{Miyazaki, Hayao}|\\ % \UseS \ForceFN\FName{Miyazaki, Hayao}\\ % \UseB |\ForceFN\FName{Miyazaki, Hayao}|\\ % \UseL \RevName\Name*{Miyazaki, Hayao}[Mr.]\\ % \UseB |\RevName\Name*{Miyazaki, Hayao}[Mr.]|\\ % \UseL \CapName\Name*{Miyazaki, Hayao}[Sensei]\\ % \UseB |\CapName\Name*{Miyazaki, Hayao}[Sensei]|\\ % \UseS \ForceFN\FName{Miyazaki, Hayao}[Sensei]\\ % \UseB |\ForceFN\FName{Miyazaki, Hayao}[Sensei]| % \end{Block} % % \newpage % % \subsubsection[Ancient Names]{Royal or Ancient Names} % % \begin{tcolorbox}[colframe=gray]\centering % \begin{tabular}{l@{ }c@{ }c} % & Required \meta{SNN} & Optional,\\ % & optional \meta{Affix} & special\\[1ex] % \tcbox[equal height group=D,colback=white,tikznode, % left=1mm,right=1mm,valign=center] % {\normalsize\bfseries \hbox{\cmd{\Name}\texttt{ }}\\ % \cmd{\Name*}\\ % \cmd{\FName}} & % \tcbox[equal height group=D,colback=white,tikznode, % left=1mm,right=1mm,valign=center] % {\normalsize\bfseries\marg{SNN\color{nared}\textbf{,}Affix}} & % \tcbox[equal height group=D,colback=white,tikznode, % left=1mm,right=1mm,valign=center] % {\normalsize\bfseries\oarg{\color{nared}Alternate}} % \end{tabular} % \end{tcolorbox} % % \begin{itemize} % \item They must \emph{leave empty} the \meta{FNN} argument. % % \item They use either the \meta{SNN\textbf{,}Affix} arguments or just \meta{SNN}. % % \item Their index entries take Non-Western forms: % \begin{itemize} % \item[] \meta{SNN} \meta{Affix} % \item[] \meta{SNN} % \end{itemize} % % \item Names with \meta{SNN\textbf{,}Affix} can swap \meta{Alternate} and \meta{Affix} in the text. % % \item Names with \meta{SNN} should not use \meta{Alternate}.\footnote{That would produce the obsolete syntax (Section~\ref{sec:Obsolete}).} % \end{itemize} % % \subsubsection*{\hfil No School Like the Old School} % % \begin{itemize} % \item \cmd{\FName} normally prints \meta{SNN} to avoid mistakes. % \BothInfo*{\ShowPattern{Elizabeth, I}\break % \ShowPattern{John, Eriugena}\break % \ShowPattern{Aristotle}} % {\ShowIdxPageref*{Elizabeth, I}\break % \ShowIdxPageref*{John, Eriugena}\break % \ShowIdxPageref*{Aristotle}} % \begin{Block} % \FUse \ForgetThis\Name{Elizabeth, I}\dotfill |\Name{Elizabeth, I}|\\ % \LUse \Name{Elizabeth, I}\dotfill |\Name{Elizabeth, I}|\\ % \UseS \FName{Elizabeth, I}\dotfill |\FName{Elizabeth, I}| % \end{Block} % % \item Here we work with titles and sobriquets: % \begin{Block} % \FUse \ForgetThis\Name{Elizabeth, I}[I ``Gloriana'']\\ % \UseB |\Name{Elizabeth, I}[I ``Gloriana'']|\\ % \UseS \ForceFN\FName{Elizabeth, I}[Gloriana]\\ % \UseB |\ForceFN\FName{Elizabeth, I}[Gloriana]| % \end{Block} % % \item In long name references, a space always occurs between \meta{SNN} and \meta{Affix} or \meta{SNN} and \meta{Alternate}. When a sobriquet begins with a comma, semicolon, etc., use name tags (Sections~\ref{sec:Complexity} and~\ref{sec:DataTags}): % \begingroup\begin{itemize} % \item Avoid forms like the following: % % \item[] {\small \Name{Attila, the Hun}[, the Scourge of God]\\ % |\Name{Attila, the Hun}[, the Scourge of God]|} % % \item Use instead something like: % % \item[] {\small \NameAddInfo{Attila, the Hun}{, the Scourge of God}^^A % \ForgetThis\Name{Attila, the Hun}\NameQueryInfo{}\\ % \Name{Attila, the Hun}\NameQueryInfo{}\\ % |\NameAddInfo{Attila, the Hun}{, the Scourge of God}|\\ % |\ForgetThis\Name{Attila, the Hun}\NameQueryInfo{}|\\ % |\Name{Attila, the Hun}\NameQueryInfo{}|} % \end{itemize}\endgroup % % \newpage % % \item Here we show a non-royal, medieval name: % \begin{Block} % \FUse \Name{John, Eriugena}[Scotus Eriugena]\\ % \UseB |\Name{John, Eriugena}[Scotus Eriugena]|\\ % \UseL \Name*{John, Eriugena}\dotfill |\Name*{John, Eriugena}|\\ % \LUse \Name{John, Eriugena}\dotfill |\Name{John, Eriugena}| % \end{Block} % % \item Context matters; do not reverse names or force affixes arbitrarily: % \begin{Block} % \UseS \ForceFN\FName{Elizabeth, I}\dotfill^^A % |\ForceFN\FName{Elizabeth, I}|\\ % \UseL \RevName\Name*{John, Eriugena}\dotfill^^A % |\RevName\Name*{John, Eriugena}| % \end{Block} % % \item Here is the trivial case: % \begin{Block} % \FUse \Name{Aristotle}\dotfill |\Name{Aristotle}|\\ % \LUse \Name{Aristotle}\dotfill |\Name{Aristotle}| % \end{Block} % \end{itemize} % % \subsubsection[Selecting Types]{More about Selecting Name Types} % \label{sec:SelectingTypes} % % \ExcludeName{Leif, Erikson} % \ExcludeName[Pontius]{Pilate} % How does one decide from among these name forms? Some choices are fairly obvious and standardized. Others depend on one's culture and publication standards. % \begin{itemize} % \item Dealing with patronyms can vary according to one's culture. % \PatInfo[4ex]{\ShowPattern[Leif]{Erikson}\break % \ShowPattern{Leif, Erikson}} % \begin{itemize} % \item To index under the patronym, use a Western form: % \begin{Block} % \ForgetThis\Name[Leif]{Erikson}\dotfill|\Name[Leif]{Erikson}|\\ % \Name[Leif]{Erikson}\dotfill|\Name[Leif]{Erikson}|\\ % \FName[Leif]{Erikson}\dotfill|\FName[Leif]{Erikson}|\\ % Index: \ShowIdxPageref*[Leif]{Erikson} % \end{Block} % % \item To index under the personal name, use a Non-Western form: % \begin{Block} % \Name{Leif, Erikson}\dotfill|\Name{Leif, Erikson}|\\ % \Name{Leif, Erikson}\dotfill|\Name{Leif, Erikson}|\\ % \ForceFN\FName{Leif, Erikson}\dotfill^^A % |\ForceFN\FName{Leif, Erikson}|\\ % Index: \ShowIdxPageref*{Leif, Erikson} % \end{Block} % \end{itemize} % % \item Roman names are quite challenging (Sections~\ref{sec:Romani}f.). % \PatInfo[4ex]{\ShowPattern[M.T.]{Cicero}\break % \ShowPattern[Pontius]{Pilate}\break % \ShowPattern{Pontius,Pilate}} % \begin{itemize} % \item Common Western usage draws on popular name forms: % \begin{Block} % \ForgetThis\Name[M.T.]{Cicero}\dotfill|\Name[M.T.]{Cicero}|\\ % \Name[M.T.]{Cicero}\dotfill|\Name[M.T.]{Cicero}|\\ % Index: \ShowIdxPageref*[M.T.]{Cicero} % \end{Block} % % \item That segues into names indexed by \LA{cognomen}: % \begin{Block} % \Name[Pontius]{Pilate}\dotfill|\Name[Pontius]{Pilate}|\\ % \Name[Pontius]{Pilate}\dotfill|\Name[Pontius]{Pilate}|\\ % Index: \ShowIdxPageref*[Pontius]{Pilate} % \end{Block} % % \item Yet other approaches can index by \LA{nomen}: % \begin{Block} % \ForgetThis\Name{Pontius,Pilate}\dotfill^^A % |\Name{Pontius,Pilate}|\\ % \Name{Pontius,Pilate}\dotfill|\Name{Pontius,Pilate}|\\ % \ForceFN\FName{Pontius,Pilate}\dotfill^^A % |\ForceFN\FName{Pontius,Pilate}|\\ % Index: \ShowIdxPageref*{Pontius,Pilate} % \end{Block} % \end{itemize} % \end{itemize} % % There are ways to display a name using one form, while indexing under another, starting in Section~\ref{sec:NameMedieval}. The quick interface discussed in the next section can make these choices easier to implement and change, if needed. One should consult a style guide or in-house guidelines to help choose the proper name forms. % % \newpage % % \subsection{Quick Interface} % \label{sec:QuickUIStart} % % \subsubsection{Name Shorthands} % % \DescribeEnv{nameauth} % To reduce typing, we replace frequently-used macros with the shorthand forms of the quick interface. Using the \texttt{nameauth} environment in the preamble guards against undefined macros. It defines a delimited macro \cmd{\<}, recalling a \texttt{tabular}: % % \begin{SyntaxBox} % \cmd{\begin\{nameauth\}}\\ % \hspace{2em}\cmd{\<} \meta{arg1} \texttt{\&} % \meta{arg2} \texttt{\&} % \meta{arg3} \texttt{\&} % \meta{arg4} \texttt{>}\\ % \cmd{\end\{nameauth\}} % \end{SyntaxBox} % % In this context, \meta{arg1} becomes the root of three new macros per name: % \begin{Quote} % \begin{tabular}{@{\quad}l@{\ same as: }ll} % \texttt{\textbackslash}\meta{arg1} & % \cmd{\Name\ }\oarg{arg2}\marg{arg3}\oarg{arg4} \\ % \texttt{\textbackslash L}\meta{arg1} & % \cmd{\Name*}\oarg{arg2}\marg{arg3}\oarg{arg4} & % {\color{nared} |%| L for \textit{long}} \\ % \texttt{\textbackslash S}\meta{arg1} & % \cmd{\FName}\oarg{arg2}\marg{arg3}\oarg{arg4} & % {\color{nared} |%| S for \textit{short}} \\ % \end{tabular} % \end{Quote} % % Usually we leave \meta{arg4} empty, apart from specific contexts. That field permanently displays only alternate names, or is used with the obsolete syntax (Section~\ref{sec:Obsolete}). Here is another way of thinking about arguments in the \texttt{nameauth} environment that relates back to what we have seen with the basic interface: % % \begin{SyntaxBox} % \cmd{\begin\{nameauth\}}\\ % \hspace{2em}\cmd{\<} \meta{arg1} \texttt{\&} % \meta{\color{nared}FNN} \texttt{\&} % \meta{SNN\color{nared}\textbf{,}Affix} \texttt{\&} % \meta{\color{nared}Alternate} \texttt{>}\\ % \cmd{\end\{nameauth\}} % \end{SyntaxBox} % % By seeing the mandatory arguments in black and the optional ones in red, it helps us to see that, if either \meta{arg1} or \meta{arg3} are empty, or \meta{SNN} is empty, \textsf{nameauth} will generate a package error. Forgetting the backslash, any ampersand, or angle bracket will cause fatal errors. See Section~\ref{sec:FinalOptargs} on final optional arguments. % % \Info*{\small\dbend}Package warnings result when one redefines name shorthands using the \texttt{nameauth} environment. For example, we use \texttt{White} in two different rows to populate \meta{arg1}. That causes \cmd{\White}, \cmd{\LWhite}, and \cmd{\SWhite} to be redefined: % \begin{Quote} % \begin{Verbatim} % \begin{nameauth} % \< White & E.B. & White & > % version 1 % \< White & E.\,B. & White & > % version 2 % \end{nameauth} % \end{Verbatim} % \end{Quote} % \begin{nameauth} % \< White & E.B. & White & > ^^A version 1 % \< White & E.\,B. & White & > ^^A version 2 % \end{nameauth} % % \BothInfo*{\ShowPattern[E.\,B.]{White}} % {\ShowIdxPageref*[E.\,B.]{White}}^^A % \cmd{\White} produces \White, the version with the thin space. We lost the first version of the name when we redefined it.\footnote{When building \textsf{nameauth} an intended warning will appear: \texttt{Shorthand macro already exists.}} % % On the next page we will create an example \texttt{nameauth} environment using many of the names that we have so far encountered. We will add other names that we have not yet seen, introducing additional concepts in the process. Those include Western name forms that contain particles (articles and prepositions), which are discussed in greater detail in Section~\ref{sec:NameParticles}. % % \newpage % % The comments below are merely explanatory and in no wise required to use the environment. Likewise, extra spaces that are added for clarity are stripped. % \begin{Quote} % \JustIndex\Wash^^A % \JustIndex\Lewis^^A % \JustIndex\Patton^^A % \JustIndex\JRIV^^A % \JustIndex\Soto^^A % \JustIndex\JLF^^A % \JustIndex\JWG^^A % \JustIndex\Noguchi^^A % \JustIndex\Molnar^^A % \JustIndex\Miyazaki^^A % \JustIndex\Eliz^^A % \JustIndex\Aeth^^A % \JustIndex\Eriugena^^A % \JustIndex\Aris^^A % \begin{Verbatim} % \begin{nameauth} % % Western Name Forms % % % \< Wash & George & Washington & > % \< Lewis & Clive Staples & Lewis & > % % Western Name Forms with Affixes % \< Patton & George S. & Patton, Jr. & > % \< JRIV & J.D. & Rockefeller, IV & > % % Western Name Forms with Particles % \< Soto & Hernando & de Soto & > % \< JLF & Jean de & La Fontaine & > % \< JWG & J.W. von & Goethe & > % % Reversed Western Forms % \< Noguchi & Hideyo & Noguchi & > % \< Molnar & Frenec & Molnár & > % % ``Native'' Eastern Forms % \< Miyazaki & & Miyazaki, Hayao & > % % Royal, Medieval, and Ancient Forms % \< Eliz & & Elizabeth, I & > % \< Aeth & & Æthelred, II & > % \< Eriugena & & John, Eriugena & > % \< Aris & & Aristotle & > % % Name Forms Always Using Alternate Names % \< CSL & Clive Staples & Lewis & C.S. > % \< MSens & & Miyazaki, Hayao & Sensei > % \end{nameauth} % \end{Verbatim} % \end{Quote} % % Here is an example of how much typing one can save with the quick interface, not to mention the prevention of error by not retyping arguments: % \begin{Center} % \BothInfo[4ex]{\ShowPattern[George]{Washington}} % {\ShowIdxPageref*[George]{Washington}} % \begin{tabular}{rll}\toprule % \rowcolor{nagrey}^^A % \bfseries Text & & \bfseries Macro / Arguments\\ % % \Wash & Quick: & \cmd{\Wash}\\ % & Basic: & % \cmd{\Name}\texttt{[George]\{Washington\}}\\ % % \rowcolor{nagrey}^^A % \LWash & Quick: & \cmd{\LWash}\\ % \rowcolor{nagrey}^^A % & Basic: & % \cmd{\Name*}\texttt{[George]\{Washington\}}\\ % % \SWash & Quick: & \cmd{\SWash}\\ % & Basic: & % \cmd{\FName}\texttt{[George]\{Washington\}}\\ % % \rowcolor{nagrey}^^A % \ForgetThis\Wash & Quick: & \cmd{\ForgetThis}\cmd{\Wash}\\ % \rowcolor{nagrey}^^A % & Basic: & % \cmd{\ForgetName}^^A % \texttt{[George]\{Washington\}}\\ % \rowcolor{nagrey}^^A % & & % \cmd{\Name}\texttt{[George]\{Washington\}}\\ % % \rowcolor{nagrey}^^A % & & \emph{---\,OR\,---}\\ % \rowcolor{nagrey}^^A % & Basic: & % \cmd{\ForgetThis}^^A % \cmd{\Name}\texttt{[George]\{Washington\}}\\ % % \SubvertThis\Wash & Quick: & \cmd{\SubvertThis}\cmd{\Wash}\\ % & Basic: & % \cmd{\SubvertName}^^A % \texttt{[George]\{Washington\}}\\ % & & % \cmd{\Name}\texttt{[George]\{Washington\}}\\ % % & & \emph{---\,OR\,---}\\ % & Basic: & % \cmd{\SubvertThis}\cmd{\Name}^^A % \texttt{[George]\{Washington\}}\\ % % \rowcolor{nagrey}^^A % \JustIndex\Wash(unseen in text) & Quick: & % \cmd{\JustIndex}\cmd{\Wash}\\ % \rowcolor{nagrey}^^A % & Basic: & % \cmd{\IndexName}^^A % \texttt{[George]\{Washington\}}\\\bottomrule % \end{tabular} % \end{Center} % % \newpage % % \subsubsection[Name Variants]{Quick Name Variant Overview} % % After setting up the previous \texttt{nameauth} environment, we use the resulting name shorthands. Below we show more prefix macros that affect name forms in the text (Section~\ref{sec:ListPrefix}). We hide the use of \cmd{\ForgetThis} (Section~\ref{sec:NameControl}), which makes the \textsf{nameauth} logic ``forget'' that a name exists, creating a first-use instance. % \begin{itemize} % \item Western Names: \hfill Sections~\ref{sec:Naming}, % \ref{sec:FName} % \BothInfo*{\ShowPattern[George]{Washington}} % {\ShowIdxPageref*[George]{Washington}} % \begin{Block} % \FUse \ForgetThis\Wash \dotfill \cmd{\Wash}\\ % \UseL \LWash \dotfill \cmd{\LWash}\\ % \LUse \Wash \dotfill \cmd{\Wash}\\ % \UseS \SWash \dotfill \cmd{\SWash} % \end{Block} % % \item Nicknames and Affixes: \hfill Sections~\ref{sec:FName}, % \ref{sec:Affix} % \BothInfo*{\ShowPattern[George S.]{Patton, Jr.}\break % \ShowPattern[J.D.]{Rockefeller, IV}\break % \ShowPattern[Clive Staples]{Lewis}} % {\ShowIdxPageref*[George S.]{Patton, Jr.}\break % \ShowIdxPageref*[J.D.]{Rockefeller, IV}\break % \ShowIdxPageref*[Clive Staples]{Lewis}} % \begin{Block} % \FUse \ForgetThis\DropAffix\Patton \dotfill^^A % \cmd{\DropAffix}\cmd{\Patton}\\ % \UseL \LPatton \dotfill \cmd{\LPatton}\\ % \UseL \DropAffix\LPatton \dotfill \cmd{\DropAffix}\cmd{\LPatton}\\ % \UseL \DropAffix\LPatton[George]\dotfill^^A % \cmd{\DropAffix}\cmd{\LPatton[George]}\\ % \LUse \Patton \dotfill \cmd{\Patton}\\ % \UseS \SPatton\dotfill \cmd{\SPatton}\\ % \UseS \SPatton[George]\dotfill \cmd{\SPatton[George]} % \end{Block} % % \begin{Block} % \FUse \ForgetThis\JRIV[John Davison]\dotfill^^A % \cmd{\JRIV[John Davison]}\\ % \UseL \LJRIV \dotfill \cmd{\LJRIV}\\ % \UseL \DropAffix\LJRIV[Jay]\dotfill^^A % \cmd{\DropAffix}\cmd{\LJRIV[Jay]}\\ % \LUse \JRIV \dotfill \cmd{\JRIV} % \end{Block} % % \begin{Block} % \FUse \ForgetThis\Lewis\dotfill \cmd{\Lewis}\\ % \UseL \LLewis[C.S.]\dotfill \cmd{\LLewis[C.S.]}\\ % \UseL \LLewis[Jack]\dotfill \cmd{\LLewis[Jack]}\\ % \UseS \SLewis\dotfill \cmd{\SLewis}\\ % \UseS \SLewis[Jack]\dotfill \cmd{\SLewis[Jack]}\\ % \UseL \LCSL\dotfill \cmd{\LCSL}\\ % \UseS \SCSL\dotfill \cmd{\SCSL} % \end{Block} % % \item Non-Western (``Native'' Eastern) Names: \hfill Sections~\ref{sec:Eastern}, \ref{sec:AllCaps}, \ref{sec:RevNames} % \BothInfo*{\ShowPattern{Miyazaki, Hayao}} % {\ShowIdxPageref*{Miyazaki, Hayao}} % \begin{Block} % \FUse \ForgetThis\CapName\Miyazaki\dotfill^^A % \cmd{\CapName}\cmd{\Miyazaki}\\ % \UseL \CapName\LMiyazaki\dotfill \cmd{\CapName}\cmd{\LMiyazaki}\\ % \LUse \CapName\Miyazaki\dotfill \cmd{\CapName}\cmd{\Miyazaki}\\ % \UseL \RevName\LMiyazaki\dotfill \cmd{\RevName}\cmd{\LMiyazaki}\\ % \UseL \RevName\LMiyazaki[Mr.]\dotfill^^A % \cmd{\RevName}\cmd{\LMiyazaki[Mr.]}\\ % \UseS \SMiyazaki\dotfill \cmd{\SMiyazaki}\\ % \UseS \ForceFN\SMiyazaki\dotfill \cmd{\ForceFN}\cmd{\SMiyazaki} % \end{Block} % % \item Reversed Western Names: \hfill Sections~\ref{sec:AllCaps}, \ref{sec:RevNames} % \BothInfo*{\ShowPattern[Hideyo]{Noguchi}} % {\ShowIdxPageref*[Hideyo]{Noguchi}} % \begin{Block} % \FUse \ForgetThis\Noguchi\dotfill \cmd{\Noguchi}\\ % \UseL \LNoguchi\dotfill \cmd{\LNoguchi}\\ % \UseL \LNoguchi[Doctor]\dotfill \cmd{\LNoguchi[Doctor]}\\ % \UseS \SNoguchi\dotfill \cmd{\SNoguchi}\\ % \UseL \RevName\LNoguchi\dag\dotfill^^A % \cmd{\RevName}\cmd{\LNoguchi}\cmd{\dag}\\ % \UseL \CapName\RevName\LNoguchi\dag\dotfill^^A % \cmd{\CapName}\cmd{\RevName}\cmd{\LNoguchi}\cmd{\dag}\\ % \LUse \CapName\Noguchi\dag\dotfill^^A % \cmd{\CapName}\cmd{\Noguchi}\cmd{\dag} % \end{Block} % % \newpage % % \item Western Names Reversed by Surname: \hfill Section \ref{sec:LastFirst} % \BothInfo*{\ShowPattern[George]{Washington}} % {\ShowIdxPageref*[George]{Washington}} % \begin{Block} % \FUse \ForgetThis\RevComma\Wash\dotfill \cmd{\RevComma}\cmd{\Wash}\\ % \UseL \RevComma\LWash\dotfill \cmd{\RevComma}\cmd{\LWash} % \end{Block} % % \item Particles, English usage: \hfill Section~\ref{sec:NameParticles} % \BothInfo*{\ShowPattern[Hernando]{de~Soto}} % {\ShowIdxPageref*[Hernando]{de~Soto}} % \begin{Block} % \FUse \ForgetThis\Soto\dotfill \cmd{\Soto}\\ % \LUse \CapThis\Soto\dotfill \cmd{\CapThis}\cmd{\Soto} % \end{Block} % % \item Particles, Non-English usage: \hfill Section~\ref{sec:NameParticles} % \BothInfo*{\ShowPattern[Jean de]{La Fontaine}\break % \ShowPattern[J.W. von]{Goethe}} % {\ShowIdxPageref*[Jean de]{La Fontaine}\break % \ShowIdxPageref*[J.W. von]{Goethe}} % \begin{Block} % \FUse \ForgetThis\JLF\dotfill \cmd{\JLF}\\ % \LUse \JLF\dotfill \cmd{\JLF}\\ % \FUse \ForgetThis\JWG[Joh. Wolfgang v.]\dotfill^^A % |\JWG[Joh. Wolfgang v.]|\\ % \LUse \JWG\dotfill \cmd{\JWG} % \end{Block} % % \item Royal, Medieval, and Ancient Names: \hfill Sections~\ref{sec:NameMedieval}, \ref{sec:NameAncient} % \BothInfo*{\ShowPattern{Æthelred, II}\break % \ShowPattern{John, Eriugena}\break % \ShowPattern{Aristotle}} % {\ShowIdxPageref*{Æthelred, II}\break % \ShowIdxPageref*{John, Eriugena}\break % \ShowIdxPageref*{Aristotle}} % \begin{Block} % \FUse \ForgetThis\Aeth\footnote % {Regarding the margin note with name patterns, with % \texttt{pdflatex} and \texttt{latex} using \textsf{inputenc} % and \textsf{fontenc}, in \texttt{\ShowPattern{Æthelred, II}} % the glyphs \texttt{ÃĘ} correspond to \cmd{\IeC\{}\cmd{\AE\}}.}^^A % \dotfill \cmd{\Aeth}\\ % \LUse \Aeth\dotfill \cmd{\Aeth}\\ % \UseL \LAeth[II, ``Unræd'']\dotfill |\LAeth[II, ``Unræd'']| % \end{Block} % % \begin{Block} % \FUse \ForgetThis\Eriugena[Scotus Eriugena]\dotfill^^A % \cmd{\Eriugena[Scotus Eriugena]}\\ % \UseL \LEriugena\dotfill \cmd{\LEriugena}\\ % \LUse \Eriugena\dotfill \cmd{\Eriugena} % \end{Block} % % \begin{Block} % \FUse \ForgetThis\Aris\dotfill \cmd{\Aris}\\ % \LUse \Aris\dotfill \cmd{\Aris} % \end{Block} % \end{itemize} % % \subsubsection[\protect\textit{Alternate} Field] % {\protect\meta{Alternate} Name Field} % \label{sec:ArgIV} % % Two shorthands above use \meta{arg4}, the final field in each row of the \texttt{nameauth} environment. These are \cmd{\CSL} and \cmd{\MSens}. They correspond to similar name shorthands \cmd{\Lewis} and \cmd{\Miyazaki}, which leave \meta{arg4} empty. Here is how they are related: % \begin{itemize} % \item They share identical name patterns (Section~\ref{sec:NamePatterns}). % \BothInfo*{\ShowPattern[Clive Staples]{Lewis}\break % \ShowPattern{Miyazaki, Hayao}} % {\ShowIdxPageref*[Clive Staples]{Lewis}\break % \ShowIdxPageref*{Miyazaki, Hayao}} % \begin{Block} % \ForgetName{Miyazaki, Hayao}\ForgetName[Clive Staples]{Lewis} % \FUse \CSL\dotfill \cmd{\CSL}\\ % \LUse \Lewis\dotfill \cmd{\Lewis}\\ % \FUse \MSens\dotfill \cmd{\MSens}\\ % \LUse \Miyazaki\dotfill \cmd{\Miyazaki} % \end{Block} % % \item Usually, one leaves \meta{arg4} empty and adds alternate names in brackets as needed: \LLewis[C.S.] \cmd{\LLewis[C.S.]} % % \item By using \meta{arg4}, one trades less work for more ambiguity: Can one add an alternate name or not? To answer that, one should keep track of all name shorthands that use \meta{arg4}. % % \item Failure to keep track of such macros creates output like \LCSL[Jack] \cmd{\LCSL[Jack]} and \LMSens[Sensei] \cmd{\LMSens[Sensei]}. The \meta{arg4} content populates \meta{Alternate}; the text in brackets is just text. % % \item Remember that \meta{arg4} can be used for the obsolete syntax, as mentioned previously, but we do not cover that here. % \end{itemize} % % \newpage % % \subsection{Select Macro Overview} % % \subsubsection[With Name Args]{Macros with Name Arguments} % \label{sec:NameArgMacros} % % Macros that take name arguments (Section~\ref{sec:NameArgs}) can have final optional arguments (Section~\ref{sec:FinalOptargs}) and update \cmd{\NameauthPattern} (Section~\ref{sec:NamePatterns}). The \meta{xref args} are the same as \meta{name args} for a cross-reference to a \meta{target} (Section~\ref{sec:IndexRef}). For more on null arguments, see Section~\ref{sec:NullArgs}. % \begin{Center} % \begin{tabular}{lrcll}\toprule % \rowcolor{nagrey}^^A % \tmarg[nagrey]{}^^A % Optional Prefix & Macro & Star & Arguments & \\ % % \tmarg{Print a name}^^A % \meta{prefix macros} & % \cmd{\Name} & \texttt{*} & \meta{name args} & \\ % \tmarg{}^^A % \meta{prefix macros} & % \cmd{\FName} & \texttt{*} & \meta{name args} & \\ % % \rowcolor{nagrey}^^A % \tmarg[nagrey]{Page entry}^^A % only \cmd{\SeeAlso} & \cmd{\IndexName} & & \meta{name args} & \\ % \rowcolor{nagrey}^^A % \tmarg[nagrey]{Only cross-reference}^^A % only \cmd{\SeeAlso} & \cmd{\IndexRef} & & % \meta{xref args} & \meta{target}\\ % % \tmarg{Stop page entry}^^A % & \cmd{\ExcludeName} & & \meta{name args} & \\ % \tmarg{Allow page entry}^^A % & \cmd{\IncludeName} & \texttt{*} & \meta{name args} & \\ % % \rowcolor{nagrey}^^A % \tmarg[nagrey]{Sort index}^^A % & \cmd{\PretagName} & & \meta{name args} & \meta{sort key} \\ % \rowcolor{nagrey}^^A % \tmarg[nagrey]{Make index tag}^^A % & \cmd{\TagName} & & \meta{name args} & \meta{tag} \\ % \rowcolor{nagrey}^^A % \tmarg[nagrey]{Delete index tag}^^A % & \cmd{\UntagName} & & \meta{name args} & \\ % % \tmarg{Make name tag}^^A % & \cmd{\NameAddInfo} & & \meta{name args} & \meta{tag} \\ % \tmarg{Show name tag}^^A % & \cmd{\NameQueryInfo} & & \meta{name args} & or null argument \\ % \tmarg{Delete name tag}^^A % & \cmd{\NameClearInfo} & & \meta{name args} & \\ % % \rowcolor{nagrey}^^A % \tmarg[nagrey]{Delete name pattern}^^A % & \cmd{\ForgetName} & & \meta{name args} & \\ % \rowcolor{nagrey}^^A % \tmarg[nagrey]{Create name pattern}^^A % & \cmd{\SubvertName} & & \meta{name args} & \\ % % \tmarg{Name pattern tests}^^A % & \cmd{\IfMainName} & & \meta{name args} & \marg{y}\marg{n}\\ % \tmarg{}^^A % & \cmd{\IfFrontName} & & \meta{name args} & \marg{y}\marg{n}\\ % \tmarg{}^^A % & \cmd{\IfAKA} & & \meta{name args} & \marg{y}\marg{n}\marg{x}\\ % % \rowcolor{nagrey}^^A % \tmarg[nagrey]{Debugging}^^A % & \cmd{\ShowPattern} & & \meta{name args} & or null argument \\ % \rowcolor{nagrey}^^A % \tmarg[nagrey]{}^^A % & \cmd{\ShowIdxPageref} & \texttt{*} % & \meta{name args} & or null argument \\ % \rowcolor{nagrey}^^A % \tmarg[nagrey]{}^^A % & \cmd{\ShowNameInfo} & & \meta{name args} & or null argument \\ % \rowcolor{nagrey}^^A % \tmarg[nagrey]{}^^A % & \cmd{\ShowNameState} & \texttt{*} % & \meta{name args} & or null argument \\\bottomrule % \end{tabular} % \end{Center} % % Regarding prefix macros, see Section~\ref{sec:ListPrefix}. Not shown above are \cmd{\AKA}, \cmd{\AKA*}, \cmd{\PName}, and \cmd{\PName*} (Section~\ref{sec:AKA}). They have their own rules. % % \begin{Quotation}{\ForgetThis\Miyazaki} % {Proposal for \Title{Princess Mononoke} (c. 1994)} % We depict hatred, but it is to depict that there are more important % things. We depict a curse, to depict the joy of liberation. % \index{creatives, quotes of\noexpand\string|hyperpage} % \end{Quotation} % % \newpage % % \subsubsection{Prefix Macros} % \label{sec:ListPrefix} % % Similar to the package options (Section~\ref{sec:PkgOptions}), many prefix macros alter the values of the Boolean flags that reflect the state of names and name processing. The naming and indexing macros reset the Boolean flags after they are invoked. % \begin{itemize}[rightmargin=0em] % \item Capitalization in the text: % \begin{itemize}[leftmargin=6.9em]\small % \item[\cmd{\CapName}] Capitalize entire \meta{SNN}. Overrides \cmd{\CapThis}. % \item[\cmd{\CapThis}] Capitalize first letter of all name components. % \item[\cmd{\AccentCapThis}] Fallback when Unicode detection cannot be done. % \end{itemize} % % \item Reversing names in the text: % \begin{itemize}[leftmargin=6.9em]\small % \item[\cmd{\RevName}] Reverse order of any name. Overrides \cmd{\RevComma} % \item[\cmd{\RevComma}] Reverse only Western names to \meta{SNN}, \meta{FNN}. % \end{itemize} % % \item Use of commas before Western affixes in the text: % \begin{itemize}[leftmargin=6.9em]\small % \item[\cmd{\ShowComma}] Add comma between \meta{SNN} and \meta{Affix}. % \item[\cmd{\NoComma}] No comma between \meta{SNN} and \meta{Affix}. Overrides \cmd{\ShowComma}. % \end{itemize} % % \item Name breaks in the text: % \begin{itemize}[leftmargin=6.9em]\small % \item[\cmd{\DropAffix}] Drop affix only for a long Western name instance. % \item[\cmd{\KeepAffix}] Insert non-breaking space between \meta{SNN}, \meta{FNN/Affix}. % \item[\cmd{\KeepName}] Insert NBSP between all name elements. Overrides \cmd{\KeepAffix}. % \end{itemize} % % \item Forcing name forms in the text by deleting or creating patterns: % \begin{itemize}[leftmargin=6.9em]\small % \item[\cmd{\ForgetThis}] Force first name instance. Negates \cmd{\SubvertThis}. % \item[\cmd{\SubvertThis}] Force subsequent name instance. % \end{itemize} % % \item Forcing other name forms: % \begin{itemize}[leftmargin=6.9em]\small % \item[\cmd{\ForceName}] Force first-use formatting hooks. % \item[\cmd{\ForceAffix}] Print only the affix of a Western name (Section~\ref{sec:RomanGeneral}). % \item[\cmd{\ForceFN}] Print \meta{Affix} or \meta{Alternate} in a Non-Western short name. % \end{itemize} % % \item Indexing: % \begin{itemize}[leftmargin=6.9em]\small % \item[\cmd{\SeeAlso}] For \cmd{\IndexName}, \cmd{\AKA}, and \cmd{\PName}; make a \textit{see also} xref. % \item[\cmd{\SkipIndex}] For naming macros; do not create index entry. % \item[\cmd{\JustIndex}] For naming macros; index only; negated by \cmd{\AKA}, \cmd{\PName}. % \end{itemize} % % \item Prefix macros can ``stack'' their effects:\\[0.4ex] % \CapThis\RevName\SkipIndex\Name[bar]{foo}\dotfill^^A % |\CapThis\RevName\SkipIndex\Name[bar]{foo}| % % \item The Boolean flags governed by the prefix macros are reverted after the appropriate macros produce output in the text (or index) unless the output of the naming macros is suppressed via \cmd{\JustIndex}. % % \item Even after using \cmd{\JustIndex}, several name form modifiers are reset. This prevents errors when handling the next name. % % \item Except for \cmd{\SeeAlso}, use prefix macros only before a naming macro that is designed to print output in the text. % % \item Use \cmd{\SeeAlso} only with \cmd{\IndexRef}, \cmd{\AKA}, and \cmd{\PName}. Otherwise it will be ignored and reset by \cmd{\IndexName} and the naming macros. % \end{itemize} % % \subsection{Names and Complexity} % \label{sec:Complexity} % % The \textsf{nameauth} package allows levels of complexity when representing names. Previously, we have seen this example: % % \begin{Block} % \LEliz[I ``Gloriana'']\dotfill |\LEliz[I ``Gloriana'']| % \end{Block} % % We can display the same name form using different macros. This next example does not offer more features; it only presents more complexity: % % \begin{Block} % \LEliz\ ``\ForceFN\SEliz[Gloriana]''\dotfill^^A % |\LEliz\ ``\ForceFN\SEliz[Gloriana]''| % \end{Block} % % The next example offers more features and better automation. Based on Section~\ref{sec:NameAncient} (cf.~\ref{sec:Formatting}), we use name tags and adapt the formatting hooks to this manual's conventions. We make key changes once, which govern names thereafter: % \begingroup % \begin{Quote} % \begin{Verbatim} % \makeatletter % \NameAddInfo{Elizabeth, I}{\if@nameauth@InHook{ }\fi``Gloriana''} % \makeatother % \renewcommand*\NamesFormat[1] % {\color{blue}\sffamily #1\NameQueryInfo{}} % \renewcommand*\MainNameHook{\sffamily} % \end{Verbatim} % \end{Quote} % % \makeatletter % \NameAddInfo{Elizabeth, I}{\if@nameauth@InHook{ }\fi``Gloriana''} % \makeatother % \renewcommand*\NamesFormat[1] % {\color{blue}\sffamily#1\NameQueryInfo{}} % \renewcommand*\MainNameHook{\sffamily} % \begin{Block} % \BothInfo[1ex]{\ShowPattern{}}{\ShowIdxPageref*{}} % \FUse \ForgetThis\LEliz\dotfill |\ForgetThis\LEliz|\\ % \UseL \LEliz\dotfill |\LEliz|\\ % \LUse \Eliz\dotfill |\Eliz|\\ % \UseB \NameQueryInfo{}\dotfill |\NameQueryInfo{}| % \end{Block} % \endgroup % % \begin{InfoBox}[Avoid the Rabbit Hole] % \begin{itemize}[leftmargin=1em,rightmargin=0em,itemsep=0.2ex] % \item Names are nouns with changeable states. % \begin{itemize}[rightmargin=1em] % \item \meta{FNN} and \meta{Alternate} can change easily in the text. % % \item Changing \meta{Affix} depends on the name type. % % \item Changing \meta{SNN} needs \cmd{\noexpand} with a macro that changes only in the formatting hooks (Section~\ref{sec:AltFormat}). % \end{itemize} % % \item Names also are verbs that affect their environment. % % \item There are design trade-offs: % \begin{itemize} % \item Simple examples are easy to write, but they can require subtle, ongoing changes of repetitive macros. % % \item Automation shifts the work to a complex, one-time setup that hides complexity thereafter. % \end{itemize} % % \item Use a simple approach unless otherwise needed. % \end{itemize} % \end{InfoBox} % \ReturnLink % % \newpage % % \section{Package Options} % \label{sec:PkgOptions} % % The \textsf{nameauth} options range from standards compliance, control, and appearance to backward compatibility with old versions. Thus: % % \begin{SyntaxBox} % \cmd{\usepackage[}\meta{\(option_1\)}\textbf{,}\meta{\(option_2\)}^^A % \textbf{,}\dots\textbf{,}\meta{\(option_n\)}\texttt{]\{nameauth\}} % \end{SyntaxBox} % % We discuss package options according to the structure of this package. Section~\ref{sec:Priorities} shows the priority of options and related macros. Default options are in \emph{boldface} and need not be invoked. Other options are in \emph{\color{nared} dark red} and must be invoked explicitly. Many options work with macros offering finer control. % % \subsection{Name Grammar and Syntax} % % \subsubsection*{\hfil Syntax Warnings} % % \begin{tabular}{p{0.22\textwidth}p{0.6\textwidth}} % \leavevmode\color{nared}\quad\texttt{strictsyntax} & % \leavevmode\color{nared}Show warnings when the obsolete syntax appears.\medskip\\ % \end{tabular} % % \noindent Disabled by default, this option helps one to avoid using the obsolete syntax. % % \subsubsection*{\hfil Show/Hide Affix Commas} % % \begin{tabular}{p{0.22\textwidth}p{0.6\textwidth}} % \quad\bfseries\texttt{nocomma} & % \bfseries Modern standards: Suppress commas between Western surnames % and affixes.\smallskip\\ % \leavevmode\color{nared}\quad\texttt{comma} & % \leavevmode\color{nared}Older standards: Retain commas between Western % surnames and affixes.\medskip\\ % \end{tabular} % % \BothInfo[2.5ex]{\ShowPattern[J.E.]{Carter, Jr.}} % {\ShowIdxPageref*[J.E.]{Carter, Jr.}}^^A % \noindent These options do not affect the index. The default \texttt{nocomma} option lets us produce, e.g., \Name*[J.E.]{Carter, Jr.} (\FName[J.E.]{Carter, Jr.}[Jimmy]). The \texttt{comma} option produces \ShowComma\Name*[J.E.]{Carter, Jr.}. For equivalent macros, see Section~\ref{sec:Affix}. % % \subsubsection*{\hfil Capitalize Entire Surnames} % % \begin{tabular}{p{0.22\textwidth}p{0.6\textwidth}} % \quad\bfseries\texttt{normalcaps} & % \bfseries Do not perform any special capitalization.\smallskip\\ % \leavevmode\color{nared}\quad\texttt{allcaps} & % \leavevmode\color{nared}\textls[-5]{Capitalize entire surnames, e.g., Romanized % Eastern names, throughout the document.}\medskip\\ % \end{tabular} % % \noindent These options do not affect the index. See Section~\ref{sec:Eastern} for finer control. To capitalize names in the index, use caps as desired or alternate formatting (Section~\ref{sec:AltFormat}). % % \subsubsection*{\hfil Reverse Name Order} % % \begin{tabular}{p{0.22\textwidth}p{0.6\textwidth}} % \quad\bfseries\texttt{notreversed} & % \bfseries Print names in the order specified by \cmd{\Name} % and the other macros.\smallskip\\ % \leavevmode\color{nared}\quad\texttt{allreversed} & % \leavevmode\color{nared}Print all name forms in ``smart'' reverse order; % Western as Non-Western, and vice versa.\smallskip\\ % \leavevmode\color{nared}\quad\texttt{allrevcomma} & % \leavevmode\color{nared}Print all Western names as % ``Surname, Forenames''.\medskip\\ % \end{tabular} % % \noindent These options do not affect the index and are mutually exclusive (Sections~\ref{sec:RevNames} and~\ref{sec:LastFirst}). Use \texttt{allrevcomma} option only for listing Western names by surname. % % \subsection{Indexing} % % \subsubsection*{\hfil Toggle Indexing} % % \begin{tabular}{p{0.22\textwidth}p{0.6\textwidth}} % \quad\bfseries\texttt{index} & % \bfseries Create index entries in place with names.\smallskip\\ % \leavevmode\color{nared}\quad\texttt{noindex} & % \leavevmode\color{nared}Suppress indexing of names.\medskip\\ % \end{tabular} % %^^A ----- Recompile Point ----- %^^A Starting with the text below, any errors will force one to remove all %^^A auxiliary files before compiling this file. % % \noindent % These options and related macros apply only to the \textsf{nameauth} package macros. The default \texttt{index} option enables name indexing right away. The \texttt{noindex} option disables the indexing of names until \cmd{\IndexActive} enables it. % % \Info*{\small\dbend}Using \texttt{noindex} and \cmd{\IndexInactive} prevents index tags until \cmd{\IndexActive} is called, as explained in Section~\ref{sec:GeneralIndex}. For indexing feature priority, see Section~\ref{sec:Priorities}. % % \subsubsection*{\hfil Toggle Index Sorting} % % \begin{tabular}{p{0.22\textwidth}p{0.6\textwidth}} % \quad\bfseries\texttt{pretag} & % \bfseries Create sort keys used with \texttt{makeindex}.\smallskip\\ % \leavevmode\color{nared}\quad\texttt{nopretag} & % \leavevmode\color{nared}Do not create sort keys.\medskip\\ % \end{tabular} % % \noindent The default allows \cmd{\PretagName} to create sort keys used with \texttt{makeindex}. The \texttt{nopretag} option disables the sorting mechanism and causes \cmd{\PretagName} only to emit warnings. See Section~\ref{sec:IndexSort}. % % \subsubsection*{\hfil Verbose Warnings} % % \begin{tabular}{p{0.22\textwidth}p{0.6\textwidth}} % \leavevmode\color{nared}\quad\texttt{verbose} & % \leavevmode\color{nared}Show more diagnostic warnings.\medskip\\ % \end{tabular} % % \noindent The default suppresses all but the most essential package warnings. Increasing the warnings may help to debug index page entries, cross-references, and exclusions. Section~\ref{sec:GeneralIndex} shows macros that can enable and disable verbose warnings. % % \subsection[Formatting]{Formatting and Name Patterns} % % Formatting, in its simplest form, is typographic post-processing of a name in the body text. In its complex forms, formatting can affect the syntactic form of a name in both the body text and the index. % % \subsubsection*{\hfil Choose Formatting System} % % \begin{tabular}{p{0.22\textwidth}p{0.6\textwidth}} % \bfseries\quad\texttt{mainmatter} & % \bfseries Start with ``main-matter names'' and formatting hooks. \normalfont(Section~\ref{sec:Formatting})\smallskip\\ % \leavevmode\color{nared}\quad\texttt{frontmatter} & % \leavevmode\color{nared}Start with ``front-matter names'' and hooks until % \cmd{\NamesActive} starts the main system.\smallskip\\ % \leavevmode\color{nared}\quad\texttt{alwaysformat} & % \leavevmode\color{nared}Use only respective ``first use'' formatting % hooks.\smallskip\\ % \leavevmode\color{nared}\quad\texttt{formatAKA} & % \leavevmode\color{nared}Format the first use of a name with \cmd{\AKA} like % the first use of a name with \cmd{\Name}.\medskip\\ % \end{tabular} % % \noindent The \texttt{mainmatter} and \texttt{frontmatter} options enable two respectively independent systems of name use and formatting. Even when no extra formatting occurs, the formatting hooks are defined. Changes require \cmd{\renewcommand}. % % The \texttt{alwaysformat} option forces ``first use'' hooks globally in both name systems. It is of limited usefulness in current versions of \textsf{nameauth}. % % The \texttt{formatAKA} option permits \cmd{\AKA} to use the ``first use'' formatting hooks. This enables \cmd{\ForceName} to trigger those hooks at will (Section~\ref{sec:AKA}). Otherwise \cmd{\AKA} only uses ``subsequent use'' formatting hooks. % % \subsubsection*{\hfil Predefined Formatting Hooks} % % \begin{tabular}{p{0.22\textwidth}p{0.6\textwidth}} % \quad\bfseries\texttt{noformat} & % \bfseries Pass the displayed name through the formatting hooks % unchanged.\smallskip\\ % \leavevmode\color{nared}\quad\texttt{smallcaps} & % \leavevmode\color{nared}First use of a main-matter name in small % caps.\smallskip\\ % \leavevmode\color{nared}\quad\texttt{italic} & % \leavevmode\color{nared}First use of a main-matter name in % italic.\smallskip\\ % \leavevmode\color{nared}\quad\texttt{boldface} & % \leavevmode\color{nared}First use of a main-matter name in % boldface.\medskip\\ % \end{tabular} % % \noindent The options above are ``quick'' definitions of \cmd{\NamesFormat} based on English typography. The default is no formatting.\footnote{For the old default, use the \texttt{smallcaps} option. User feedback dictated this change.} % See also Robert Bringhurst, \Title{The Elements of Typographic Style}, version 3.2 (Point Roberts, Washington: Hartley \& Marks, 2008), 53--60. All references [\hypertarget{Bringhurst}{Bringhurst}] refer to this edition. % % The following macros govern the way that names in the text appear. Two name systems are used in \textsf{nameauth}, one for main-matter text (default) and one for front-matter text.\footnote{\cmd{\NamesFormat} was once the only formatting hook. The other macros developed from there. Regrettably, this approach contributed to some ``cargo-cult'' programming, hopefully remedied.} % These hooks do not affect the index. Changes to the formatting hooks normally apply within the scope where they occur: % \begin{itemize} % \item \cmd{\NamesFormat} formats first uses of main-matter names. % % \item \cmd{\MainNameHook} formats subsequent uses of main-matter names. % % \item \cmd{\FrontNamesFormat} formats first uses of front-matter names. % % \item \cmd{\FrontNameHook} formats subsequent uses of front-matter names. % \end{itemize} % % Sections \ref{sec:Formatting} and~\ref{sec:AdvancedFormat}f. explain these hooks and their redefinition in greater detail. Section~\ref{sec:AKA} discusses how \cmd{\AKA} does not respect these formatting systems. % % \subsection{Alternate Formatting} % % \begin{tabular}{p{0.22\textwidth}p{0.6\textwidth}} % \leavevmode\color{nared}\quad\texttt{altformat} & % \leavevmode\color{nared}Make available the alternate formatting framework % from the start of the document. Activate alternate formatting by % default.\medskip\\ % \end{tabular} % % \noindent A built-in framework provides an alternate formatting mechanism that can be used for European or ``Continental'' standads in German, French, and so on. These standards often format surnames, both in the text and in the index. See Section~\ref{sec:AltFormat}. % % \subsection[Scope of Decisions]{Change Scope of Name Decision Macros} % % \begin{tabular}{p{0.22\textwidth}p{0.6\textwidth}} % \leavevmode\color{nared}\quad\texttt{globaltest} & % \leavevmode\color{nared}Do not put name decision paths in a local % scope.\medskip\\ % \end{tabular} % % \noindent The default puts the decision paths of \cmd{\IfMainName}, etc., into groups with local scope (Section~\ref{sec:NameTests}). This option removes that scoping. Note that names tracked by \textsf{nameauth} within such decision paths are global with respect to their values. % % \subsection{Version Compatibility} % \label{sec:OptionCompat} % % These options can introduce undocumented behavior. They exist only for backward compatibility to help users cope with this author's ignorance as development changed to better fit the problem domain.\medskip % % \begin{tabular}{p{0.22\textwidth}p{0.6\textwidth}} % \leavevmode\color{nared}\quad\texttt{oldAKA} & % \leavevmode\color{nared}Force \cmd{\AKA*} to act like it did before % version 3.0, instead of like \cmd{\FName}.\smallskip\\ % \leavevmode\color{nared}\quad\texttt{oldreset} & % \leavevmode\color{nared}Reset per-use name flags locally; let % \cmd{\ForgetThis} and \cmd{\SubvertThis} pass through \cmd{\AKA} (pre-v3.3). % Let \cmd{\SeeAlso} pass through \cmd{\IndexName} and other macros. % Keep \cmd{\IndexName} and \cmd{\IndexRef} from resetting \cmd{\SkipIndex} % (pre-version 3.5).\smallskip\\ % \leavevmode\color{nared}\quad\texttt{oldpass} & % \leavevmode\color{nared}When \cmd{\Justindex} is called, allow long or short % Boolean flags to pass through, as they did before version 3.3.\smallskip\\ % \leavevmode\color{nared}\quad\texttt{oldtoks} & % \leavevmode\color{nared}Token registers holding the arguments of the % last-used name are set locally, as before version 3.5.\smallskip\\ % \leavevmode\color{nared}\quad\texttt{oldsee} & % \leavevmode\color{nared}Allow lax handling of \textit{see} references that % are extant names, as before version 3.5.\smallskip\\ % \leavevmode\color{nared}\quad\texttt{oldargs} & % \leavevmode\color{nared}Load the \textsf{xargs} and \textsf{suffix} % packages in order to permit user-supplied modifications to work as % in version 3.7 and before. The package macros will still use % \textsf{xparse} because of its advantages.\medskip\\ % \end{tabular} % % The following table shows how one gets approximate backward compatibility: % \begin{center} % \begin{tabular}{lll}\toprule % \rowcolor{nagrey}^^A % \bfseries Version & \bfseries Needed Options & \bfseries Possible Options \\ % % \(\le2.6\) & \ttfamily oldreset,oldtoks,oldsee, & \ttfamily oldargs \\ % & \ttfamily oldAKA,oldpass & \\ % % \rowcolor{nagrey}^^A % 3.0--3.2 & \ttfamily oldreset,oldtoks,oldsee, & \ttfamily oldargs \\ % \rowcolor{nagrey}^^A % & \ttfamily oldpass & \\ % % 3.3--3.4 & \ttfamily oldreset,oldtoks,oldsee & \ttfamily oldargs \\ % % \rowcolor{nagrey}^^A % 3.5--3.7 & \ttfamily & \ttfamily oldargs \\\bottomrule % \end{tabular} % \end{center} % \ReturnLink % % \begin{AltFormatZone} % \begin{Quotation}{\Luth} % {\Title{\de{Von der Freiheit eines Christenmenschen}} (1520)} % \de{Eyn Chriſten menſch iſt eyn freyer herr / % u\raise 0.25ex\hbox{\kern -1.1ex\textsuperscript{e}\kern 1pt}ber alle % ding / und niemande unterthan. Eyn Chriſten menſch iſt eyn dienſtpar % knecht aller ding und yderman unterthan.} % % (A Christian person is a free lord, above all things, and subject to % no one. A Christian person is a willing servant of all things and is % subject to everyone.) % \index{theologians, quotes of\noexpand\string|hyperpage} % \end{Quotation} % \end{AltFormatZone} % % \newpage % % \section{Feature Priority} % \label{sec:Priorities} % % \begin{Center} % \begin{tabular}{llll}\toprule % \bfseries Indexing & \bfseries Capitalization & % \bfseries Reversing & \bfseries Name Forms,\\ % & & & \bfseries Commas, Breaks\\\midrule % % \ttfamily\bfseries index & \ttfamily\bfseries normalcaps & % \ttfamily\bfseries notreversed & \cmd{\ForgetThis}\\ % \ttfamily\bfseries noindex & \ttfamily\bfseries allcaps & % \ttfamily\bfseries allreversed & \cmd{\DropAffix}\\ % \cmd{\IndexActive} & \cmd{\AllCapsInactive} & \cmd{\ReverseActive}\\ % \cmd{\IndexInactive} & \cmd{\AllCapsActive} & \cmd{\ReverseInactive}\\[1ex] % % \rowcolor{white!95!black} % \cmd{\JustIndex} & \cmd{\CapName} & \cmd{\RevName} & \cmd{\NoComma}\\ % \rowcolor{white!95!black} % & & & \cmd{\SubvertThis}\\ % \rowcolor{white!95!black} % & & & \cmd{\ForceAffix}\\ % \rowcolor{white!95!black} % & & & \cmd{\ForceName}\\[1ex] % % \rowcolor{white!90!black} % \cmd{\SkipIndex} & \cmd{\AccentCapThis} & % \ttfamily\bfseries allrevcomma & \cmd{\KeepName}\\ % \rowcolor{white!90!black} % & & \cmd{\RevCommaActive} & \cmd{\ForceFN}\\ % \rowcolor{white!90!black} % & & \cmd{\RevCommaInactive} & \ttfamily\bfseries showcomma\\ % \rowcolor{white!90!black} % & & & \cmd{\ShowComma}\\ % \rowcolor{white!90!black} % & & & \ttfamily\bfseries nocomma\\[1ex] % % \rowcolor{white!85!black} % \cmd{\SeeAlso} & \cmd{\CapThis} & \cmd{\RevComma} & % \cmd{\KeepAffix}\\\bottomrule % \end{tabular} % \end{Center} % % Above we see the relative priority of package options and their related macros. Package options are shown in boldface. % \begin{itemize} % \item Lighter-colored rows show higher priority. Darker-colored rows show lower priority. Higher-priority options and macros have the ability to override lower-priority ones. % % \item All options and macros in a given row have equal priority and are able to countermand each other within a given column. % % \item Priority affects macros and options within columns. \cmd{\IndexInactive} overrides \cmd{\JustIndex}, which overrides \cmd{\SkipIndex}. If \cmd{\IndexInactive} is invoked, \cmd{\JustIndex} will have no effect. % % \item Section~\ref{sec:IdxPrefix} shows the complex interaction between \cmd{\SkipIndex} and \cmd{\JustIndex}. It it is best to use \cmd{\SkipIndex} and \cmd{\JustIndex} only before a naming macro that can print to the text. % % \item Priority usually does not affect macros and options in different columns. Yet the macros themselves can have specific effects that change the expected behavior of macros in other columns. % % \item[] For example, \cmd{\JustIndex} prevents a name from being displayed in the text. Even if \cmd{\IndexInactive} overrides \cmd{\JustIndex} with respect to indexing, it has no effect on the fact that the name will not be printed. % % \item[] Also, \cmd{\JustIndex} resets the effects of \cmd{\ForgetThis} and \cmd{\SubvertThis} because those prefix macros (Section~\ref{sec:ListPrefix}) should precede only naming macros that produce output in the text. % % \item[] Although \cmd{\JustIndex} does not override the caps and reversing macros and options, it prevents anything related to displaying a name. % \end{itemize} % \ReturnLink % % \newpage % % \section{Naming Macros} % \label{sec:NamePedantic} % % This section is a ``pedantic'' presentation of macros, their syntax, and their output. Section~\ref{sec:BasicStart} is better for getting started. All naming macros that have the same arguments also create consistent index entries. These entries are created both at the start and at the end of a name, in case that name spans a page break. % % \subsection{\texttt{\textbackslash Name} and \texttt{\textbackslash Name*}} % \label{sec:Naming} % % \DescribeMacro{\Name} % \cmd{\Name} displays and indexes names. It prints the full name at the first occurrence, then usually just \meta{SNN} thereafter. % \DescribeMacro{\Name*} % \cmd{\Name*} always prints the full name: % % \begin{SyntaxBox} % \cmd{\Name\ }\oarg{FNN}\marg{SNN\textbf{,}Affix}\oarg{Alternate}\\ % \cmd{\Name*}\oarg{FNN}\marg{SNN\textbf{,}Affix}\oarg{Alternate} % \end{SyntaxBox} % % In the body text only, the \meta{Alternate} argument replaces either \meta{FNN} or, if \meta{FNN} is absent, \meta{Affix}. If both \meta{FNN} and \meta{Affix} are absent when \meta{Alternate} is present, then the obsolete syntax is used (Section~\ref{sec:Obsolete}, not shown below). % \begin{Quote} % \begin{Verbatim} % \begin{nameauth} % \< Einstein & Albert & Einstein & > % \< Carter & J.E. & Carter, Jr. & > % \< Miyazaki & & Miyazaki, Hayao & > % \< Eliz & & Elizabeth, I & > % \< Confucius & & Confucius & > % \end{nameauth} % \end{Verbatim} % \end{Quote} % % \ForgetName[Albert]{Einstein}\ForgetName[J.E.]{Carter, Jr.} % \begin{Center} % \BothInfo[2.6ex]{\ShowPattern[Albert]{Einstein}\break % \ShowPattern[J.E.]{Carter, Jr.}\break % \ShowPattern{Miyazaki, Hayao}\break % \ShowPattern{Elizabeth, I}\break % \ShowPattern{Confucius}} % {\ShowIdxPageref*[Albert]{Einstein}\break % \ShowIdxPageref*[J.E.]{Carter, Jr.}\break % \ShowIdxPageref*{Miyazaki, Hayao}\break % \ShowIdxPageref*{Elizabeth, I}\break % \ShowIdxPageref*{Confucius}} % \begin{tabular}{ll}\toprule % \rowcolor{nagrey}^^A % \Name [Albert]{Einstein} & |\Name [Albert]{Einstein}| or |\Einstein|\\ % \rowcolor{nagrey}^^A % \LEinstein & |\Name*[Albert]{Einstein}| or |\LEinstein|\\ % \rowcolor{nagrey}^^A % \Einstein & |\Name [Albert]{Einstein}| or |\Einstein|\\ % % \Name [J.E.]{Carter, Jr.} & |\Name [J.E.]{Carter, Jr.}| or |\Carter|\\ % \LCarter[James Earl] & |\Name*[J.E.]{Carter, Jr.}[James Earl]|\\ % & or |\LCarter[James Earl]|\\ % \Carter & |\Name [J.E.]{Carter, Jr.}| or |\Carter|\\ % % \rowcolor{nagrey}^^A % \ForgetThis\Name {Miyazaki, Hayao} & % |\Name {Miyazaki, Hayao}| or |\Miyazaki|\\ % \rowcolor{nagrey}^^A % \Name*{Miyazaki, Hayao}[Sensei] & |\Name*{Miyazaki, Hayao}[Sensei]|\\ % \rowcolor{nagrey}^^A % \Name {Miyazaki, Hayao} & |\Name {Miyazaki, Hayao}| or |\Miyazaki|\\ % % \ForgetThis\Eliz & |\Name {Elizabeth, I}| or |\Eliz|\\ % \Name*{Elizabeth, I} & |\Name*{Elizabeth, I}| or |\LEliz|\\ % \Name {Elizabeth, I} & |\Name {Elizabeth, I}| or |\Eliz|\\ % % \rowcolor{nagrey}^^A % \ForgetThis\Confucius & |\Name {Confucius}| or |\Confucius|\\ % \rowcolor{nagrey}^^A % \Confucius & |\Name {Confucius}| or |\Confucius|\\\bottomrule % \end{tabular} % \end{Center} % With the quick interface, the usual way to use alternate names is by appending them in brackets: % \begin{Block} % \LCarter[James Earl]\dotfill |\LCarter[James Earl]|\\ % \LMiyazaki[Sensei]\dotfill |\LMiyazaki[Sensei]| % \end{Block} % Otherwise, one can populate the final field in the \texttt{nameauth} environment, with several caveats (Section~\ref{sec:ArgIV}). Alternate names appear only in long name forms or short name forms described in the next section. % % \newpage % % \subsection{Forenames: \texttt{\textbackslash FName}} % \label{sec:FName} % % \DescribeMacro{\FName} % \cmd{\FName} and its synonym \cmd{\FName*} print personal names only in subsequent name uses. % \DescribeMacro{\FName*} % That means when a name pattern does not exist, they print long name forms because it is a first use of a name. % % Unlike all other starred forms of macros in \textsf{nameauth}, these macros are synonyms because one might edit either \cmd{\Name} or \cmd{\Name*} by adding an \texttt{F} to create a short name instead of the usual forms. This approach was implemented before the quick interface was developed. % % \begin{SyntaxBox} % \cmd{\FName\ }\oarg{FNN}\marg{SNN\textbf{,}Affix}\oarg{Alternate}\\ % \cmd{\FName*}\oarg{FNN}\marg{SNN\textbf{,}Affix}\oarg{Alternate} % \end{SyntaxBox} % % These forename instance macros will permit all name types, but the normal behavior prints forenames only with Western names. With Non-Western names only \meta{SNN} is printed. This is designed to prevent Western writers from causing unintended offense in Eastern contexts. It also prevents the display of nonsense forms in the context of ancient and royal names. % % \DescribeMacro{\ForceFN} % To get an Eastern personal name or any affixed components of an ancient name, or to get \meta{Alternate} to display in their place, one must precede these macros with \cmd{\ForceFN}. See also Section~\ref{sec:NameMedieval} for more uses of \cmd{\ForceFN}. % \begin{Center} % \BothInfo[2.5ex]{\ShowPattern[Albert]{Einstein}\break % \ShowPattern[J.E.]{Carter, Jr.}\break % \ShowPattern{Miyazaki, Hayao}\break % \ShowPattern{Elizabeth, I}\break % \ShowPattern{Confucius}} % {\ShowIdxPageref*[Albert]{Einstein}\break % \ShowIdxPageref*[J.E.]{Carter, Jr.}\break % \ShowIdxPageref*{Miyazaki, Hayao}\break % \ShowIdxPageref*{Elizabeth, I}\break % \ShowIdxPageref*{Confucius}} % \begin{tabular}{ll}\toprule % \rowcolor{nagrey}^^A % \SEinstein & |\FName[Albert]{Einstein}| or |\SEinstein|\\ % % \SCarter[Jimmy] & |\FName[J.E.]{Carter, Jr.}[Jimmy]|\\ % & or |\SCarter[Jimmy]|\\ % % \rowcolor{nagrey}^^A % \FName{Miyazaki, Hayao} & |\FName{Miyazaki, Hayao}| or |\SMiyazaki|\\ % % \rowcolor{nagrey}^^A % \ForceFN\FName{Miyazaki, Hayao} & |\ForceFN\FName{Miyazaki, Hayao}|\\ % \rowcolor{nagrey}^^A % & or |\ForceFN\SMiyazaki|\\ % % \rowcolor{nagrey}^^A % \ForceFN\FName{Miyazaki, Hayao}[Sensei] & % |\ForceFN\FName{Miyazaki, Hayao}[Sensei]|\\ % \rowcolor{nagrey}^^A % & or |\ForceFN\SMiyazaki[Sensei]|\\ % % \SEliz & |\FName{Elizabeth, I}| or |\SEliz|\\ % \ForceFN\SEliz[Gloriana] & % |\ForceFN\FName{Elizabeth, I}[Gloriana]|\\ % & or |\ForceFN\SEliz[Gloriana]|\\ % % \rowcolor{nagrey}^^A % \FName{Confucius} & |\FName{Confucius}| or |\SConfucius |\\\bottomrule % \end{tabular} % \end{Center} % % The \meta{Alternate} argument replaces forenames in the text, which strongly shapes the use of \cmd{\FName}. We already have covered the use of \meta{Arg4} of the \texttt{nameauth} environment in Section~\ref{sec:ArgIV}. Please refer to that material when using \meta{Alternate}, especially with the quick interface. % % \begin{Quotation}{\Eliz} % {speech to Parliament, 1586} % As for me, I see no such great cause why I should either be % fond to live or fear to die. I have had good experience of this % world, and I know what it is to be a subject and what to be a % sovereign. Good neighbors I have had, and I have met with bad; % and in trust I have found treason. % \index{politicians, quotes of\noexpand\string|hyperpage} % \end{Quotation} % % \newpage % % \subsection{Technical Details} % % \subsubsection[Final Optargs]{Final Optional Arguments} % \label{sec:FinalOptargs} % % Macros that take name arguments using the current syntax (see also Section~\ref{sec:NameArgMacros}) can have a final optional argument. We do not index the names below in this manual, but we show how the index entries would appear: % \begingroup % \IndexInactive % \renewcommand\NamesFormat{} % \renewcommand\MainNameHook{} % \begin{itemize} % \item Western Index Entries:\smallskip % % \begingroup\footnotesize % \begin{tabular}{p{2.2cm}p{6.13cm}p{2.35cm}}\toprule % \rowcolor{nagrey}\bfseries Text & % \bfseries Macro / Arguments & \bfseries Index\\ % \Name*[First]{Last, Affix}[Alias] & % |\Name*[First]{Last, Affix}[Alias]| & % \ShowIdxPageref*[First]{Last, Affix}\\ % \Name*[First]{Last}[Alias] & % |\Name*[First]{Last}[Alias]| & % \ShowIdxPageref*[First]{Last}\\ % \RevName\Name*[First]{Last}[Alias] & % |\RevName\Name*[First]{Last}[Alias]| & % \ShowIdxPageref*[First]{Last}\\\bottomrule % \end{tabular} % \endgroup\smallskip % % \item Non-Western Index Entries:\smallskip % % \begingroup\footnotesize % \begin{tabular}{p{2.2cm}p{6.13cm}p{2.35cm}}\toprule % \rowcolor{nagrey}\bfseries Text & % \bfseries Macro / Arguments & \bfseries Index\\ % \Name*{Family, Person}[Alias] & % |\Name*{Family, Person}[Alias]| & % \ShowIdxPageref*{Family, Person}\\ % \RevName\Name*{Family, Person}[Alias] & % |\RevName\Name*{Family, Person}[Alias]| & % \ShowIdxPageref*{Family, Person}\\ % \Name*{Person, Affix}[Alias] & % |\Name*{Person, Affix}[Alias]| & % \ShowIdxPageref*{Person, Affix}\\\bottomrule % \end{tabular} % \endgroup % \end{itemize} % \endgroup % % Since May 2018, \textsf{xparse} either can ignore spaces before final optional arguments, or it can see those spaces as significant. Below \cmd{\Namei} ignores these spaces, the default for \textsf{nameauth}. \cmd{\Nameii} sees these spaces as significant.\footnote{Before May 2018, \cmd{\Namei} worked like \cmd{\Nameii} does now. This manual checks for the appropriate changes and mitigates errors. Currently, \textsf{xparse} is just as stable as \textsf{xargs} and \textsf{suffix}.} % The default advantages of \cmd{\Namei} outweigh those of \cmd{\Nameii}. Section~\ref{sec:FullCustomize} shows how one can change these defaults via advanced customization. There are no ``perfect'' choices, only trade-offs. % % \begin{Quote} % \begin{Verbatim} % \NewDocumentCommand {\Namei}{O{} m O{}} % {\providecommand\Opt{#3}\ifx\Opt\empty #1\ #2\else \Opt\ #2\fi} % % Cannot use this definition before May 2018. % \NewDocumentCommand{\Nameii}{O{} m !O{}} % {\providecommand\Opt{#3}\ifx\Opt\empty #1\ #2\else \Opt\ #2\fi} % % |\Namei: | \Namei[Person1]{Family1} [something1]\\[1ex] % |\Nameii:| \Nameii[Person2]{Family2} [something2] % \end{Verbatim} % % \ifdefined\nameauthxp%^^A % \NewDocumentCommand {\Namei}{O{} m O{}} % {\providecommand\Opt{#3}\ifx\Opt\empty #1\ #2\else \Opt\ #2\fi} % \NewDocumentCommand{\Nameii}{O{} m !O{}} % {\providecommand\Opt{#3}\ifx\Opt\empty #1\ #2\else \Opt\ #2\fi} % |\Namei: | \Namei[Person1]{Family1} [something1]\\[1ex] % |\Nameii:| \Nameii[Person2]{Family2} [something2]%^^A % \else % \NewDocumentCommand {\Namei}{O{} m O{}} % {\providecommand\Opt{#3}\ifx\Opt\empty #1\ #2\else \Opt\ #2\fi} % |\Namei: | \Namei[Person1]{Family1} [something1]\\[1ex] % |\Nameii:| (\LaTeX\ too old)%^^A % \fi % \end{Quote} % \begin{itemize} % \item What happens when we ignore these spaces (\cmd{\Namei})? % \begin{itemize} % \item Subsequent text in brackets always becomes a name argument. % \item We avoid errors arising from unintended spaces. % \item This follows standard \LaTeX\ behavior. % \end{itemize} % % \item What happens when these spaces are significant (\cmd{\Nameii})? % \begin{itemize} % \item Spaces that follow the required argument prevent the final optional argument from being seen as such. % \item Unintended spaces could ``orphan'' final optional arguments. % \end{itemize} % \end{itemize} % % \newpage % % The default behavior can cause problems when using interpolated text in square brackets following a name. We show this using both name interfaces. We simulate first instances of names (Section~\ref{sec:NameControl}), and we suppress name formatting. % % \begingroup % \renewcommand\NamesFormat{} % \renewcommand\MainNameHook{} % \ForgetName[Albert]{Einstein} % \ForgetName{Miyazaki, Hayao} % \begin{itemize} % \item We expect to see the following text: % \BothInfo*{\ShowPattern[Albert]{Einstein}\break % \ShowPattern{Miyazaki, Hayao}} % {\ShowIdxPageref*[Albert]{Einstein}\break % \ShowIdxPageref*{Miyazaki, Hayao}} % \begin{Block}\textls[7]{^^A % Albert Einstein [first] spoke about physics. % Miyazaki Hayao [then] spoke about animation. % Einstein [again] spoke about physics. % Miyazaki [later] spoke about film.} % \end{Block} % % \item We use these macros and get poor results: % \begin{Verbatim}[numbers=none] % \Name[Albert]{Einstein} [first] spoke about physics. % \Name{Miyazaki, Hayao} [then] spoke about animation. % \Name[Albert]{Einstein} [again] spoke about physics. % \Name{Miyazaki, Hayao} [later] spoke about film. % \end{Verbatim} % \begin{Block}\textls[7]{^^A % \Name[Albert]{Einstein} [first] spoke about physics. % \Name{Miyazaki, Hayao} [then] spoke about animation. % \Name[Albert]{Einstein} [again] spoke about physics. % \Name{Miyazaki, Hayao} [later] spoke about film.} % \end{Block} % % \ForgetName[Albert]{Einstein} % \ForgetName{Miyazaki, Hayao} % \item We add explicit spaces or curly braces to get correct results: % \begin{Verbatim}[numbers=none] % \Name[Albert]{Einstein}\ [first] spoke about physics. % \Name{Miyazaki, Hayao}\ [then] spoke about animation. % \Name[Albert]{Einstein}{} [again] spoke about physics. % \Name{Miyazaki, Hayao}{} [later] spoke about film. % \end{Verbatim} % \begin{Block}\textls[7]{^^A % \Name[Albert]{Einstein}\ [first] spoke about physics. % \Name{Miyazaki, Hayao}\ [then] spoke about animation. % \Name[Albert]{Einstein}{} [again] spoke about physics. % \Name{Miyazaki, Hayao}{} [later] spoke about film.} % \end{Block} % \end{itemize} % \begin{Quote} % \begin{Verbatim}[numbers=none] % \begin{nameauth} % \< Einstein & Albert & Einstein & > % \< Miyazaki & & Miyazaki, Hayao & > % \end{nameauth} % \end{Verbatim} % \end{Quote} % \ForgetName[Albert]{Einstein} % \ForgetName{Miyazaki, Hayao} % \begin{itemize} % \item We expect to see the same text as above. % % \item We use these macros and get poor results: % \begin{Verbatim}[numbers=none] % \Einstein [first] spoke about physics. % \Miyazaki [then] spoke about animation. % \Einstein [again] spoke about physics. % \Miyazaki [later] spoke about film. % \end{Verbatim} % \begin{Block}\textls[7]{^^A % \Einstein [first] spoke about physics. % \Miyazaki [then] spoke about animation. % \Einstein [again] spoke about physics. % \Miyazaki [later] spoke about film.} % \end{Block} % % \ForgetName[Albert]{Einstein} % \ForgetName{Miyazaki, Hayao} % \item We add explicit spaces or curly braces to get correct results: % \begin{Verbatim}[numbers=none] % \Einstein\ [first] spoke about physics. % \Miyazaki\ [then] spoke about animation. % \Einstein{} [again] spoke about physics. % \Miyazaki{} [later] spoke about film. % \end{Verbatim} % \begin{Block}\textls[7]{^^A % \Einstein\ [first] spoke about physics. % \Miyazaki\ [then] spoke about animation. % \Einstein{} [again] spoke about physics. % \Miyazaki{} [later] spoke about film.} % \end{Block} % \end{itemize} % \endgroup % % \subsubsection[Affixes]{Affixes Need Commas} % \label{sec:Affix} % % A comma is not a required name element unless used in an \meta{SNN\textbf{,}Affix} pair. When thus used it delimits a Western surname from its affix, an Eastern family name from a personal name, and an ancient name from an affix. % % When a comma appears in a required name argument, each member of the \meta{SNN\textbf{,}Affix} pair is treated as a separate argument. Thus, we say that the comma delimits or segments the name argument. Spaces around the comma are ignored. See Section~\ref{sec:Noexpand} for more information when using macros in name arguments. % \begin{InfoBox} % Regarding an \meta{SNN\textbf{,}Affix} pair, avoid error by applying macros to \meta{SNN} and \meta{Affix} as if they were independent arguments. % \end{InfoBox} % % \begin{Center} % \BothInfo[2ex]{\ShowPattern[Oskar]{Hammerstein, II}\break % \ShowPattern{Louis, XIV}\break % \ShowPattern{Sun, Yat-sen}} % {\ShowIdxPageref*[Oskar]{Hammerstein, II}\break % \ShowIdxPageref*{Louis, XIV}\break % \ShowIdxPageref*{Sun, Yat-sen}} % \ForgetName{Sun, Yat-sen} % \begin{tabular}{ll}\toprule % \rowcolor{nagrey}^^A % \bfseries Text & \bfseries Macro / Arguments\\ % \Name[Oskar]{Hammerstein, II} & |\Name[Oskar]{Hammerstein, II}|\\ % \Name[Oskar]{Hammerstein, II} & |\Name[Oskar]{Hammerstein, II}|\\ % % \rowcolor{nagrey}^^A % \ForgetThis\Name{Louis, XIV} & |\Name{Louis, XIV}|\\ % \rowcolor{nagrey}^^A % \Name{Louis, XIV} & |\Name{Louis, XIV}|\\ % % \Name{Sun, Yat-sen} & |\Name{Sun, Yat-sen}|\\ % \Name{Sun, Yat-sen} & |\Name{Sun, Yat-sen}|\\\bottomrule % \end{tabular} % \end{Center} % % \BothInfo[1.2ex]{\ShowPattern[Oskar]{Hammerstein}[II]} % {\ShowIdxPageref*[Oskar]{Hammerstein}[II]} % Western names with affixes must use \meta{SNN\textbf{,}Affix}, never the obsolete syntax, which is meant for Non-Western names and is discouraged. We get \SkipIndex\Name[Oskar]{Hammerstein}[II] and a bad index entry from, e.g., \cmd{\SkipIndex}\cmd{\Name[Oskar]\{Hammerstein\}[II]}. % % \DescribeMacro{\KeepAffix} % If the name displayed in the text shows both \meta{SNN} and \meta{Affix}, then \cmd{\KeepAffix} turns the space \emph{between} \meta{SNN} and \meta{Affix} into a non-breaking space. \cmd{\KeepAffix}\cmd{\Name\{Louis, XIV\}} will not break between \Name{Louis, XIV} and \ForceFN\FName{Louis, XIV}. All name types that use \meta{Affix} are supported. % % \DescribeMacro{\DropAffix}\leavevmode % If \cmd{\DropAffix} precedes only a Western name, it will suppress the affix after the surname in a first or long instance. We get ``\DropAffix\Name*[Oskar]{Hammerstein, II}'' From |\DropAffix\Name*[Oskar]{Hammerstein, II}|. % % With Non-Western names, the \meta{Affix} in the \meta{SNN\textbf{,}Affix} pair drops automatically in the text for subsequent uses, making \cmd{\DropAffix} redundant. We see that above in the case of \Name*{Louis,XIV}, who becomes \Name{Louis,XIV}. % % \Info*{\small\cmd{\ForceAffix}} Since the macro \cmd{\ForceAffix}, which prints only the affix of subsequent-use Western names, has such a narrow intended use, we cover it in Section~\ref{sec:RomanGeneral}. % % \DescribeMacro{\ShowComma} % In a long name form, \cmd{\ShowComma} forces the display of a comma between a Western name and its affix. % \DescribeMacro{\NoComma} % It works like the \texttt{comma} option on a per-name basis, and only in the text. One uses \cmd{\ShowComma} with older publication styles that separate a Western name and affix with a comma. \cmd{\NoComma} works like the \texttt{nocomma} option in the body text on a per-name basis. % \medskip % % \BothInfo[2.5ex]{\ShowPattern[George S.]{Patton, Jr.}} % {\ShowIdxPageref*[George S.]{Patton, Jr.}} % \begin{tabular}{@{}lll} % With comma: & \ShowComma\LPatton & |\ShowComma\LPatton|\\[1ex] % No comma: & \NoComma\LPatton & |\NoComma\LPatton|\\ % \end{tabular} % \medskip % % Neither \cmd{\ShowComma}, \cmd{\NoComma}, nor their related package options interact with the use of \cmd{\RevComma} and friends (Sections~\ref{sec:Priorities} and~\ref{sec:LastFirst}). % % \subsubsection{Trimming Spaces} % % To get consistent index entries, all \textsf{nameauth} macros that take name arguments trim extra spaces around each name argument, shown in gray below: % \begin{Quote} % \newcommand\gbox{\colorbox{nagrey}{\strut\ \ \strut}} % \bfseries % \cmd{\Name}\texttt{[}\gbox\meta{\color{nared}FNN}\gbox\texttt{]}^^A % \texttt{\{}\gbox\meta{SNN}\gbox\texttt{\color{nared},}\gbox^^A % \meta{\color{nared}Affix}\gbox\texttt{\}}^^A % \texttt{[}\gbox\meta{\color{nared}Alternate}\gbox\texttt{]} % \end{Quote} % We show this in practice while suppressing name formatting: % ^^A % \begin{VerbatimOut}{\jobname.tmp} % No spaces:\\ % \fbox{\strut\Name*[Martin Luther]{King,Jr.}} % \fbox{\strut\Name [Martin Luther]{King,Jr.}} % \fbox{\strut\FName[Martin Luther]{King,Jr.}} % % Spaces:\\ % \fbox{\strut\Name*[ Martin Luther ]{ King , Jr. }} % \fbox{\strut\Name [ Martin Luther ]{ King , Jr. }} % \fbox{\strut\FName[ Martin Luther ]{ King , Jr. }} % \end{VerbatimOut} %^^A % \begin{Quote} % \VerbatimInput[gobble=0]{\jobname.tmp} % \renewcommand*\NamesFormat{} % \renewcommand*\MainNameHook{} % % \BothInfo[3ex]{\ShowPattern[Martin Luther]{King, Jr.}\break % \ShowPattern[ Martin Luther ]{ King , Jr. }} % {\ShowIdxPageref*[Martin Luther]{King, Jr.}\break % \ShowIdxPageref*[ Martin Luther ]{ King , Jr. }} % \input{\jobname.tmp} % \end{Quote} % % We resume name formatting to show names that look the same, but are different. Non-breaking spaces, explicit spaces, thin spaces, and macros that expand to spaces \emph{are not trimmed}. They produce different name patterns, shown below: % \begin{Center}\IndexInactive % \begin{tabular}{lll}\toprule % \rowcolor{nagrey}^^A % \bfseries Text & \bfseries Macro / Arguments & \bfseries Name Pattern\\ % % \Name{foo~bar} & |\Name{foo~bar}| & \ttfamily\ShowPattern{foo~bar} \\ % % \rowcolor{nagrey}^^A % \Name{foo\ bar} & |\Name{foo\ bar}| & \ttfamily\ShowPattern{foo\ bar} \\ % % \Name{foo\space bar} & |\Name{foo\space bar}| & % \ttfamily\ShowPattern{foo\space bar} \\\bottomrule % \end{tabular}\IndexActive % \end{Center} % % For more on uniqueness, see Sections~\ref{sec:NamePatterns} and~\ref{sec:Unique}. Names with macros in their arguments must be sorted with \cmd{\PretagName} (Section~\ref{sec:IndexSort}). % % \subsubsection{Formatting Initials} % % Some publishers are dead-set on having a space between initials. Many designers find that practice to be inelegant at best. [\hyperlink{Bringhurst}{Bringhurst}] wisely advises one to omit spaces between initials. Yet, fighting with one's editor does little good. If a style guide requires spaces, try thin spaces and sorting as below: % % \begin{Block} % \BothInfo[3.5ex]{\ShowPattern[E.\,B.]{White}} % {\ShowIdxPageref*[E.\,B.]{White}} % \begin{Verbatim} % \PretagName[E.\,B.]{White}{White, Elwyn} % \begin{nameauth} % \< White & E.\,B. & White & > % \end{nameauth} % \end{Verbatim} % % \large % \renewcommand*\NamesFormat{} % \renewcommand*\MainNameHook{} % \begin{tabular}{ll} % Thin spaces & % \vrule width 1pt\LWhite[E.\vrule width 1pt\,\vrule width 1ptB.\vrule width 1pt\ \vrule width 1pt]\vrule width 1pt\\\hline % Normal spaces & % \vrule width 1pt\LWhite[E.\vrule width 1pt\ \vrule width 1ptB.\vrule width 1pt\ \vrule width 1pt]\vrule width 1pt\\ % \end{tabular} % \end{Block} % % We used \cmd{\PretagName} to sort this name as: ``White, Elwyn'' to ensure that his index entry is sorted properly. (Section~\ref{sec:IndexInitials}). % % \subsubsection{Name Breakpoints} % % \DescribeMacro{\KeepName} % In longer name forms, \cmd{\KeepName} turns spaces \emph{between} all visible name elements into non-breaking spaces. This macro does not alter spaces \emph{within} name elements with multiple names, such as French and German forenames, as well as Spanish surnames. \cmd{\KeepName} works with all name types. % \BothInfo[5ex]{\ShowPattern[Sandra Day]{O'Connor}} % {\ShowIdxPageref*[Sandra Day]{O'Connor}} % \begin{itemize} % \item \Name[Sandra Day]{O'Connor} |\Name[Sandra Day]{O'Connor}| has two points where the name can break: after \FName[Sandra Day]{O'Connor}[Sandra] and after \FName[Sandra Day]{O'Connor}[Day]. % % \item \KeepName\Name*[Sandra Day]{O'Connor} |\KeepName\Name*[Sandra Day]{O'Connor}| has one point where the name can break: after % \FName[Sandra Day]{O'Connor}[Sandra]. % \end{itemize} % % \subsubsection{Full Stop Detection} % % Names may use full stops in some cases, including the following: % \begin{itemize} % \item When forenames are abbreviated as initials: \LJRIV\ is \SJRIV. % \BothInfo{\ShowPattern[George S.]{Patton, Jr.}\break % \ShowPattern[J.D.]{Rockefeller, IV}\break % \ShowPattern[Marcus]{Welby,M.D.}} % {\ShowIdxPageref*[George S.]{Patton, Jr.}\break % \ShowIdxPageref*[J.D.]{Rockefeller, IV}\break % \ShowIdxPageref*[Marcus]{Welby,M.D.}} % % \item After affixes: ``Jr''. (junior), ``Sr''. (senior), ``d.\,Ä.'' (\DE{der Ältere}), ``d.\,J.'' (\DE{der Jüngere}) etc.: \LPatton. % % \item In some contexts, after degrees like ``M.D.'' (\LA{Medicinae Doctor}), J.D. (\LA{Juris Doctor}), Ph.D. (\LA{Philosophiae Doctor}), etc.: \Name[Marcus]{Welby,M.D.}. % \end{itemize} % % The printed names above end with a full stop, and a full stop follows them in the text. The \textsf{nameauth} macros that print names in the text check if the name ends with a full stop. If that is true, and if the lookahead token contains a full stop, they gobble the lookahead token. Below we see how this works in greater detail: % \begin{Quote} % \begin{Verbatim} % \begin{nameauth} % \< MLK & Martin Luther & King, Jr. & > % \end{nameauth} % \end{Verbatim} % \end{Quote} % \negbigskip % % \ForgetName[Martin Luther]{King, Jr.} % \BothInfo[5.5ex]{\ShowPattern[Martin Luther]{King, Jr.}} % {\ShowIdxPageref*[Martin Luther]{King, Jr.}} % \begin{itemize}[leftmargin=3cm]\small % \item[Full stop gobbled:] First use of a name; the last name element has a full stop and is followed by one: % \Name[Martin Luther]{King, Jr.}.\\ % |\Name[Martin Luther]{King, Jr.}.| or |\MLK.| % % \item[Full stop gobbled:] Long use of a name; the last name element has a full stop and is followed by one: % \LMLK.\\ % |\Name*[Martin Luther]{King, Jr.}.| or |\LMLK.| % % \item[Full stop gobbled:] Using \meta{alternate} with long Western names will not affect the last element: % \LMLK[Dr. M.L.].\\ % |\Name*[Martin Luther]{King, Jr.}[Dr. M.L.].|\\ % or |\LMLK[Dr. M.L.].| % % \item[Full stop gobbled:] Using \meta{alternate} with short Western names will affect the last element: % \SMLK[Dr. M.L.].\\ % |\FName[Martin Luther]{King, Jr.}[Dr. M.L.].|\\ % or |\SMLK[Dr. M.L.].| % % \item[Full stop remains:] Affix drops in subsequent uses: % \MLK.\\ % |\Name[Martin Luther]{King, Jr.}.| or |\MLK.| % % \item[Full stop remains:] Affix forced to drop in first or long uses: % \DropAffix\LMLK.\\ % |\DropAffix\Name*[Martin Luther]{King, Jr.}.|\\ % or |\DropAffix\LMLK.| % \end{itemize} % % Curly braces can defeat full stop detection and create a new, unique name (Section~\ref{sec:Unique}), similar to using spaces between a name and a full stop: % \ExcludeName[Martin Luther]{King, {Jr.}} % \ExcludeName[Martin Luther]{King, {Jr}.} % % \BothInfo[5ex]{\ShowPattern[Martin Luther]{King, Jr.}\break % \ShowPattern[Martin Luther]{King, {Jr.}}\break % \ShowPattern[Martin Luther]{King, {Jr}.}} % {\ShowIdxPageref*[Martin Luther]{King, Jr.}\break % \ShowIdxPageref*[Martin Luther]{King, {Jr.}}\break % \ShowIdxPageref*[Martin Luther]{King, {Jr}.}} % \begin{itemize}[leftmargin=3cm]\small % \item[Full stop remains:] The whole name is within a group, but the full stop is outside of the group: % {\Name*[Martin Luther]{King, Jr.}}.\\ % |{\Name*[Martin Luther]{King, Jr.}}.| or |{\LMLK}.| % % \item[Full stop gobbled:] Both name and full stop are in the group: % {\LMLK.}\\ % |{\Name*[Martin Luther]{King, Jr.}.}| or |{\LMLK.}| % % \item[Full stop remains:] Grouping tokens in \meta{Affix} create a new name, break full stop detection (full stop in group): % \Name*[Martin Luther]{King, {Jr.}}.\\ % |\Name*[Martin Luther]{King, {Jr.}}.| % % \item[Full stop gobbled:] Grouping tokens in \meta{Affix} create a new name, do not break detection (full stop outside of group): % \Name*[Martin Luther]{King, {Jr}.}.\\ % |\Name*[Martin Luther]{King, {Jr}.}.| % % \item[Full stop remains:] There is intervening space between the name and the full stop: % \Name*[Martin Luther]{King, Jr.} .\\ % |\Name*[Martin Luther]{King, Jr.} .| % % \item[Full stop gobbled:] Shorthands ignore spaces after them: % \LMLK .\\ % |\LMLK .| % % \item[Full stop remains:] Shorthands with optional arguments do not ignore intervening space: % \LMLK[Dr. M.L.] .\\ % |\LMLK[Dr. M.L.] .| % \end{itemize} % % It is rare to see initials in Eastern names or ancient names. Nevertheless, if one had a Non-Western name form that terminated with a full stop, similar rules would apply. We demonstrate this below, but do not index the names: % \IndexInactive % \begin{itemize}[leftmargin=3cm]\small % \item[Full stop gobbled:] First use of a name; the last name element has a full stop and is followed by one: % \Name{Full, Stop.}.\\ % |\Name{Full, Stop.}.| % % \item[Full stop gobbled:] Long use of a name; the last name element has a full stop and is followed by one: % \Name*{Full, Stop.}.\\ % |\Name*{Full, Stop.}.| % % \item[Full stop gobbled:] Using \meta{alternate} with long Non-Western names will affect the last element: % \Name*{Full, Non-Stop}[Cessation.].\\ % |\Name*{Full, Non-Stop}[Cessation.].| % \end{itemize} % \IndexActive % % In the other cases for Non-Western names, the full stop would not be gobbled because it would not terminate the displayed name. % % \begin{Quotation}{\MLK[Dr. Martin Luther]} % {\Title{Stride Towards Freedom} (1958)} % We believe firmly in the revelation of God in Jesus Christ. I can % see no conflict between our devotion to Jesus Christ and our present % action. In fact, I can see a necessary relationship. If one is truly % devoted to the religion of Jesus he will seek to rid the earth of social % evils. The gospel is social as well as personal. % \IndexName{Jesus, Christ} % \index{civil rights leaders, quotes of\noexpand\string|hyperpage} % \index{theologians, quotes of\noexpand\string|hyperpage} % \end{Quotation} % % \subsubsection[Macros in Name Args]{Macros in Name Arguments} % % As we discuss specialized topics like language-specific needs and advanced formatting, we will encounter macros in name arguments with greater frequency. It would be good to get some general tips on how to handle such macros. % % \begin{itemize} % \item Missing square brackets or curly braces can cause errors like ``\texttt{Paragraph ended}'' and ``\texttt{Missing} \meta{grouping token} \texttt{inserted.}'' % % \item Alternate formatting (Section~\ref{sec:AltFormat}) helps to avoid potential problems, e.g., when using \cmd{\CapThis}. % % \item Use \cmd{\noexpand}\meta{macro} in name macro arguments as a best practice. % % \item Macros used in name arguments must be defined either in the preamble or in the outermost document scope to avoid errors. % % \item Boolean flags (\texttt{\textbackslash if}\meta{flag}) used in formatting hooks must be defined either in the preamble or in the outermost document scope. % % \item The \cmd{\global} modifier does not work with \cmd{\newif} and \cmd{\newcommand}. Yet \cmd{\global} can precede the use of a macro defined with \cmd{\newcommand}. \Title{The \TeX book}, pages 275--277, shows what \cmd{\global} can and cannot do. See more about this issue and \cmd{\newcommand} on \href{https://tex.stackexchange.com/questions/51733/global-renewcommand-equivalent-of-global-def}{\bfseries this page}. % % \item Below we show general aspects of scoping to apply them to this package: %^^A % \begin{VerbatimOut}{\jobname.tmp} % \newif\ifCondA % \newcommand\MacroA{} % \begingroup % \newif\ifCondB % \global\newif\ifCondC % \global\newcommand\MacroB{} % \newcommand\MacroC{\def\MacroD{}} % \global\MacroC % \global\CondAtrue % \endgroup % % \begin{itemize}[rightmargin=0pt] % \item \ifdefined\CondAtrue % \texttt{\textbackslash ifCondA} is defined globally.\else % \texttt{\textbackslash ifCondA} is not defined.\fi % % \item \ifdefined\MacroA % \cmd{\MacroA} is defined globally.\else % \cmd{\MacroA} is not defined.\fi % % \item \ifdefined\CondBtrue % \texttt{\textbackslash ifCondB} is defined globally.\else % \texttt{\textbackslash ifCondB} is defined locally.\fi % % \item \ifdefined\CondCtrue % \texttt{\textbackslash ifCondC} is defined globally. \else % \texttt{\textbackslash ifCondC} is defined locally. \fi % No \cmd{\global}\cmd{\newif} allowed. % % \item \ifdefined\MacroB \cmd{\MacroB} is defined globally. \else % \cmd{\MacroB} is defined locally. \fi % No \cmd{\global}\cmd{\newcommand} allowed. % % \item \ifdefined\MacroC \cmd{\MacroC} is defined globally.\else % \cmd{\MacroC} is defined locally.\fi % % \item \ifdefined\MacroD \cmd{\MacroD} is defined globally. \else % \cmd{\MacroD} is defined locally. \fi % The \cmd{\global} before \cmd{\MacroB} affects the \cmd{\def} inside \cmd{\MacroC}. % % \item \ifCondA \texttt{\textbackslash ifCondA} is true due % to \cmd{\global}. \else % \texttt{\textbackslash ifCondA} is false. \fi % Global assignment works, not global instantiation. % \end{itemize} % \end{VerbatimOut} %^^A % \begin{Quote} % \VerbatimInput[gobble=0,lastline=10]{\jobname.tmp} % % \input{\jobname.tmp} % \end{Quote} % \end{itemize} % % \begin{InfoBox} % Any macro that is used in the argument of a naming macro must be defined in all scopes in which that name is used. The name patterns themselves are global, but macros in name arguments are not guaranteed to be so. % \end{InfoBox} % % \newpage % % \subsubsection[Unicode, General]{Active Unicode Characters} % \label{sec:Unicode} % % Both \texttt{xelatex} and \texttt{lualatex} support Unicode natively. Using the \textsf{fontenc} package with the \texttt{T1} option allows \texttt{latex} and \texttt{pdflatex} to use many Unicode characters via active characters that ``secretly'' invoke macros. Use \cmd{\PretagName} to sort names with these characters (Section~\ref{sec:IndexSort}). % % Below we group characters that are supported in \texttt{pdflatex} without additional modification by accents and diacritical marks. We align similar letters, so that one gets a better idea of what letters take what accents. % % \newcommand\SP[1]{\phantom{#1}} % \newcommand\Cell[1]{\hbox to 1.1em {\hfil#1\hfil}} % \begin{center}\large % \begin{tabular}{ll}\toprule % \rowcolor{nagrey}^^A % \bfseries Capitals & \strut\\ % % acute & \Cell{Á}\Cell{Ć}\Cell{ }\Cell{É}\Cell{Ǵ}\Cell{H}\Cell{Í}^^A % \Cell{J}\Cell{K}\Cell{Ĺ}\Cell{Ń}\Cell{Ó}\Cell{Ŕ}\Cell{Ś}^^A % \Cell{ }\Cell{Ú}\Cell{ }\Cell{Ý}\Cell{Ź}\strut\\ % % \rowcolor{nagrey}^^A % grave & \Cell{À}\Cell{ }\Cell{ }\Cell{È}\Cell{ }\Cell{ }\Cell{Ì}^^A % \Cell{ }\Cell{ }\Cell{ }\Cell{ }\Cell{Ò}\Cell{ }\Cell{ }^^A % \Cell{ }\Cell{Ù}\Cell{ }\Cell{ }\Cell{ }\strut\\ % % circumflex & \Cell{Â}\Cell{Ĉ}\Cell{ }\Cell{Ê}\Cell{Ĝ}\Cell{Ĥ}\Cell{Î}^^A % \Cell{Ĵ}\Cell{ }\Cell{ }\Cell{ }\Cell{Ô}\Cell{ }\Cell{Ŝ}^^A % \Cell{ }\Cell{Û}\Cell{Ŵ}\Cell{Ŷ}\Cell{ }\strut\\ % % \rowcolor{nagrey}^^A % tilde & \Cell{Ã}\Cell{ }\Cell{ }\Cell{ }\Cell{ }\Cell{ }\Cell{Ĩ}^^A % \Cell{ }\Cell{ }\Cell{ }\Cell{Ñ}\Cell{Õ}\Cell{ }\Cell{ }^^A % \Cell{ }\Cell{Ũ}\Cell{ }\Cell{ }\Cell{ }\strut\\ % % diaeresis\footnotemark % & \Cell{Ä}\Cell{ }\Cell{ }\Cell{Ë}\Cell{ }\Cell{ }\Cell{Ï}^^A % \Cell{ }\Cell{ }\Cell{ }\Cell{ }\Cell{Ö}\Cell{ }\Cell{ }^^A % \Cell{ }\Cell{Ü}\Cell{ }\Cell{Ÿ}\Cell{ }\strut\\ % % \rowcolor{nagrey}^^A % cedilla & \Cell{ }\Cell{Ç}\Cell{ }\Cell{ }\Cell{Ģ}\Cell{ }\Cell{ }^^A % \Cell{ }\Cell{Ķ}\Cell{Ļ}\Cell{Ņ}\Cell{ }\Cell{Ŗ}\Cell{Ş}^^A % \Cell{Ţ}\Cell{ }\Cell{ }\Cell{ }\Cell{ }\strut\\ % % macron & \Cell{Ā}\Cell{ }\Cell{ }\Cell{Ē}\Cell{Ḡ}\Cell{ }\Cell{Ī}^^A % \Cell{ }\Cell{ }\Cell{ }\Cell{ }\Cell{Ō}\Cell{ }\Cell{ }^^A % \Cell{ }\Cell{Ū}\Cell{Ǣ}\Cell{Ȳ}\Cell{ }\strut\\ % % \rowcolor{nagrey}^^A % breve & \Cell{Ă}\Cell{ }\Cell{ }\Cell{ }\Cell{Ğ}\Cell{ }\Cell{Ĭ}^^A % \Cell{ }\Cell{ }\Cell{ }\Cell{ }\Cell{Ŏ}\Cell{ }\Cell{ }^^A % \Cell{ }\Cell{Ŭ}\Cell{ }\Cell{ }\Cell{ }\strut\\ % % dot/dotless & \Cell{Ḃ}\Cell{Ċ}\Cell{ }\Cell{Ė}\Cell{Ġ}\Cell{ }\Cell{İ}^^A % \Cell{ }\Cell{ }\Cell{ }\Cell{ }\Cell{ }\Cell{ }\Cell{ }^^A % \Cell{ }\Cell{ }\Cell{ }\Cell{ }\Cell{Ż}\strut\\ % % \rowcolor{nagrey}^^A % ogonek & \Cell{Ą}\Cell{ }\Cell{ }\Cell{Ę}\Cell{ }\Cell{ }\Cell{Į}^^A % \Cell{ }\Cell{ }\Cell{ }\Cell{ }\Cell{Ǫ}\Cell{ }\Cell{ }^^A % \Cell{ }\Cell{Ų}\Cell{ }\Cell{ }\Cell{ }\strut\\ % % caron & \Cell{Ǎ}\Cell{Č}\Cell{Ď}\Cell{Ě}\Cell{Ǧ}\Cell{ }\Cell{Ǐ}^^A % \Cell{ }\Cell{Ǩ}\Cell{Ľ}\Cell{Ň}\Cell{Ǒ}\Cell{Ř}\Cell{Š}^^A % \Cell{Ť}\Cell{Ǔ}\Cell{ }\Cell{ }\Cell{Ž}\strut\\ % % \rowcolor{nagrey}^^A % various & \Cell{Å}\Cell{Æ}\Cell{Ð}(eth)\Cell{Đ}(D stroke)\Cell{IJ}^^A % \Cell{Ł}\Cell{Ŋ}\Cell{Ø}\Cell{Œ}\Cell{Ő}\Cell{Ů}\Cell{Ű}^^A % \Cell{Ș}\Cell{Ț}\Cell{Þ}\strut\\\bottomrule % \end{tabular} % \footnotetext{A diaeresis mark is one way to indicate a sound change (\textit{Umlaut}). German originally used a superscript \textsf{e} over \textsf{a}, \textsf{o}, and \textsf{u}. The cursive form of \textsf{e} simplified to a diaeresis in the 1800s. A diaeresis also signals pronouncing a diphthong or digraph as two monophthongs, e.g., ``noëtic''.} % \end{center} % % \begin{center}\large % \begin{tabular}{ll}\toprule % \rowcolor{nagrey}^^A % \bfseries Lowercase & \strut\\ % % acute & \Cell{á}\Cell{ć}\Cell{ }\Cell{é}\Cell{ǵ}\Cell{ }\Cell{í}^^A % \Cell{ }\Cell{ }\Cell{ĺ}\Cell{ń}\Cell{ó}\Cell{ŕ}\Cell{ś}^^A % \Cell{ }\Cell{ú}\Cell{ }\Cell{ý}\Cell{ź}\strut\\ % % \rowcolor{nagrey}^^A % grave & \Cell{à}\Cell{ }\Cell{ }\Cell{è}\Cell{ }\Cell{ }\Cell{ì}^^A % \Cell{ }\Cell{ }\Cell{ }\Cell{ }\Cell{ò}\Cell{ }\Cell{ }^^A % \Cell{ }\Cell{ù}\Cell{ }\Cell{ }\Cell{ }\strut\\ % % circumflex & \Cell{â}\Cell{ĉ}\Cell{ }\Cell{ê}\Cell{ĝ}\Cell{ĥ}\Cell{î}^^A % \Cell{ĵ}\Cell{ }\Cell{ }\Cell{ }\Cell{ô}\Cell{ }\Cell{ŝ}^^A % \Cell{ }\Cell{û}\Cell{ŵ}\Cell{ŷ}\Cell{ } \strut\\ % % \rowcolor{nagrey}^^A % tilde & \Cell{ã}\Cell{ }\Cell{ }\Cell{ }\Cell{ }\Cell{ }\Cell{ĩ}^^A % \Cell{ }\Cell{ }\Cell{ }\Cell{ñ}\Cell{õ}\Cell{ }\Cell{ }^^A % \Cell{ }\Cell{ũ}\Cell{ }\Cell{ }\Cell{ }\strut\\ % % diaeresis & \Cell{ä}\Cell{ }\Cell{ }\Cell{ë}\Cell{ }\Cell{ }\Cell{ï}^^A % \Cell{ }\Cell{ }\Cell{ }\Cell{ }\Cell{ö}\Cell{ }\Cell{ }^^A % \Cell{ }\Cell{ü}\Cell{ }\Cell{ÿ}\Cell{ }\strut\\ % % \rowcolor{nagrey}^^A % cedilla & \Cell{ }\Cell{ç}\Cell{ }\Cell{ }\Cell{ģ}\Cell{ }\Cell{ }^^A % \Cell{ }\Cell{ķ}\Cell{ļ}\Cell{ņ}\Cell{ }\Cell{ŗ}\Cell{ş}^^A % \Cell{ţ}\Cell{ }\Cell{ }\Cell{ }\Cell{ }\strut\\ % % macron & \Cell{ā}\Cell{ }\Cell{ }\Cell{ē}\Cell{ḡ}\Cell{ }\Cell{ī}^^A % \Cell{ }\Cell{ }\Cell{ }\Cell{ }\Cell{ō}\Cell{ }\Cell{ }^^A % \Cell{ }\Cell{ū}\Cell{ǣ}\Cell{ȳ}\Cell{ }\strut\\ % % \rowcolor{nagrey}^^A % breve & \Cell{ă}\Cell{ }\Cell{ }\Cell{ }\Cell{ğ}\Cell{h}\Cell{ĭ}^^A % \Cell{ }\Cell{ }\Cell{ }\Cell{ }\Cell{ŏ}\Cell{ }\Cell{ }^^A % \Cell{ }\Cell{ŭ}\Cell{ }\Cell{ }\Cell{ }\strut\\ % % dot/dotless & \Cell{ḃ}\Cell{ċ}\Cell{ }\Cell{ė}\Cell{ġ}\Cell{ }\Cell{ı}^^A % \Cell{ }\Cell{ }\Cell{ }\Cell{ }\Cell{ }\Cell{ }\Cell{ }^^A % \Cell{ }\Cell{ }\Cell{ }\Cell{ }\Cell{ż}\strut\\ % % \rowcolor{nagrey}^^A % ogonek & \Cell{ą}\Cell{ }\Cell{ }\Cell{ę}\Cell{ }\Cell{ }\Cell{į}^^A % \Cell{ }\Cell{ }\Cell{ }\Cell{ }\Cell{ǫ}\Cell{ }\Cell{ }^^A % \Cell{ }\Cell{ų}\Cell{ }\Cell{ }\Cell{ }\strut\\ % % caron & \Cell{ǎ}\Cell{č}\Cell{ď}\Cell{ě}\Cell{ǧ}\Cell{ }\Cell{ǐ}^^A % \Cell{ǰ}\Cell{ǩ}\Cell{ľ}\Cell{ň}\Cell{ǒ}\Cell{ř}\Cell{š}^^A % \Cell{ť}\Cell{ǔ}\Cell{ }\Cell{ }\Cell{ž}\strut\\ % % \rowcolor{nagrey}^^A % various & \Cell{å}\Cell{æ}\Cell{ð}\Cell{đ}\Cell{ij}\Cell{ł}\Cell{ŋ}^^A % \Cell{ø}\Cell{œ}\Cell{ő}\Cell{ů}\Cell{ű}\Cell{ș}\Cell{ß}^^A % \Cell{ț}\Cell{þ}\hspace{5.5em}\strut\\\bottomrule % \end{tabular} % \end{center} % % More Unicode characters can be made available when using fonts with TS1 glyphs (pages 455--463 in \Title{The Latex Companion}). Compare \href{https://tug.ctan.org/info/symbols/comprehensive/}{\bfseries this page} or type either \texttt{texdoc comprehensive}, \texttt{texdoc symbols-A4}, or \texttt{texdoc symbols-letter} for more information. % % When using a font with TS1 glyphs, the following preamble snippet is an example of how one might add more Unicode characters, such as a long s (\LA{s-medialis}): % \begin{Quote} % \begin{Verbatim} % \usepackage[utf8]{inputenc} % For older TL releases % \usepackage[TS1,T1]{fontenc} % \usepackage{lmodern}% Contains TS1 glyph 115 % \usepackage{newunicodechar} % \DeclareTextSymbolDefault{\textlongs}{TS1} % \DeclareTextSymbol{\textlongs}{TS1}{115} % \newunicodechar{ſ}{\textlongs} % % In Congreſs, July 4, 1776 % \end{Verbatim} % % In Congreſs, July 4, 1776 % \end{Quote} % % \subsubsection[Unicode, Fragility]{Fragility of Active Unicode} % % This topic can affect different issues: % \begin{enumerate} % \item \cmd{\CapThis} does not cause errors because we check for an active Unicode character at the beginning of a name element. Macros in name arguments may need alternate formatting. See also Sections~\ref{sec:CapParticles} and~\ref{sec:AltCaps}. % % \item In older \TeX\ distributions, names with active Unicode characters could expand differently in the index if the indexing macros were written first to the \texttt{aux} file. This wasmitigated since 2018. % % \item If some of the macros represented by active characters get redefined, then both the names and their patterns that contain such characters may change unexpectedly, affecting both text and index. % \end{enumerate} % % \TeX\ macros that partition their arguments can break active Unicode characters quite easily, as we show here with this delimited macro: % \begin{Quote} % \begin{Verbatim}[numbers=none] % \def\Breaker#1#2#3!{<#1#2><#3>} % \def\Atsign{@} % \def\AtAt{\Atsign\Atsign} % \end{Verbatim} % \end{Quote} % The macro \cmd{\Breaker} will take an arbitrary stream of tokens as an argument until it terminates with a bang, which is a delimiter. It puts the first token in |#1|. The second goes in |#2|, while the third gets everything up to the bang. % \begin{Center} % \def\Breaker#1#2#3!{<#1#2><#3>} % \def\Atsign{@} % \def\AtAt{\Atsign\Atsign} % \begin{tabular}{llll}\toprule % \rowcolor{nagrey}^^A % \bfseries Argument & \bfseries Macro & \bfseries Engine & \bfseries Result\\ % % |abcde| & |\Breaker abcde!| & (any) & \Breaker abcde!\\ % |{æ}bcde| & |\Breaker {æ}bcde!| & (any) & \Breaker {æ}bcde!\\ % |\ae bcde| & |\Breaker \ae bcde!| & (any) & \Breaker \ae bcde!\\ % |a\AtAt bcde| & |\Breaker a\AtAt bcde!| & (any) & \Breaker a\AtAt bcde!\\ % % \rowcolor{nagrey}^^A % |æbcde| & |\Breaker æbcde!| & \texttt{xelatex} & <æb>\\ % \rowcolor{nagrey}^^A % |æbcde| & |\Breaker æbcde!| & \texttt{lualatex} & <æb>\\ % |æbcde| & |\Breaker æbcde!| & \texttt{pdflatex} & \Breaker æbcde!\\ % |æbcde| & |\Breaker æbcde!| & \texttt{latex} & \Breaker æbcde!\\ % \bottomrule % \end{tabular} % \end{Center} % % Here is why the first two glyphs, or the first macro and glyph, are grouped together in |#1#2| below, and how this affects \textsf{nameauth}: % \begin{itemize} % \item The letter \texttt{a} is one argument, and \texttt{b} is the second. % \item Since \texttt{\{æ\}} is in a group, it is one argument, and \texttt{b} is the second. % \item The macro \cmd{\ae} also is one argument that prints æ, and \texttt{b} is the second. % \item The letter \texttt{a} is one argument, and \cmd{\AtAt} is one argument that prints @@. But if it were evaluated or written to a file at some point during its expansion, for the purposes of name arguments in \textsf{nameauth}, something unexpected could occur. % \item Both \texttt{xelatex} and \texttt{lualatex} treat the Unicode letter \texttt{æ} as one argument, with \texttt{b} as the second. % \item In \texttt{latex} and \texttt{pdflatex}, however, \texttt{æ} is an active Unicode control sequence that uses two arguments all by itself. It fills up |#1#2|. The rest of the input is in |#3|. % \item Any active Unicode character where this |#1#2| pair is divided into |#1| and |#2| will produce one of two errors: \texttt{Unicode char \dots not set up for LaTeX} or \texttt{Argument of \textbackslash UTFviii@two@octets has an extra \}}. % \end{itemize} % % Starting on page \pageref{page:Caps} we show how to test if \cmd{\Umathchar} is not defined. If so, we check if the leading token of the argument matches the start of an active Unicode control sequence. If \cmd{\@car}\meta{test}\cmd{\@nil} is equal to \cmd{\@car ß} \cmd{\@nil} we capitalize |#1#2|, otherwise just |#1|. Should |#1| be a protected macro or something that does not expand to a sequence of letters, use \cmd{\AltCaps} (Section~\ref{sec:AltFeatures}). % % \ReturnLink % % \begin{Quotation}{\Linc} % {\Title{Gettysburg Address} (19 November 1863)} % Four score and seven years ago our fathers brought forth on this % continent, a new nation, conceived in Liberty, and dedicated to the % proposition that all men are created equal. % % Now we are engaged in a great civil war, testing whether that nation, % or any nation so conceived and so dedicated, can long endure. We are met % on a great battle-field of that war. We have come to dedicate a portion % of that field, as a final resting place for those who here gave their % lives that that nation might live. It is altogether fitting and proper % that we should do this. % % But, in a larger sense, we can not dedicate\,---\,we can not % consecrate\,---\,we can not hallow\,---\,this ground. The brave men, % living and dead, who struggled here, have consecrated it, far above our % poor power to add or detract. The world will little note, nor long % remember what we say here, but it can never forget what they did here. % It is for us the living, rather, to be dedicated here to the unfinished % work which they who fought here have thus far so nobly advanced. It is % rather for us to be here dedicated to the great task remaining before % us\,---\,that from these honored dead we take increased devotion to that % cause for which they gave the last full measure of devotion\,---\,that % we here highly resolve that these dead shall not have died in % vain\,---\,that this nation, under God, shall have a new birth of % freedom\,---\,and that government of the people, by the people, for the % people, shall not perish from the earth. % \index{politicians, quotes of\noexpand\string|hyperpage} % \end{Quotation} % % \newpage % % \section{Language Topics} % \label{sec:Lang} % % Here we cover technical issues related to the use of names in various languages and cultures. We draw on material from Sections~\ref{sec:DataTagHooks} and~\ref{sec:Formatting}. We also make use of the debugging macros in the next section. Although we show how non-English names are represented in English, this material can apply to other language standards. % % \subsection[Active Characters]{Caveats with Active Characters} % % When using active characters, specific characters have been given the category code of a macro or control sequence in order to represent them in the classical regime of \textsf{latex} and \textsf{pdflatex}. Active characters and macros generate different names, even though the output on the page looks the same. % % Active characters affect name patterns and index sorting, depending on the \LaTeX\ engine being used. One finds more technical details on the matter in Section~\ref{sec:Unicode}. We use \cmd{\PretagName} (Section~\ref{sec:IndexSort}) to get correct sorting and \cmd{\SkipIndex} (Section~\ref{sec:IdxPrefix}) to suppress bogus index entries: % \begin{enumerate}\small % \item \Name*{Æthelred, II}\dotfill |\Name*{Æthelred, II}| % \PatInfo*{\ShowPattern{Æthelred, II} \textrm{(1)}\break % \ShowPattern{\AE thelred, II} \textrm{(2)}\break % \ShowPattern{Bo\"ethius} \textrm{(3)}\break % \ShowPattern{Boëthius} \textrm{(4)}\break % \ShowPattern{Bo{\"e}thius} \textrm{(5)}} % % \item[] We have seen this name earlier, as the formatting shows.\footnote{Regarding the margin note that shows name patterns, with \texttt{pdflatex} and \texttt{latex}, in \texttt{\ShowPattern{Æthelred, II}} the glyphs \texttt{ÃĘ} correspond to \cmd{\IeC\{}\cmd{\AE\}}. Likewise in \texttt{\ShowPattern{Boëthius}} the glyphs \texttt{Ãń} correspond to \cmd{\IeC\{}\cmd{\"e\}}. The active Unicode character is being detokenized and its control sequence is interpreted as two glyphs. This is a result of using \textsf{inputenc} and \textsf{fontenc}.} % % \item[] We sort this with |\PretagName{Æthelred, II}{Aethelred, 2}| % % \item \SkipIndex\Name{\AE thelred, II}\dotfill |\SkipIndex\Name{\AE thelred, II}| % % \item[] This name is new, as the formatting shows us. It looks like the name above, but its control pattern differs by the macro \cmd{\AE}. % % \item[] We get a different index entry, regardless of how we sort it. % % \item \Name{Bo\"ethius}\dotfill |\Name{Bo\"ethius}| % % \item[] This new name uses |\"e| to display a lowercase e with a diaeresis. % % \item[] We sort it with |\PretagName{Bo\"ethius}{Boethius}|. % % \item \SkipIndex\Name{Boëthius}\dotfill |\SkipIndex\Name{Boëthius}| % % \item[] This name differs by the character ë. It cannot have the same index entry as \Name{Bo\"ethius} above. % % \item \SkipIndex\Name{Bo{\"e}thius}\dotfill |\SkipIndex\Name{Bo{\"e}thius}| % % \item[] Yet another different name by virtue of grouping tokens (Section~\ref{sec:Unique}). The index entry for this one is again different. % \end{enumerate} % % \begin{Quotation}{\Name{Bo\"ethius}\IndexRef[Anic. Manl.]{Severinus Boethius}{Bo\"ethius} (\Name[Anic. Manl.]{Severinus Boethius})} % {\Title{On the Consolation of Philosophy} IV.III (523 \textsc{ad})} % For since good and bad, and likewise reward and punishment, are contraries, it necessarily follows that, corresponding to all that we see accrue as reward of the good, there is some penalty attached as punishment of evil. As, then, righteousness itself is the reward of the righteous, so wickedness itself is the punishment of the unrighteous. % \index{theologians, quotes of\noexpand\string|hyperpage} % \index{philosophers, quotes of\noexpand\string|hyperpage} % \end{Quotation} % \newpage % % \subsection{Hyphenation} % \label{sec:HyphNames} % % Unlike English standards up to the middle twentieth century, modern English conventions encourage that names of non-English origin can and should be hyphenated to reflect their cultural origins. For example, even with place names, modern English prefers German \emph{Mainz} over the older English form \emph{Mayence}. With \textsf{nameauth}, one can accommodate names from different cultures by using optional hyphens or packages like \textsf{babel} and \textsf{polyglossia}. % % \subsubsection*{\hfil Default Hyphenation} % % \PatInfo*{\ShowPattern[John]{Strietelmeier}}^^A % Here we show potential issues that can arise when dealing with default English hyphenation. We get the name of a deceased, yet long-time, influential professor at Valparaiso University whose last name is of German origin, to hyphenate poorly.\footnote{Not shown in these examples, we use \cmd{\textls} from \textsf{microtype} to ensure bad breaks. We omit all forms of this name from the index except for \cmd{\Name[John]\{}\cmd{\noexpand}\cmd{\de\{Strietelmeier\}\}} because we use \textsf{babel}-related macros.} % \begin{Quote} % \begin{Verbatim} % In English, some names come from other cultures. Names like % \Name[John]{Strietelmeier} can break badly in some cases. % \end{Verbatim} % % \IndexName[John]{\noexpand\de{Strietelmeier}} % \textls[20]{In English, some names come from other cultures. % Names like \SkipIndex\Name[John]{Strietelmeier} can break badly % in some cases.} % \end{Quote} % % \subsubsection*{\hfil Discretionary Hyphens} % % \PatInfo*{\ShowPattern[John]{Strie\-tel\-meier}}^^A % We now use a different name from the name above. Even though it may look the same in the text, using discretionary hyphens will cause it to have a different index entry. As a result, one must use discretionary hyphens consistently in the macro arguments to avoid creating different names and index entries. Nevertheless, this name breaks properly.\footnote{Here again, we omit \cmd{\Name[John]\{Strie\textbackslash-tel\textbackslash-meier\}} from the index.} % \begin{Quote} % \begin{Verbatim} % In English, some names come from other cultures. Names like % \Name[John]{Strie\-tel\-meier} can break badly in some cases. % \end{Verbatim} % % \IndexName[John]{\noexpand\de{Strietelmeier}} % \textls[20]{In English, some names come from other cultures. % Names like \SkipIndex\Name[John]{Strie\-tel\-meier} % can break badly in some cases.} % \end{Quote} % % \subsubsection*{\hfil Language Packages} % % \Info*{Name patterns and index entries are too big for the margin.}^^A % Here we use macros in name arguments that can work with either \textsf{babel} or \textsf{polyglossia}.\footnote{For best results, one should consult the documentation for \textsf{babel} and \textsf{polyglossia}.} % This approach has some caveats when using the macro \cmd{\CapThis}. Since the leading element of \meta{SNN} is a macro, using \cmd{\CapThis} would halt \LaTeX\ with errors unless we used alternate formatting (Section~\ref{sec:AltFormat}). Related issues appear in Sections~\ref{sec:NameParticles} and \ref{sec:Noexpand}, showing ways to mitigate possible errors. % % \NameArgWarning % % \newpage % % \ifdefined\NameauthDoTestFiles \edef\NameauthTestFile{test05_01.tex}\else % \edef\NameauthTestFile{\jobname.tmp}\fi %^^A % \begin{VerbatimOut}{\NameauthTestFile} % \documentclass{article} % % \newcommand\nolangs{} % Do not load the language packages via compat.tex % \input{compat.tex} % Included with nameauth for compatibility. % % \ifloadbabel % Defined in compat.tex % % For any LaTeX format; compat.tex makes \loadbabel true % % only for use with dvilualatex, pdflatex, and latex. % % \usepackage[main=american,ngerman]{babel} % \usepackage[babel=true]{microtype} % if desired % % % Convenience macros, classical babel approach % \newcommand{\de}[1]{\foreignlanguage{ngerman}{#1}} % % \else % % For XeLaTeX and LuaLaTeX; compat.tex makes \loadbabel % % false by default, which is the historic behavior. % % Currently, one also can use babel with these engines. % \usepackage{polyglossia} % \setdefaultlanguage[variant=american]{english} % \setotherlanguage[variant=german, spelling=new]{german} % \usepackage{microtype} % if desired % % % Convenience macros, not using babel-equivalent macros % \newcommand{\de}[1]{\textgerman{#1}} % \fi % % % Other setup % \usepackage{nameauth} % % \begin{nameauth} % \< Striet & John & \noexpand\de{Strietelmeier} & > % \end{nameauth} % % \PretagName[John]{\noexpand\de{Strietelmeier}} % {Strietelmeier, John} % % \begin{document} % % In English, some names come from other cultures. Names like % \Striet\ or \Name[John]{\noexpand\de{Strietelmeier}} can % break badly in some cases. % % \end{document} % \end{VerbatimOut} %^^A % \begin{Quote} % \VerbatimInput[gobble=0]{\NameauthTestFile} % \end{Quote} % % The name pattern is: % \texttt{\ShowPattern[John]{\noexpand\de{Strietelmeier}}}. % The example above gives us the following: % \begin{Quote} % \textls[20]{In English, some names come from other cultures. Names like % \Striet\ or \Name[John]{\noexpand\de{Strietelmeier}} can % break badly in some cases.} % \end{Quote} % % \newpage % % \subsection{Eastern Names} % \label{sec:Eastern} % % Proper Eastern names are encoded using comma-delimited syntax. They have Non-Western index entries: \meta{SNN} \meta{Affix} (no comma between name elements). The current syntax permits alternate names; the obsolete syntax does not (Section~\ref{sec:Obsolete}). % % \begin{SyntaxBox} % \cmd{\Name}\marg{SNN\textbf{,}Affix}\oarg{Alternate} % \end{SyntaxBox} % % \BothInfo*{\ShowPattern{Sun, Yat-sen}} % {\ShowIdxPageref*{Sun, Yat-sen}} % Even in some academic texts, one sees Non-Western names encoded with Western forms.\footnote{\textls[-5]{Jaroslav Pelikan, \Title{The Christian Tradition}, 5 vols. (Chicago: Chicago UP, 1971--1989); Immanuel Geiss, \Title{\de{Personen: Die biographische Dimension der Weltgeschichte}}, \de{Geschichte Griffbereit} vol. 2 (Munich: Wissen Media Verlag, 2002).} As of writing, \href{https://www.nndb.com/}{\bfseries NNDB} sorts \Name{Kim, Jong Un} under U, not K. That prioritizes accesibility over accuracy. This is not the publisher's fault; it is a market reality.} % The \textsf{nameauth} package seeks to remedy that issue, which has more to do with outsourcing indexes to non-expert providers than with scholars. For example, the macro |\Name*{Sun, Yat-sen}| ensures correct forms of the name \Name*{Sun, Yat-sen} in the text and the index. We get both cross-cultural sensitivity and scholarly accuracy. % % \subsection{Names in All Caps} % \label{sec:AllCaps} % % \DescribeMacro{\AllCapsActive} % Some contexts capitalize one's entire family name. This differs from the way in which initial letter capitalization is handled (Section~\ref{sec:NameParticles}). % \DescribeMacro{\AllCapsInactive} % In addition to the \texttt{allcaps} package option (Section~\ref{sec:PkgOptions}), % \DescribeMacro{\CapName} % \cmd{\AllCapsActive} and \cmd{\AllCapsInactive} work for blocks of text. All have priority over \cmd{\CapName}, which works once per name. These capitalize \meta{SNN} in the body text only. They also work with \cmd{\AKA} and friends. For capitalization using macros in both the text and index, see Sections~\ref{sec:AltFormat} and~\ref{sec:AdvCustomize}. % % \Global Both \cmd{\AllCapsActive} and \cmd{\AllCapsInactive} can be used either as a pair or singly within an explicitly local scope. Use \cmd{\global} to force a global effect. % \begin{Center} % \BothInfo[2.5ex]{\ShowPattern[Hideyo]{Noguchi}\break % \ShowPattern{Miyazaki, Hayao}} % {\ShowIdxPageref*[Hideyo]{Noguchi}\break % \ShowIdxPageref*{Miyazaki, Hayao}} % \begin{tabular}{ll}\toprule % \rowcolor{nagrey}^^A % \bfseries Text & \bfseries Macro\\ % \LNoguchi & |\LNoguchi| \\ % % \rowcolor{nagrey}^^A % \CapName\LNoguchi & |\CapName\LNoguchi|\\ % % \LMiyazaki & |\LMiyazaki| \\ % % \rowcolor{nagrey}^^A % \CapName\LMiyazaki & |\CapName\LMiyazaki|\\\bottomrule % \end{tabular} % \end{Center} % % \subsection{Reversed Names} % \label{sec:RevNames} % % Sometimes a publisher expects Western-style index entries. Sometimes certain names need to have specific forms in the index, The reversing macros can adapt forms in the text to required Western index entries. % % \DescribeMacro{\ReverseActive} % In addition to the \texttt{allreversed} option for reversing name order (Section~\ref{sec:PkgOptions}), \cmd{\ReverseActive} and \cmd{\ReverseInactive} do the same for blocks of text. % \DescribeMacro{\ReverseInactive} % These all have priority over the use of \cmd{\RevName}, used once per name. % \DescribeMacro{\RevName} % These macros do not affect the index. They work also with \cmd{\AKA} and friends. \emph{Reversing only affects long name forms,} which is why we show only long names below. % % \Global Both \cmd{\ReverseActive} and \cmd{\ReverseInactive} can be used either as a pair or singly within an explicitly local scope. Use \cmd{\global} to force a global effect. % % Unwanted results that may arise from reversing names depend more on the context than on the syntactic forms of the names themselves. This is the crux of how \textsf{nameauth} deals with ambiguity across cultures. % % \begin{SyntaxBox}[Reversing Western Names] % \cmd{\RevName}\cmd{\Name}\oarg{FNN}\marg{SNN}\oarg{Alternate} % \end{SyntaxBox} % % Avoid using \meta{Affix} with such names. For example, |\RevName\LPatton\dag| produces ``\RevName\LPatton\dag''. The name looks wrong unless one uses either \cmd{\RevComma} or \cmd{\DropAffix}. This name has a Western index entry. % \BothInfo[-7.5ex]{\ShowPattern{}}{\ShowIdxPageref*{}} % % \BothInfo[5ex]{\ShowPattern[Hideyo]{Noguchi}} % {\ShowIdxPageref*[Hideyo]{Noguchi}} % \begin{Center} % \begin{tabular}{ll}\toprule % \rowcolor{nagrey}^^A % \bfseries Text & \bfseries Macro / Arguments\\ % % \LNoguchi & |\LNoguchi| \\ % \LNoguchi[Doctor] & |\LNoguchi[Doctor]| \\ % % \rowcolor{nagrey}^^A % \strut Unwanted result: \LNoguchi[Sensei] & % |\LNoguchi[Sensei]| \\ % % \RevName\LNoguchi\dag & |\RevName\LNoguchi\dag| \\ % % \RevName\LNoguchi[Sensei]\dag & |\RevName\LNoguchi[Sensei]| \\ % % \rowcolor{nagrey}^^A % \strut Unwanted result: \RevName\LNoguchi[Doctor] & |\RevName\LNoguchi[Doctor]| \\\bottomrule % \end{tabular} % \end{Center} % \smallskip % % \begin{SyntaxBox}[Reversing Eastern Names] % \cmd{\RevName}\cmd{\Name}\marg{SNN\textbf{,}Affix}\oarg{Alternate} % \end{SyntaxBox} % % The index entry of this name form looks like \meta{SNN} \meta{FNN} (no comma). This name has a Non-Western index entry. \emph{Reversing ancient names functions the same way, but often produces nonsensical name forms.} % % \BothInfo[5ex]{\ShowPattern{Miyazaki, Hayao}} % {\ShowIdxPageref*{Miyazaki, Hayao}} % \begin{Center} % \begin{tabular}{ll}\toprule % \rowcolor{nagrey}^^A % \bfseries Text & \bfseries Macro / Arguments\\ % % \LMiyazaki & |\LMiyazaki| \\ % \LMiyazaki[Sensei] & |\LMiyazaki[Sensei]| \\ % % \rowcolor{nagrey}^^A % \strut Unwanted result: \LMiyazaki[Mr.] & |\LMiyazaki[Mr.]| \\ % % \RevName\LMiyazaki & |\RevName\LMiyazaki| \\ % \RevName\LMiyazaki[Mr.] & |\RevName\LMiyazaki[Mr.]| \\ % % \rowcolor{nagrey}^^A % \strut Unwanted result: \RevName\LMiyazaki[Sensei] & % |\RevName\LMiyazaki[Sensei]| \\\bottomrule % \end{tabular} % \end{Center} % % \subsection[Listing by Surname]{Listing Western names by Surname} % \label{sec:LastFirst} % % \DescribeMacro{\ReverseCommaActive} % To make lists of ``last comma first'' names, in addition to the \texttt{allrevcomma} option (Section~\ref{sec:PkgOptions}), % \DescribeMacro{\ReverseCommaInactive} % the macros \cmd{\ReverseCommaActive} and \cmd{\ReverseCommaInactive} function the same way with blocks of text.\DescribeMacro{\RevComma} They both have priority over \cmd{\RevComma}. These all affect only long Western name forms. The first two are broad toggles, while the third is used once per name. % % \Global Both \cmd{\ReverseCommaActive} and \cmd{\ReverseCommaInactive} can be used either as a pair or singly within a local scope. Use \cmd{\global} to force a global effect. % % \newpage % % \begin{itemize} % \item Western names change to reversed comma form: % \PatInfo*{\ShowPattern[Oskar]{Hammerstein, II}\break % \ShowPattern[Hideyo]{Noguchi}\break % \ShowPattern{Æthelred,II}\break % \ShowPattern{Sun, Yat-sen}} % % \begin{tabular}{p{3.7cm}l} % \Name*[Oskar]{Hammerstein, II} & % \RevComma\Name*[Oskar]{Hammerstein, II} \\ % \LNoguchi & \RevComma\LNoguchi \\ % \end{tabular} % % \item Non-Western names do not change: % % \begin{tabular}{p{3.7cm}l} % \LAeth & \RevComma\LAeth \\ % \Name*{Sun, Yat-sen} & \RevComma\Name*{Sun, Yat-sen}\\ % \end{tabular} % \end{itemize} % % \subsection{Particles in Names} % \label{sec:NameParticles} % % Particles usually are articles and prepositions grouped either with forenames or surnames. They can refer to places, noble houses, and so on. % % In modern usage, particles have crossed into other languages and cultures. The same particles may be handled differently, depending on their source language. Users should consult style guides. See also Section~\ref{sec:RealAltEx}. % % \begin{InfoBox} % One must sort names with particles in \meta{SNN} using \cmd{\PretagName} (Section~\ref{sec:IndexSort}), often by removing spaces in the sort key. % \end{InfoBox} % % \subsubsection{Standard Rules} % % Here we show how [\hyperlink{Mulvany}{Mulvany}, 152--82] handles name particles, thus pertaining to naming macro arguments. This list is not exhaustive. % \begin{itemize} % \item \emph{Afrikaans and English variants:} Particles go in \meta{SNN}. These can include \textit{de}, \textit{de la}, \textit{d'}, \textit{von}, \textit{van}, and \textit{ten}. Capitalization of particles may vary, but \textit{Du} usually is capitalized, yet one sees, e.g., ``\AKA[Charles]{du~Fresne}{du~Cange}'', ``\CapThis\AKA[Charles]{du~Fresne}{du~Cange}'', and even ``\textsf{Ducange}''. \textit{Le}, \textit{La}, and \textit{L'} are capitalized unless preceded by \textit{de}. % % \BothInfo[4.5ex]{\ShowPattern[S.J.]{Du Toit}\break % \ShowPattern[Martin]{Van Buren}\break % \ShowPattern[Pierre]{L'Enfant}\break % \ShowPattern[Walter]{de la Mare}\break % \ShowPattern[Hernando]{de~Soto}} % {\ShowIdxPageref*[S.J.]{Du Toit}\break % \ShowIdxPageref*[Martin]{Van Buren}\break % \ShowIdxPageref*[Pierre]{L'Enfant}\break % \ShowIdxPageref*[Walter]{de la Mare}\break % \ShowIdxPageref*[Hernando]{de~Soto}} % \begin{Block} % \Name[S.J.]{Du Toit}[Stephanus Johannes]\\ % |\Name[S.J.]{Du Toit}[Stephanus Johannes]|\\ % \Name[S.J.]{Du Toit}\dotfill^^A % |\Name[S.J.]{Du Toit}|\\[1ex] % \ForgetThis\Name[Martin]{Van Buren}\dotfill^^A % |\Name[Martin]{Van Buren}|\\ % \Name[Martin]{Van Buren}\dotfill^^A % |\Name[Martin]{Van Buren}|\\[1ex] % \Name[Pierre]{L'Enfant}\dotfill^^A % |\Name[Pierre]{L'Enfant}|\\ % \Name[Pierre]{L'Enfant}\dotfill^^A % |\Name[Pierre]{L'Enfant}|\\[1ex] % \Name[Walter]{de la Mare}\dotfill^^A % |\Name[Walter]{de la Mare}|\\ % \Name[Walter]{de la Mare}\dotfill^^A % |\Name[Walter]{de la Mare}|\\ % \CapThis\Name[Walter]{de la Mare}\dotfill^^A % |\CapThis\Name[Walter]{de la Mare}|\\[1ex] % \ForgetThis\Name[Hernando]{de~Soto}\dotfill^^A % |\Name[Hernando]{de~Soto}|\\ % \Name[Hernando]{de~Soto}\dotfill^^A % |\Name[Hernando]{de~Soto}|\\ % \CapThis\Name[Hernando]{de~Soto}\dotfill^^A % |\CapThis\Name[Hernando]{de~Soto}| % \end{Block} % % \item \emph{Dutch:} Particles go in \meta{FNN}, except for \textit{ver}, which goes in \meta{SNN}. % \BothInfo*{\ShowPattern[Bernhard ten]{Brink}\break % \ShowPattern[Daisy]{Ver Boven}} % {\ShowIdxPageref*[Bernhard ten]{Brink}\break % \ShowIdxPageref*[Daisy]{Ver Boven}} % \begin{Block} % \Name[Bernhard ten]{Brink}\dotfill^^A % |\Name[Bernhard ten]{Brink}|\\ % \Name[Bernhard ten]{Brink}\dotfill^^A % |\Name[Bernhard ten]{Brink}|\\[1ex] % \Name[Daisy]{Ver Boven}\dotfill^^A % |\Name[Daisy]{Ver Boven}|\\ % \Name[Daisy]{Ver Boven}\dotfill^^A % |\Name[Daisy]{Ver Boven}| % \end{Block} % % \item \emph{French:} If the surname has an article (or contracted article) plus preposition, the particles go in \meta{SNN}. Otherwise, prepositions by themselves go in \meta{FNN}. % \BothInfo*{\ShowPattern[Jean de]{La Fontaine}} % {\ShowIdxPageref*[Jean de]{La Fontaine}} % \begin{Block} % \ForgetThis\Name[Jean de]{La Fontaine}\dotfill^^A % |\Name[Jean de]{La Fontaine}|\\ % \Name[Jean de]{La Fontaine}\dotfill^^A % |\Name[Jean de]{La Fontaine}| % \end{Block} % % \item \emph{German:} If the surname has an article (or contracted article), optionally plus a preposition, the particles go in \meta{SNN}. Otherwise, the particles (usually just prepositions) go in \meta{FNN}. % \BothInfo[3ex]{\ShowPattern[J.W. von]{Goethe}\break % \ShowPattern[Otto]{Zur Linde}} % {\ShowIdxPageref*[J.W. von]{Goethe}\break % \ShowIdxPageref*[Otto]{Zur Linde}} % \begin{Block} % \ForgetThis\Name[J.W. von]{Goethe}[Johann Wolfgang v.]\\ % |\Name[J.W. von]{Goethe}[Johann Wolfgang v.]|\\ % \Name[J.W. von]{Goethe}\dotfill^^A % |\Name[J.W. von]{Goethe}|\\[1ex] % \Name[Otto]{Zur Linde}\dotfill^^A % |\Name[Otto]{Zur Linde}|\\ % \Name[Otto]{Zur Linde}\dotfill^^A % |\Name[Otto]{Zur Linde}| % \end{Block} % % \item \emph{Modern Italian:} Particles go in \meta{SNN}. % % \item \emph{Medieval Italian:} Particles usually go in \meta{FNN}. % % \item \emph{Portuguese:} Particles go in \meta{FNN}. % % \item \emph{Romanian:} Particles go in \meta{SNN}, except for \textit{de}, which goes in \meta{FNN}. % % \item \emph{Scandinavian languages:} Particles go in \meta{FNN} if they are of Scandinavian, Dutch, or German origin, except for the Dutch particle \textit{de} and particles of other origin, which go in \meta{SNN}. % % \item \emph{Spanish:} If the surname has an article, it goes in \meta{SNN}. Otherwise, particles go in \meta{FNN}. Compound surnames are indexed by their first element, including names connected by \textit{y} (and). % \BothInfo[0.5ex]{\ShowPattern[Francisco de]{Figueroa}\break % \ShowPattern[Manuel Antonio]{Las Heras}} % {\ShowIdxPageref*[Francisco de]{Figueroa}\break % \ShowIdxPageref*[Manuel Antonio]{Las Heras}} % \begin{Block} % \Name[Francisco de]{Figueroa}\dotfill^^A % |\Name[Francisco de]{Figueroa}|\\ % \Name[Francisco de]{Figueroa}\dotfill^^A % |\Name[Francisco de]{Figueroa}|\\[1ex] % \Name[Manuel Antonio]{Las Heras}\dotfill^^A % |\Name[Manuel Antonio]{Las Heras}|\\ % \Name[Manuel Antonio]{Las Heras}\dotfill^^A % |\Name[Manuel Antonio]{Las Heras}| % \end{Block} % % \item \emph{Modern Welsh, Irish, and Scots contexts:} names often merge particles with surnames: FitzRoy or Fitzroy; O'Leary; McDonald, MacLeish. % \end{itemize} % % \subsubsection{Non-Breaking Spaces} % % Despite the macros in Section~\ref{sec:Affix}, names with particles present their own challenges. We recommend inserting a tilde (active character equivalent to \cmd{\nobreakspace}) or Unicode NBSP as needed to prevent bad breaks (see also Sections~\ref{sec:IndexSort}). Here the quick interface helps greatly. % % \subsubsection{Look-Alike Particles} % % There are characters that look similar, but in fact are different. For example, \textit{L'} (L+apostrophe) and \textit{d'} (d+apostrophe) are two separate glyphs each. In contrast, \textit{Ľ} (L+caron) and \textit{ď} (d+caron) are one Unicode glyph each (Section~\ref{sec:Unicode}). If one confuses these similar characters, spurious results can occur. % % \subsubsection[Capitalizing]{Capitalizing Particles} % \label{sec:CapParticles} % % \DescribeMacro{\CapThis} % In English, names like \LSoto\ have their particles in the \meta{SNN} argument: \Soto. At the beginning of a sentence, one must capitalize the name: % % \begin{itemize} % \item[] \CapThis\Soto\ was a famous Spanish explorer. % \item[] |\CapThis\Soto\ was a famous Spanish explorer.| % \end{itemize} % % With \texttt{latex} and \texttt{pdflatex}, using \cmd{\CapThis} should work with all of the Unicode characters available in the T1 encoding. For a broader set of characters, consider using \texttt{xelatex} and \texttt{lualatex}. % % Section~\ref{sec:NonstandardCaps} applies \cmd{\CapThis} to names that have nonstandard capitalization. Section~\ref{sec:AltFormat} explains how to avoid potential problems with \cmd{\CapThis} when using macros in name arguments. That is a trade-off for using a natural language approach. % % The macro \cmd{\CapName} overrides the \meta{SNN} created by \cmd{\CapThis}, effectively nullifying its effects. It is unlikely that the two macros would be used together,so this should not present a problem. % % \DescribeMacro{\AccentCapThis} % Before \textsf{nameauth} used automatic Unicode detection, \cmd{\AccentCapThis} placed before \cmd{\CapThis} handled Unicode. It remains only for backward compatibility. % % \subsection{Medieval Names} % \label{sec:NameMedieval} % % Medieval (and some ancient) names present some interesting difficulties, often based on the expected standards of the context in which they are used: % \begin{itemize} % \item Some publications present medieval names as Western names due to common convention. That also is reflected in index styles. % % \item Scholarly publications (sometimes) do not sacrifice details for the sake of convention. This makes their indexes more unfamiliar to the general reader. One might create cross-references from common forms to scholarly forms using \cmd{\IndexRef}, as explained in Section~\ref{sec:IndexRef}. % \end{itemize} % % The design of \textsf{nameauth} helps users implement both approaches when needed, even though the two approaches are not compatible with each other. Indeed, we show both common and scholarly approaches in this manual. The trade-off for flexibility means that users have to put more work into designing how they address this complexity. That is why the manual provides so many examples. % % In the following preamble snippet we illustrate how some different approaches may work, and how, even in one document, they can be made to play nicely with each other. Yet we should emphasize that, in general, a document will not use both common and scholarly approaches. We show the ``worst-case'' scenario in order to demonstrate how much easier the normal cases can be.\footnote{Regarding the margin note that shows name patterns, in \texttt{\ShowPattern{Thomas, à~Kempis}} the glyphs \texttt{Ãă} correspond to \cmd{\IeC\{}\texttt{\textbackslash\textquotesingle a\}}. This is a result of using \textsf{inputenc} and \textsf{fontenc}.} %^^A % ^^A % \begin{Quote} % \begin{Verbatim} % \PretagName{Thomas, à~Kempis}{Thomas Akempis} % medieval % \PretagName[Thomas]{à~Kempis}{Akempis, Thomas} % Western % % % We do not index an alternate medieval form % \ExcludeName{Thomas, \`a~Kempis} % % \end{Verbatim} % % \begin{Verbatim} % % If we did use the alternate form, we would sort it as % \PretagName{Thomas, \`a~Kempis}{Thomas Akempis} % % \begin{nameauth} % \< KempMed & & Thomas, à~Kempis & > % medieval % \< KempW & Thomas & à~Kempis & > % Western % \end{nameauth} % % % Create xref before using the Western name. % \IndexRef[Thomas]{à~Kempis}{Thomas à~Kempis} % \end{Verbatim} % \ExcludeName{Thomas,\`a~Kempis} % \IndexRef[Thomas]{à~Kempis}{Thomas à~Kempis} % \end{Quote} % % Below we illustrate different name forms using statements numbered from 1 to 10. The marginal information pertains as indicated to those respective numbered statements to show important differences among the name forms. % \begin{itemize} % \item Medieval form: \cmd{\KempMed} % \BothInfo*{\ShowPattern{Thomas, à~Kempis}\hfill \textrm{(1--4, 7)}\break % \ShowPattern{Thomas,\`a~Kempis}\hfill \textrm{(5--6)}\break % \ShowPattern[Thomas]{à~Kempis}\hfill \textrm{(8--10)}} % {\ShowIdxPageref*{Thomas, à~Kempis}\hfill (1--4, 7)\break % \ShowIdxPageref*{Thomas,\`a~Kempis}\hfill (5--6)\break % \ShowIdxPageref*[Thomas]{à~Kempis}\hfill (8--10)} % \begin{enumerate} % \item In the text, we see ``\KempMed'' and ``\KempMed''. The added name ``\ForceFN\SKempMed'' |\ForceFN\SKempMed| is a place name, not a surname. It is Latin for \DE{von Kempen}. % % \item ``\KempMed'' |\KempMed| is indexed as ``\ShowIdxPageref*{Thomas, à~Kempis}''. % % \item ``\CapThis\ForceFN\SKempMed'' |\CapThis\ForceFN\SKempMed| can start a sentence, but such usage would be infrequent. % % \item We use \cmd{\PretagName} (Section~\ref{sec:IndexSort}) to sort the name according to the expected collating sequence: % % \item[] |\PretagName{Thomas, à~Kempis}{Thomas Akempis}| % \end{enumerate} % % \item Alternate medieval form: |\Name{Thomas,\`a~Kempis}| % \begin{enumerate}\addtocounter{enumi}{4} % \item ``\Name{Thomas,\`a~Kempis}'' is a different name with a different pattern, about which the next section goes into some detail. % % \item We used \cmd{\ExcludeName} (Section~\ref{sec:IdxFine}) before using the alternate form to keep it from generating a duplicate index entry. % % \item We index the canonical form here with \JustIndex\KempMed % |\JustIndex\KempMed|. % \end{enumerate} % % \item Western form: \cmd{\KempW} % \begin{enumerate}\addtocounter{enumi}{7} % \item ``\KempW'' is a Western name form with the index entry: ``\ShowIdxPageref*[Thomas]{à~Kempis}''. % % \item ``\CapThis\KempW'' appears by using |\CapThis\KempW|. We refer to ``\SKempW'' via |\SKempW|. We get the same breadth of usage as the Non-Western forms, but the index entries differ, as do the specific ways of using the names. % % \item We first created a cross-reference from the Western form to the medieval form to prevent spurious page entries (Section~\ref{sec:IndexRef}). % % \item[] We index the canonical form: \JustIndex\KempMed % |\JustIndex\KempMed|. % % \item[] To prevent the name from appearing before ``\texttt{aardvark}'' in the index, we remove extra spaces to get the proper sorting between ``\texttt{ajar}'' and ``\texttt{alkaline}'': % % \item[] |\PretagName[Thomas]{à~Kempis}{Akempis, Thomas}| % \end{enumerate} % \end{itemize} % % \subsection{Ancient Names} % \label{sec:NameAncient} % % \begingroup ^^A Local format hook redefinition % % Ancient names are fluid regarding the meaning and use of affixes. Certain scholarly contexts add more information to a name when it is first introduced. How do we handle that? We use information from the latter sections mentioned below. First we manually add affixes to a standard name: % \begin{itemize} % \item We use \cmd{\PretagName} (Section~\ref{sec:IndexSort}) to sort especially Roman numerals in the index. For example: % \PatInfo[1ex]{\ShowPattern{Antiochus, IV}!PRE} % \item[] \cmd{\PretagName\{Antiochus, IV\}\{Antiochus 4\}} % % \item We use \cmd{\TagName} (Section~\ref{sec:IndexTag}) to ensure that added information is displayed in the index: % \PatInfo[1ex]{\ShowPattern{Antiochus, IV}!TAG} % \item[] \cmd{\TagName\{Antiochus, IV]\}\{ Epiphanes, king\}}. % % \item Using \cmd{\PretagName} and \cmd{\TagName} in the preamble ensures consistency. % % \item We use \meta{Alternate} to add information in the text, e.g.: % \end{itemize} % \begin{Block} % \negmedskip % \PatInfo[3ex]{\ShowPattern{Antiochus, IV}!MN} % \Name{Antiochus, IV}[IV Epiphanes]\dotfill % \cmd{\Name\ \{Antiochus, IV\}[IV Epiphanes]}\\ % \Name*{Antiochus, IV}\dotfill \cmd{\Name*\{Antiochus, IV\}}\\ % \Name{Antiochus, IV}\dotfill \cmd{\Name\ \{Antiochus, IV\}} % \end{Block} % % Next we show a snippet that uses the quick interface with this same method. We trigger a first use, followed by long and short subsequent uses: % \begin{Quote} % \begin{Verbatim} % \PretagName{Demetrius, I}{Demetrius 1} % \TagName{Demetrius, I}{ Soter, king} % \begin{nameauth} % \< Dem & & Demetrius, I & > % \end{nameauth} % \end{Verbatim} % \end{Quote} % % \negbigskip % \begin{Block} % \BothInfo[1.3ex]{\ShowPattern{Demetrius, I}!PRE\break % \ShowPattern{Demetrius, I}!TAG\break % \ShowPattern{Demetrius, I}!MN} % {\ShowIdxPageref*{Demetrius, I}} % \Dem[I Soter]\dotfill|\Dem[I Soter]|\\ % \LDem\dotfill|\LDem|\\ % \Dem\dotfill|\Dem| % \end{Block} % % Below, instead of manually using \meta{Alternate}, we use a more complex initial setup that automates tags via in first-use formatting hooks (Section~\ref{sec:DataTagHooks}). We also show that we can still have manual changes, here with \textsf{babel} and a macro \cmd{\el} that we made for using Greek, which is part of this manual's preamble: % \begin{Quote} % \begin{Verbatim}[firstnumber=last] % \NameAddInfo{Demetrius, I}{ Soter} % \renewcommand*\NamesFormat[1] % {\color{blue}\sffamily#1\NameQueryInfo{}} % \renewcommand*\MainNameHook{\sffamily} % \end{Verbatim} % \end{Quote} % % \NameAddInfo{Demetrius, I}{ Soter} % \renewcommand*\NamesFormat[1] % {\color{blue}\sffamily#1\NameQueryInfo{}} % \renewcommand*\MainNameHook{\sffamily} % % \begin{Block} % \BothInfo[3.2ex]{\ShowPattern{Demetrius, I}!DB} % {\ShowIdxPageref*{Demetrius, I}} % \ForgetThis\Dem\dotfill|\ForgetThis\Dem|\\ % \LDem\dotfill|\LDem|\\ % \Dem\dotfill|\Dem|\\ % \LDem[I \noexpand \el{Σωτήρ}]\dotfill|\LDem[I \noexpand \el{|^^A % \textsf{\el{Σωτήρ}}|}]| % \end{Block} % % The full index entry for both cases of \Dem\ in a normal document would look like: % \begingroup % \IndexActual{@}^^A % \TagName{Demetrius, I}{ Soter, king}^^A % \texttt{\ShowIdxPageref{Demetrius, I}}.^^A % \TagName{Demetrius, I}{ Soter, king\string|hyperpage} % \endgroup % The first use of a name, or one after \cmd{\ForgetName} or \cmd{\ForgetThis}, shows the most information. A long instance of an extant name shows less info, and a short instance shows the least. % \endgroup^^A Local format hook redefinition % % \subsection{Roman Names I} % \label{sec:Romani} % % In this section we take a simple approach. Later on we will useh macros in the arguments (Section~\ref{sec:Romanii}). Roman names consist of the following elements: % \begin{itemize} % \item A personal name (\LA{praenomen}) % % \item A clan name (\LA{nomen}) % % \item An epithet or nickname (\LA{cognomen}) % \end{itemize} % % The \LA{cognomen} can denote a branch family in a larger clan. Affixed to that, one might see additional names (\LA{agnomina}). In ancient Rome, the \LA{nomen} was most important, helping to structure % \href{https://en.wikipedia.org/wiki/Patrician_(ancient_Rome)}{Roman society}. % \href{https://en.wikipedia.org/wiki/Roman_naming_conventions}{Naming conventions} changed over time. % \href{https://en.wikipedia.org/wiki/Praenomen}{\LA{Praenomina}} also have their own history. % One finds a % \href{https://www.youtube.com/watch?v=RMLb1jVl_Uo}{helpful video} on the YouTube channel PolýMATHY by \Name[Luke]{Ranieri}. We \emph{do not use} the method where Roman names are indexed using recognizable mononyms.\footnote{Justo L. González, \Title{The Story of Christianity}, 2 vols. (San Francisco: Harper, 1984). [\hyperlink{Mulvany}{Mulvany}] does not advise using such a method, which is ill-suited for \textsf{nameauth}.} % % \subsubsection[General Reference]{General Reference Materials} % \label{sec:RomanGeneral} % % The basic approach uses Western name forms, but with some modifications. One often sees this method when indexing well-known Romans.\footnote{Philip J. Adler, \Title{World Civilizations}, 3rd ed. (Belmont, Calif.: Thomson/Wadsworth, 2003).} % % \subsubsection*{\hfil Names without \LA{Agnomina}} % % \BothInfo*{\ShowPattern[Julius]{Caesar}[Gaius Julius]\break % \ShowPattern[Pontius]{Pilate}} % {\ShowIdxPageref*[Julius]{Caesar}[Gaius Julius]\break % \ShowIdxPageref*[Pontius]{Pilate}} % Below we have the \LA{nomen} in \meta{FNN}, the \LA{cognomen} in \meta{SNN}, and we add the \LA{praenomen} with the \LA{nomen} in \meta{Alternate} as needed: % \begin{Block} % \Name[Julius]{Caesar}[Gaius Julius]\dotfill |\Name[Julius]{Caesar}[Gaius Julius]|\\ % \Name*[Julius]{Caesar}\dotfill |\Name*[Julius]{Caesar}|\\ % \Name[Julius]{Caesar}\dotfill |\Name[Julius]{Caesar}| % \end{Block} % % If indexing according to the \LA{cognomen}, perhaps use a Western name, where the \LA{nomen} is in \meta{FNN} and the \LA{cognomen} in \meta{SNN}: % \begin{Block} % \Name*[Pontius]{Pilate}\dotfill |\Name*[Pontius]{Pilate}| % \end{Block} % % \BothInfo*{\ShowPattern{Pontius, Pilate}} % {\ShowIdxPageref*{}} % In Section~\ref{sec:SelectingTypes} we mentioned that some Roman names could have Non-Western forms, especially those without \LA{praenomina}. They would be indexed according to the \LA{nomen}, which we see in some scholarly resources (Section~\ref{sec:RomanScholari}). % \begin{Block} % \ForgetName{Pontius, Pilate} % \Name{Pontius, Pilate}\dotfill |\Name{Pontius, Pilate}|\\ % \ForceFN\FName{Pontius, Pilate}\dotfill |\ForceFN\FName{Pontius, Pilate}| % \end{Block} % % \begin{Quotation}{\Name[Julius]{Caesar}} % {\Title{\la{De bello gallico}} 3.16.6 (58--49 \textsc{bc})} % \la{Fere libenter homines, id quod volunt, credunt.} % % (In general, people willingly believe what they want [to believe].) % \index{Romans, quotes of\noexpand\string|hyperpage} % \end{Quotation} % % \newpage % % \subsubsection*{\hfil Names with \LA{Agnomina}: Tags} % % We can use index ``pre-tags'' and tags (Sections~\ref{sec:IndexSort} and~\ref{sec:IdxIdent}) to sort and differentiate names in the index. We also can use name tags (Section~\ref{sec:DataTags}) for \LA{agnomina}. Yet Romans tended to use and pass down a relatively small set of names over many generations. % % By defining empty macros \cmd{\nri}, \cmd{\nrii}, \cmd{\nriii}\dots, we can disambiguate identical names. We use \cmd{\nr} (number) followed by Roman numerals to avoid collisions with, for example, the dotless \i. When put at the tail of name arguments, they avoid the need to use either \cmd{\noexpand} or alternate formatting. We can reuse these macros with many different names. % % This approach solves most issues in the text. If we need specific index forms, we could index under alternate names, as we do on the next page. With a nod to Section~\ref{sec:DataTagHooks}, we automate the first use of a name to display the name tag. In a normal \LaTeX\ file, we would see the following results: %^^A % \begin{VerbatimOut}{\jobname.tmp} % \newcommand\nri{} % \newcommand\nrii{} % % \begin{nameauth} % \< Senecai & Lucius Annaeus & Seneca\nri & > % \< Senecaii & Lucius Annaeus & Seneca\nrii & > % \end{nameauth} % % \renewcommand*\NamesFormat[1] % {\color{blue}\sffamily#1\NameQueryInfo{}} % % \PretagName[Lucius Annaeus]{Seneca\nri}{Seneca, Lucius Annaeus 1} % \PretagName[Lucius Annaeus]{Seneca\nrii}{Seneca, Lucius Annaeus 2} % \TagName[Lucius Annaeus]{Seneca\nri}{ (the Elder)} % \TagName[Lucius Annaeus]{Seneca\nrii}{ (the Younger)} % \NameAddInfo[Lucius Annaeus]{Seneca\nri}{ the Elder} % \NameAddInfo[Lucius Annaeus]{Seneca\nrii}{ the Younger} % % We can differentiate between % \Senecai\ and \Senecaii; % \Senecai \NameQueryInfo{} and \Senecaii \NameQueryInfo{}. % % Their full index entries are:\\ % \ShowIdxPageref[Lucius Annaeus]{Seneca\nri}\\ % \ShowIdxPageref[Lucius Annaeus]{Seneca\ii} % \end{VerbatimOut} %^^A % \begin{Quote} % \VerbatimInput[gobble=0]{\jobname.tmp} % % \Info[2.5ex]{Name patterns and index entries are too big for the margin.} % \renewcommand*\NamesFormat[1] % {\color{blue}\sffamily#1\NameQueryInfo{}}^^A % \NameAddInfo[Lucius Annaeus]{Seneca\nri}{ the Elder}^^A % \NameAddInfo[Lucius Annaeus]{Seneca\nrii}{ the Younger}^^A %^^A % We can differentiate between % \Senecai\ and \Senecaii; % \Senecai \NameQueryInfo{} and \Senecaii \NameQueryInfo{}. % % \IndexActual{@} % \TagName[Lucius Annaeus]{Seneca\nri}{ (the Elder)} % \TagName[Lucius Annaeus]{Seneca\nrii}{ (the Younger)} % Their full index entries are:\\ % \ShowIdxPageref[Lucius Annaeus]{Seneca\nri}\\ % \ShowIdxPageref[Lucius Annaeus]{Seneca\nrii} % \TagName[Lucius Annaeus]{Seneca\nri}{, the Elder\string|hyperpage} % \TagName[Lucius Annaeus]{Seneca\nrii}{, the Younger\string|hyperpage} % \end{Quote} % % \begin{Quotation}{\Scipio} % {attr. by \Name[Titus]{Livius}, % \Title{\la{Ab urbe condita}} B 30 (27--9 \textsc{bc})} % \la{Bellum parate, quoniam pacem pati non potuistis.} % % (Prepare for war, for it seems that you are unable to tolerate peace.) % \index{Romans, quotes of\noexpand\string|hyperpage} % \end{Quotation} % % % \subsubsection*{\hfil Names with \LA{Agnomina}: \meta{Affix}} % % \DescribeMacro{\ForceAffix} In subsequent uses of a Western name, the prefix macro \cmd{\ForceAffix} allows one to print just \meta{Affix} by itself. \cmd{\ForceFN} has a similar use with Non-Western names. % \begin{InfoBox} % Where formatting hooks also change syntactic name forms (Section~\ref{sec:AdvancedFormat}f.), that could interfere with \cmd{\ForceFN} and \cmd{\ForceAffix}. % \end{InfoBox} % % We move \LA{agnomina} into the \meta{Affix} field. The \LA{agnomen} drops automatically in the text for subsequent name uses, but we get potentially undesirable index entries: % \begin{itemize} % \item[] The text has: % |\Name[|\meta{praenomen}| |\meta{nomen}|]{|^^A % \meta{cognomen}\textbf{,}\meta{agnomen}|}| % \item[] In the index we get: % \ShowIdxPageref*[\meta{praenomen} \meta{nomen}] % {\meta{cognomen}, \meta{agnomen}} % \item[] In the index we want: % \ShowIdxPageref*[\meta{praenomen} \meta{nomen}] % {\meta{cognomen} \meta{agnomen}} % \end{itemize} % We avoid this problem by using \cmd{\ExcludeName} for names that have \LA{agnomina} in \meta{Affix}. We index different name forms, as in the next example: % \begin{Quote} % \begin{Verbatim} % \begin{nameauth} % \< CatoY & Marcus Porcius & Cato, the Younger & > % \< CatoYi & Marcus Porcius & Cato the Younger & > % \end{nameauth} % \renewcommand*\NamesFormat[1] % {\color{blue}\sffamily#1\NameQueryInfo{}} % \ExcludeName[Marcus Porcius]{Cato, the Younger} % \makeatletter % \NameAddInfo[Marcus Porcius]{Cato, the Younger} % {\if@nameauth@InHook\ (Uticensis, 94--45\ % % {\rmfamily\textsc{bc}})\else Uticensis\fi} % \makeatother % % \JustIndex\CatoYi % \CatoY\ is known as \CatoY\ \ForceAffix\CatoY, to distinguish him % from his great-grandfather. His names include \SCatoY[Marcus] % (\textit{praenomen}), \SCatoY[Porcius] (\textit{nomen}, one of the % Porcia clan), and \CatoY, the \textit{cognomen} by which he is best % known. His other \textit{agnomen}, \NameQueryInfo{}, means he was % born in Utica. % \JustIndex\CatoYi He is indexed as: \ShowIdxPageref*{} % \end{Verbatim} % % \Info*{Name patterns and index entries are too big for the margin.}^^A % \renewcommand*\NamesFormat[1] % {\color{blue}\sffamily#1\NameQueryInfo{}}^^A % \makeatletter^^A % \NameAddInfo[Marcus Porcius]{Cato, the Younger} % {\if@nameauth@InHook\ (Uticensis, 94--45\ % % {\rmfamily\textsc{bc}})\else Uticensis\fi}^^A % \makeatother^^A % \JustIndex\CatoYi^^A % \CatoY\ is known as \CatoY\ \ForceAffix\CatoY, to distinguish him % from his great-grandfather. His names include \SCatoY[Marcus] % (\textit{praenomen}), \SCatoY[Porcius] (\textit{nomen}, one of the % Porcia clan), and \CatoY, the \textit{cognomen} by which he is best % known. His other \textit{agnomen}, \NameQueryInfo{}, means he was % born in Utica. % \JustIndex\CatoYi He is indexed as: \ShowIdxPageref*{} % \end{Quote} % % \begin{Quotation}{\Name[Publius]{Vegetius Renatus}} % {\Title{\la{De re militari}} (c. 390 \textsc{ad})} % Igitur qui desiderat pacem, praeparet bellum. % % (Accordingly, the person who would desire peace prepares for war.)^^A % \index{Romans, quotes of\noexpand\string|hyperpage} % \end{Quotation} % % \newpage % % \subsubsection{Scholarly Works} % \label{sec:RomanScholari} % % The \Title{Oxford Classical Dictionary} and other scholarly sources index according to the \LA{nomen}. That approach moves the \LA{nomen} from \meta{FNN} to \meta{SNN}, making this indexing method incompatible with the previous section: % \begin{itemize} % \item[] Index: \ShowIdxPageref*[\meta{praenomen}]{\meta{nomen} \meta{cognomen} \meta{agnomen}} % \item[] Macro: |\IndexName[|\meta{praenomen}|]{|\meta{nomen} \meta{cognomen} \meta{agnomen}|}| % \end{itemize} % % \BothInfo*{\ShowPattern[Lucius]{Sergius Paulus}} % {\ShowIdxPageref*{}} % By putting the \LA{nomen} and \LA{cognomen} into \meta{SNN}, with the \LA{praenomen} in \meta{FNN} and \LA{agnomina} in name tags, we can take a basic approach to these names.\footnote{Cf. Paul L. Maier, \Title{In the Fullness of Time: A Historian Looks at Christmas, Easter, and the Early Church}, revised ed. (San Francisco: Harper, 1991).} % \begin{Block} % \Name[Lucius]{Sergius Paulus}\dotfill |\Name[Lucius]{Sergius Paulus}|\\ % \Name[Lucius]{Sergius Paulus}\dotfill |\Name[Lucius]{Sergius Paulus}| % \end{Block} % % If one is indexing according to the \LA{cognomen}, one must index by an alternate name. This also allows for greater flexibility. % \begin{itemize} % \item Use this naming approach, seen in Section~\ref{sec:RomanGeneral}: % % \item[] |\Name[|\meta{praenomen}| |\meta{nomen}|]{|^^A % \meta{cognomen}\textbf{,}\meta{agnomen}|}| % % \item[] This allows the standard \textsf{nameauth} logic to handle changes of name forms, as well as the use of \cmd{\ForceAffix}. % % \item Use \cmd{\ExcludeName} for every name that should not appear in the index. % % \item Use \cmd{\IndexName} or \cmd{\JustIndex} as needed: % % \item[] |\IndexName[|\meta{praenomen}|]{|^^A % \meta{nomen} \meta{cognomen} \meta{agnomen}|}| % \end{itemize} % \begin{Quote} % \begin{Verbatim} % \begin{nameauth} % \< CatoE & Marcus Porcius & Cato, the Elder & > % \< CatoEi & Marcus & Porcius Cato the Elder & > % \end{nameauth} % \ExcludeName[Marcus Porcius]{Cato, the Elder} % % \JustIndex\CatoEi % \DropAffix\CatoE\ (234--149 \textsc{bc}) is known as % \CatoE{} \ForceAffix\CatoE, among other sobriquets. % His \textit{praenomen} is \SCatoE[Marcus]. His % \textit{nomen} is \SCatoE[Porcius], a member of the % Porcia clan. His \textit{cognomen} is \CatoE. % \JustIndex\CatoEi % Index: \ShowIdxPageref*{} % \end{Verbatim} % % \Info*{Name patterns and index entries too large for margin.}^^A % \JustIndex\CatoEi^^A % \DropAffix\CatoE\ (234--149 \textsc{bc}) is known as % \CatoE{} \ForceAffix\CatoE, among other sobriquets. % His \textit{praenomen} is \SCatoE[Marcus]. His % \textit{nomen} is \SCatoE[Porcius], a member of the % Porcia clan. His \textit{cognomen} is \CatoE. % \JustIndex\CatoEi % Index: \ShowIdxPageref*{} % \end{Quote} % % \ReturnLink % % \newpage % % \section{Debugging} % \label{sec:Debugging} % % Name patterns\,---\,generally unique macros based on names that usually expand to the empty string\,---\,govern interactions in \textsf{nameauth}. We take a deep dive here because name patterns greatly impact the remainder of the manual. We start to show index entries in the body text instead of the margin due to their complexity. % % \subsection{Null Arguments} % \label{sec:NullArgs} % % All macros that evaluate name arguments (Section~\ref{sec:NameArgMacros}) leave information about the last name that was evaluated. Since version 4.1, some macros that take name arguments also can have a \emph{null argument.} That occurs when the \marg{SNN\textbf{,}Affix} argument is empty. Instead of creating a package error (the normal case), \emph{all macro arguments are ignored} and the macro uses the persistent information from the last name arguments that were evaluated: % % \begin{Block} % Using the example \Name{Confucius}, the following are equivalent:\\ % \ShowPattern{}\dotfill |\ShowPattern{}|\\ % \ShowPattern[this]{}[that]\dotfill |\ShowPattern[this]{}[that]| % \end{Block} % \begin{itemize} % \item \cmd{\@nameauth@LoadArgs} isolates each name element, removes surrounding spaces, generates possible name patterns, and saves token registers (page~\pageref{page:NameauthLoadArgs} and following). % % \item \cmd{\@nameauth@Choice} determines the name type, then sets flags and selects a pattern according to that name type. Then it executes its arguments. % % \item The macro \cmd{\NameauthPattern} that expresses both the name and its type is covered in Section~\ref{sec:NamePatterns}. % % \item The flags |\ifNameauthWestern| and |\ifNameauthObsolete| that express the name type are discussed in Section~\ref{sec:SpecialUses}. % \end{itemize} % % The macros that use both name arguments and null arguments include: % % \begin{multicols}{2} % \begin{Block} % \setbox0\hbox{.3} % \begin{itemize} % \item[\S~\ref{sec:DebuggingMacros}] \cmd{\ShowPattern} % % \item[\S~\ref{sec:DebuggingMacros}] \cmd{\ShowIdxPageref} % % \item[\S~\ref{sec:DebuggingMacros}] \cmd{\ShowIdxPageref*} % % \item[\S~\ref{sec:DebuggingMacros}] \cmd{\ShowNameInfo} % % \item[\S~\ref{sec:DebuggingMacros}] \cmd{\ShowNameState} % % \item[\S~\ref{sec:DebuggingMacros}] \cmd{\ShowNameState*} % % \item[\S~\ref{sec:DataTags}\hbox to \wd0{\hfill}] \cmd{\NameQueryInfo} % \end{itemize} % \end{Block} % \end{multicols} % % \begin{InfoBox} % No \textsf{nameauth} macros that take null arguments change name information; they only display information. This avoids errors. % \end{InfoBox} % % \begin{Quotation}{\ForgetThis\Name{Maimonides}} % {\Title{Guide for the Perplexed} (1190)} % For a truth, once established by proof, does neither gain force nor % certainty by the consent of all scholars, nor lose by the general % dissent. % \index{theologians, quotes of\noexpand\string|hyperpage} % \index{philosophers, quotes of\noexpand\string|hyperpage} % \end{Quotation} % % \subsection[Name Patterns]{Name Pattern Overview} % \label{sec:NamePatterns} % % \DescribeMacro{\NameauthPattern} % All macros that evaluate name arguments (Section~\ref{sec:NameArgMacros}) globally assign to \cmd{\NameauthPattern} a value that corresponds to the last-used name. The \meta{Alternate} argument only affects patterns when using the obsolete syntax (Section~\ref{sec:Obsolete}). % \begin{Center} % \begin{tabular}{lll}\toprule % \rowcolor{nagrey}^^A % \bfseries Macro Name Arguments & \bfseries Name Patterns & \bfseries Name Type\\ % % \oarg{FNN}\marg{SNN} & % \meta{FNN}!\meta{SNN} & Western\\ % \oarg{FNN}\marg{SNN}\oarg{Alt} & % \meta{FNN}!\meta{SNN} & Western\\ % \oarg{FNN}\marg{SNN\textbf{,}Affix} & % \meta{FNN}!\meta{SNN},\meta{Affix} & Western\\ % \oarg{FNN}\marg{SNN\textbf{,}Affix}\oarg{Alt} & % \meta{FNN}!\meta{SNN},\meta{Affix} & Western\\ % % \rowcolor{nagrey}^^A % \hphantom{\oarg{FNN}}\marg{SNN\textbf{,}Affix} & % \meta{SNN},\meta{Affix} & Non-Western\\ % \rowcolor{nagrey}^^A % \hphantom{\oarg{FNN}}\marg{SNN\textbf{,}Affix}\oarg{Alt} & % \meta{SNN},\meta{Affix} & Non-Western\\ % \rowcolor{nagrey}^^A % \hphantom{\oarg{FNN}}\marg{SNN}\oarg{Alt} & % \meta{SNN},\meta{Alt} & old syntax\\ % \rowcolor{nagrey}^^A % \hphantom{\oarg{FNN}}\marg{SNN} & % \meta{SNN} & Non-Western\\\bottomrule % \end{tabular} % \end{Center} % % In the case of the name \LWash, we get a basic Western name pattern: \texttt{\ShowPattern[George]{Washington}}. For this pattern to be useful to \textsf{nameauth}, the internal macros add extra bits to it, which we can demonstrate various ways. % Below we test manually whether or not various patterns relating to \Wash, \Name{Tully}, \LEliz, and \CatoY\ exist. After that, we shall unpack the meaning of these patterns and their affixes (\texttt{!MN, !NF, !PN, !PRE, !TAG, !DB}). % \IndexName[Marcus Porcius]{Cato the Younger} %^^A % \begin{VerbatimOut}{\jobname.tmp} % \newcommand\Defined[3]{\ifcsdef{#1}{#2}{#3}} % % \begin{enumerate}[itemsep=0pt] % \item The main-matter name \Wash\ % \Defined{George!Washington!MN}{exists}{is undefined}. % \item The front-matter name \Wash\ % \Defined{George!Washington!NF}{exists}{is undefined}. % \item The index cross-reference \Name{Tully} % \Defined{Tully!PN}{exists}{is undefined}. % \item The index sort tag for \Eliz\ % \Defined{Elizabeth,I!PRE}{is: \csuse{Elizabeth,I!PRE}} % {is undefined.} % \item The index tag for \Wash\ % \Defined{George!Washington!TAG}{is: \csuse{George!Washington!TAG}} % {is undefined.} % \item The name tag for \Wash\ % \Defined{George!Washington!DB}{is: \csuse{George!Washington!DB}} % {is undefined.} % \item The name \CatoY\ is % \Defined{MarcusPorcius!Cato,theYounger!PN} % {excluded\csuse{MarcusPorcius!Cato,theYounger!PN}} % {in another state.} % \end{enumerate} % \end{VerbatimOut} %^^A % \begin{Quote} % \VerbatimInput[gobble=0]{\jobname.tmp} % % \input{\jobname.tmp} % \end{Quote} % % This demonstrates the basic functioning of \textsf{nameauth}. The base name pattern always has an affix that tells what kind of name or related element it is, and in what context it belongs. Basic name patterns correlate with consistent index entries; printed name forms may vary. Western name patterns have a bang and a comma; Non-Western name patterns have a comma or nothing. % \begin{Center} % \begin{tabular}{lll}\toprule % \rowcolor{nagrey}^^A % \bfseries Text & \bfseries Basic Pattern & \bfseries Macro / Arguments\\ % % \Harnack[Adolf von] & \texttt{\NameauthPattern} & % \cmd{\Harnack[Adolf von]}\\ % \LHarnack & \texttt{\NameauthPattern} & % \cmd{\LHarnack}\\ % % \rowcolor{nagrey}^^A % \ForgetThis\Patton & \texttt{\NameauthPattern} & % \cmd{\ForgetThis}\cmd{\Patton}\\ % \rowcolor{nagrey}^^A % \DropAffix\LPatton & \texttt{\NameauthPattern} & % \cmd{\DropAffix}\cmd{\LPatton}\\ % % \ForgetThis\Noguchi & \texttt{\NameauthPattern} & % \cmd{\ForgetThis}\cmd{\Noguchi}\\ % \RevName\LNoguchi\dag & \texttt{\NameauthPattern} & % \cmd{\RevName}\cmd{\LNoguchi}\cmd{\dag}\\ % % \rowcolor{nagrey}^^A % \ForgetThis\Yamt & \texttt{\NameauthPattern} & % \cmd{\ForgetThis}\cmd{\Yamt}\\ % \rowcolor{nagrey}^^A % \RevName\LYamt & \texttt{\NameauthPattern} & % \cmd{\RevName}\cmd{\LYamt}\\ % % \Name{Henry,VIII} & \texttt{\NameauthPattern} & % \cmd{\Name\{Henry,VIII\}}\\ % \Name*{Henry}[VIII]\ddag & \texttt{\NameauthPattern} & % \cmd{\Name*\{Henry\}[VIII]}\cmd{\ddag}\\ % % \rowcolor{nagrey}^^A % \Dem[I Soter] & \texttt{\NameauthPattern} & \cmd{\Dem[I Soter]}\\ % \rowcolor{nagrey}^^A % \LDem & \texttt{\NameauthPattern} & \cmd{\LDem}\\ % % \ForgetThis\Aris & \texttt{\NameauthPattern} & % \cmd{\ForgetThis}\cmd{\Aris}\\\bottomrule % \end{tabular} % \end{Center} % % Six suffixes are added to name patterns to create six ``systems'' or data sets. Regarding their IDs, shown below, see also page~\pageref{page:NameState}. The \texttt{!MN} and \texttt{!NF} systems control name formatting. Macros in Section~\ref{sec:AKA} use the \texttt{!PN} system with formatting. Indexing involves the \texttt{!PN}, \texttt{!PRE}, and \texttt{!TAG} systems. Name tags use the \texttt{!DB} system. % \begin{Center} % \begin{tabular}{llll}\toprule % \rowcolor{nagrey}^^A % \bfseries Description & \bfseries ID & \bfseries Pattern & \bfseries Notes\\ % % Main-matter names & main & \meta{pattern}\texttt{!MN} & % expands to empty string\\ % % Front-matter names & front & \meta{pattern}\texttt{!NF} & % expands to empty string\\ % % Index cross-refs & xref & \meta{pattern}\texttt{!PN} & % expands to empty string\\ % % \rowcolor{nagrey}^^A % Exclusions & excl & \meta{pattern}\texttt{!PN} & % expands to exclusion value\\ % % Index sort tags & pretag & \meta{pattern}\texttt{!PRE} & % expands to tag value\\ % % Index tags & idxtag & \meta{pattern}\texttt{!TAG} & % expands to tag value\\ % % Name tags & namedb & \meta{pattern}\texttt{!DB} & % expands to tag value\\\bottomrule % \end{tabular} % \end{Center} % % Next we see how certain macros write patterns to systems, indicated by black boxes. \cmd{\IndexName} does not generate a name pattern; it only creates an index page entry, depending on the cross-references that control the index logic. % \begin{Center} % \begin{tabular}{lcccccc}\toprule[1pt] % \bfseries Macros & \bfseries \ttfamily \,!NF\, & \bfseries \ttfamily \,!MN\, & % \bfseries \ttfamily \,!PN\, & \bfseries \ttfamily !PRE & % \bfseries \ttfamily !TAG & \bfseries \ttfamily \,!DB\,\\\midrule % \cmd{\Name} \cmd{\Name*} \cmd{\FName} \cmd{\FName*} & \YES & \YES & \NO & % \NO & \NO & \NO\\ % \cmd{\ForgetName} \cmd{\SubvertName} & \YES & \YES & \NO & % \NO & \NO & \NO\\\midrule % \cmd{\PName} \cmd{\PName*} & \YES & \YES & \YES & \NO & \NO & \NO\\\midrule % \cmd{\AKA} \cmd{\AKA*} \cmd{\IndexRef} & \NO & \NO & \YES & % \NO & \NO & \NO\\ % \cmd{\ExcludeName} & \NO & \NO & \YES & \NO & \NO & \NO\\ % \cmd{\IncludeName} \cmd{\IncludeName*} & \NO & \NO & \YES & % \NO & \NO & \NO\\\midrule % \cmd{\IndexName} & \NO & \NO & \NO & \NO & \NO & \NO\\\midrule % \cmd{\PretagName} & \NO & \NO & \NO & \YES & \NO & \NO\\\midrule % \cmd{\TagName} \cmd{\UntagName} & \NO & \NO & \NO & % \NO & \YES & \NO\\\midrule % \cmd{\NameAddInfo} \cmd{\NameClearInfo} & \NO & \NO & \NO & % \NO & \NO & \YES\\\bottomrule % \end{tabular} % \end{Center} % % \subsection{Name Uniqueness} % \label{sec:Unique} % % We disable indexing for the examples below. Grouping tokens \texttt{\bfseries\{\,\}} do not appear in the text, but they do appear in the name patterns. The same goes for non-printing macros, such as \cmd{\empty}. Thus, all names below are unique, as the ``first-use'' color shows. Even if they look alike in the text, they have different name patterns and different index entries. See also Sections~\ref{sec:NamePatterns}, \ref{sec:Noexpand}, and~\ref{sec:IndexSort}. % \newcommand\MyType % {\dotfill\ifNameauthWestern Western name \else Non-Western name\fi} % \begin{enumerate}\IndexInactive % \item \Name[one]{two} % |\Name[one]{two}|\\ % Pattern: \texttt{\ShowPattern{}} \MyType % % \item \Name[{one}]{{two}} % |\Name[{one}]{{two}}|\footnote{The grouping tokens for the mandatory argument remain, while those of the optional argument go away. This ia a function of the \textsf{xparse} package. If one plugs the arguments directly into \cmd{\@nameauth@LoadArgs} and \cmd{\@nameauth@Choice}, they are not expanded unevenly. Still, the benefits of \textsf{xparse} outweigh the downsides. The takeaway here is to check the name pattern when debugging.}\\ % Pattern: \texttt{\ShowPattern{}} \MyType % % \item \Name[one]{\empty two} % |\Name[one]{\empty two}|\\ % Pattern: \texttt{\ShowPattern{}} \MyType % % \item \Name{one, two} % |\Name{one, two}|\\ % Pattern: \texttt{\ShowPattern{}} \MyType % % \item \Name{{one}, {two}} % |\Name{{one}, {two}}|\\ % Pattern: \texttt{\ShowPattern{}} \MyType % % \item \Name{{one, two}} % |\Name{{one, two}}|\\ % Pattern: \texttt{\ShowPattern{}} \dotfill(Malformed \meta{SNN}) % \end{enumerate}\IndexActive % \negmedskip % \begin{InfoBox} % In \meta{SNN\textbf{,}Affix} apply macros seperately to \meta{SNN} and \meta{Affix}. % \end{InfoBox} % % There are several ways to make different names out of otherwise identical names. They vary in complexity. Among the methods we have: % \begin{itemize} % \item Index tags (\cmd{\TagName}, Section~\ref{sec:IdxIdent}) can create different index entries for otherwise identical names. This requires keeping track of the context and where one changes those tags. % % \item Non-printing tokens and macros in name arguments help one to assign unique patterns for similar index and name tags (Sections~~\ref{sec:IdxIdent} and~\ref{sec:DataTags}). This requires one to sort names with \cmd{\PretagName} (Section~\ref{sec:IndexSort}). % % \item If such macros are at the leading edge of a name instead of the trailing edge, or if any macros might expand differently at different times, one may need to use \cmd{\noexpand} and alternate formatting (Section~\ref{sec:Noexpand}). % \end{itemize} % % \NameArgWarning % % \newpage % % \subsection{Indexing States} % \label{sec:RuleStates} % % Six distinct ``states'' describe any name pattern with respect to page entries and cross-references in the index. While it may seem odd to discuss this here, this information relates directly to \cmd{\ShowNameState}, and these states are not reflected \emph{as such} by the indexing macros. They are derived from a matrix of Boolean flags and control sequences, serving more as a useful debugging mnemonic for package users. Below we show what these states mean.\medskip % % \begin{tcolorbox} % [colback=white,colframe=darkgray, % adjusted title={\bfseries\hfil \hypertarget{State 1}{State 1}: No Name Information Present}] % \footnotesize % \begin{itemize}[leftmargin=1em,rightmargin=1em] % \item \Stay{\cmd{\IndexName} makes index page entry, % creates no name pattern control sequence}{1} % % \item \Stay{\cmd{\TagName} makes index tag, creates a pattern % ending in \texttt{!TAG}; \cmd{\UntagName} destroys it}{1} % % \item \Stay{\cmd{\PretagName} makes index sort tag, creates a % pattern ending in \texttt{!PRE} (do only once)}{1} % % \item \Stay{\cmd{\ForgetName} is redundant; it cannot destroy % a control sequence that does not exist.}{1} % % \item \Go{Naming macro makes name pattern (\texttt{!MN} or % \texttt{!NF}), prints name, makes two index page entries}{2} % % \item \Go{\cmd{\SubvertName} makes a name pattern ending % either in \texttt{!MN} or in \texttt{!NF}, or both at once}{2} % % \item \Go{\cmd{\IndexRef} makes an xref pattern ending with % \texttt{!PN}; that pattern expands to empty}{3} % % \item \Go{\cmd{\SeeAlso}\cmd{\IndexRef} makes an xref pattern % ending with \texttt{!PN}; that pattern expands to empty}{3} % % \item \Go{\cmd{\ExcludeName} makes an xref pattern ending with % \texttt{!PN}; that pattern expands to \texttt{!x!}}{5} % \end{itemize} % \end{tcolorbox} % \medskip % % \begin{tcolorbox} % [colback=white,colframe=darkgray, % adjusted title={\bfseries\hfil \hypertarget{State 2}{State 2}: Only a Name Pattern Exists}] % \footnotesize % \begin{itemize}[leftmargin=1em,rightmargin=1em] % \item \Stay{\cmd{\IndexName} makes index page entry, creates % no name pattern control sequence}{2} % % \item \Stay{\cmd{\TagName} makes index tag, creates a pattern % ending in \texttt{!TAG}; \cmd{\UntagName} destroys it}{2} % % \item \Stay{\cmd{\PretagName} is doable, but not recommended % (that will create spurious entries)}{2} % % \item \Stay{Naming macro makes name pattern (\texttt{!MN} or % \texttt{!NF}), prints name, makes two index page entries}{2} % % \item \Stay{\cmd{\SubvertName} is redundant; it cannot create % a control sequence that already exists.}{2} % % \item \Stay{\cmd{\IndexRef} by itself does nothing because a % name pattern already exists}{2} % % \item \Go{\cmd{\ForgetName} destroys a name pattern ending in % \texttt{!MN}, \texttt{!NF}, or both at once}{1} % % \item \Go{\cmd{\SeeAlso}\cmd{\IndexRef} makes an xref pattern % ending with \texttt{!PN}; that pattern expands to empty}{4} % % \item \Go{\cmd{\ExcludeName} makes an xref pattern ending with % \texttt{!PN}, that pattern expands to \texttt{!x!}}{6} % \end{itemize} % \end{tcolorbox} % \medskip % % \begin{tcolorbox} % [colback=white,colframe=darkgray, % adjusted title={\bfseries\hfil \hypertarget{State 3}{State 3}: Only an Xref Pattern Exists}] % \footnotesize % \begin{itemize}[leftmargin=1em,rightmargin=1em] % \item \Stay{\cmd{\PretagName} is doable, but not recommended % (that will create spurious entries)}{3} % % \item \Stay{\cmd{\TagName}, \cmd{\UntagName}, \cmd{\IndexName}, % \cmd{\IndexRef} (also with \cmd{\SeeAlso}), \cmd{\ExcludeName}, % and \cmd{\IncludeName} do nothing}{3} % % \item \Stay{\cmd{\ForgetName} is redundant; it cannot destroy % a control sequence that does not exist.}{3} % % \item \Go{\cmd{\Includename*} destroys an extant xref pattern % (\texttt{!PN})}{1} % % \item \Go{Naming macro makes name pattern (\texttt{!MN} or % \texttt{!NF}), prints name, makes no index entries}{4} % % \item \Go{\cmd{\SubvertName} creates a name pattern ending % either in \texttt{!MN} or in \texttt{!NF}, or both at once}{4} % \end{itemize} % \end{tcolorbox} % \medskip % % \begin{tcolorbox} % [colback=white,colframe=darkgray, % adjusted title={\bfseries\hfil \hypertarget{State 4}{State 4}: Both Name and % Xref Patterns Exist}] % \footnotesize % \begin{itemize}[leftmargin=1em,rightmargin=1em] % \item \Stay{\cmd{\PretagName} is doable, but not recommended % (that will create spurious entries)}{4} % % \item \Stay{\cmd{\TagName}, \cmd{\UntagName}, \cmd{\IndexName}, % \cmd{\IndexRef} (also with \cmd{\SeeAlso}), \cmd{\ExcludeName}, % and \cmd{\IncludeName} do nothing}{4} % % \item \Stay{Naming macro makes name pattern (\texttt{!MN} or % \texttt{!NF}), prints name, makes no index entries}{4} % % \item \Stay{\cmd{\SubvertName} is redundant; it cannot create % a control sequence that already exists.}{4} % % \item \Go{\cmd{\Includename*} destroys an extant xref pattern % (\texttt{!PN})}{2} % % \item \Go{\cmd{\ForgetName} destroys a name pattern ending in % \texttt{!MN}, \texttt{!NF}, or both at once}{3} % \end{itemize} % \end{tcolorbox} % \medskip % % \begin{tcolorbox} % [colback=white,colframe=darkgray, % adjusted title={\bfseries\hfil \hypertarget{State 5}{State 5}: Only an Exclusion Exists}] % \footnotesize % \begin{itemize}[leftmargin=1em,rightmargin=1em] % \item \Stay{\cmd{\PretagName} is doable, but not recommended % (that will create spurious entries)}{5} % % \item \Stay{\cmd{\TagName}, \cmd{\UntagName}, \cmd{\IndexName}, % \cmd{\IndexRef} (also with \cmd{\SeeAlso}), and % \cmd{\ExcludeName} do nothing}{5} % % \item \Stay{\cmd{\ForgetName} is redundant; it cannot destroy % a control sequence that does not exist.}{5} % % \item \Go{\cmd{\Includename}, \cmd{\Includename*} destroy xref % pattern ending with \texttt{!PN}, expanding to \texttt{!x!}}{1} % % \item \Go{Naming macro makes name pattern (\texttt{!MN} or % \texttt{!NF}), prints name, makes no index entries}{6} % % \item \Go{\cmd{\SubvertName} creates a name pattern ending either % in \texttt{!MN} or in \texttt{!NF}, or both at once}{6} % \end{itemize} % \end{tcolorbox} % \medskip % % \begin{tcolorbox} % [colback=white,colframe=darkgray, % adjusted title={\bfseries\hfil \hypertarget{State 6}{State 6}: Both Name Pattern and % Exclusion Exist}] % \footnotesize % \begin{itemize}[leftmargin=1em,rightmargin=1em] % \item \Stay{\cmd{\PretagName} is doable, but not recommended % (that will create spurious entries)}{6} % % \item \Stay{\cmd{\TagName}, \cmd{\UntagName}, \cmd{\IndexName}, % \cmd{\IndexRef} (also with \cmd{\SeeAlso}), and % \cmd{\ExcludeName} do nothing}{6} % % \item \Stay{Naming macro makes name pattern (\texttt{!MN} or % \texttt{!NF}), prints name, makes no index entries}{6} % % \item \Go{\cmd{\Includename}, \cmd{\Includename*} destroy xref % pattern ending with \texttt{!PN}, expanding to \texttt{!x!}}{2} % % \item \Go{\cmd{\ForgetName} destroys a name pattern ending in % \texttt{!MN}, \texttt{!NF}, or both at once}{5} % \end{itemize} % \end{tcolorbox} % % \subsection{Using \texttt{\textbackslash noexpand}} % \label{sec:Noexpand} % % The natural-language approach of \textsf{nameauth}, combined with requirements of indexing, requires strict control over macro expansion. We use \cmd{\noexpand} in name arguments for the following reasons: % \begin{itemize} % \item A name uses the hyphenation of a foreign language via macros in name arguments. % % \item Name elements change within the local scope of formatting hooks, but remain uniform globally when generating index entries. This is the crux of alternate formatting (Section~\ref{sec:AltFormat}). % % \item A name specifically uses the alternate form of \cmd{\CapThis} via alternate formatting (Section~\ref{sec:AltCaps}). % % \item There is a possibility that macros in name arguments might expand unpredictably in different situations, resulting in spurious index entries and name pattern tests failing in some cases. % \end{itemize} % % If a macro is undefined, even putting \cmd{\noexpand} before it will cause an error unless the macro is detokenized or verbatim. To avoid some errors, one can apply macros separately to \meta{SNN} and \meta{Affix}: % \begin{Quote} % |\Name{\noexpand\MyMacro{|\meta{SNN}|},\noexpand\MyMacro{|\meta{Affix}|}}| % \end{Quote} % % \begin{Quotation}{\Einstein} % {Letter to \Name[Max]{Born}, 4 December 1928} % \de{Die Quantenmechanik ist sehr achtunggebietend. Aber eine innere % Stimme sagt mir, daß das noch nicht der wahre Jakob ist. Die Theorie % liefert viel, aber dem Geheimnis des Alten bringt sie uns kaum näher. % Jedenfalls bin ich überzeugt, daß der nicht würfelt.} % % (Quantum mechanics is quite significant. But an inner voice tells me % that it is not yet the right [path]. The theory delivers much, but % it brings us hardly any closer to the secret of the Ancient of Days. % In any case, I am convinced that He does not throw dice.) % \index{scientists, quotes of\noexpand\string|hyperpage} % \end{Quotation} % % \newpage % % \subsection{Debugging Macros} % \label{sec:DebuggingMacros} % % These macros never grant users access to the full internal name patterns used by \textsf{nameauth}, but they do query those patterns. These macros help users identify how their intent to use the naming and other macros correlates with what the macros are seeing as input and how they are functioning. % % \DescribeMacro{\ShowPattern} % Although \cmd{\NameauthPattern} is useful in hooks when you want the pattern of the last name evaluated, \cmd{\ShowPattern} offers both that function, when called with a null argument, as well as the ability to display any pattern according to the name arguments provided to it: % % \begin{SyntaxBox} % \cmd{\ShowPattern}\oarg{FNN}\marg{SNN\textbf{,}Affix}\oarg{Alternate}\\ % \cmd{\ShowPattern\{\}} % \end{SyntaxBox} % % \begin{itemize} % \item Let us refer to the name \LAeth. \cmd{\ShowPattern\{\}} now gives us the pattern: \ShowPattern{}. \cmd{\NameauthPattern} also: \NameauthPattern.\footnote{This again is due to using \textsf{inputenc} and \textsf{fontenc}.} % % \item |\ShowPattern[Hernando]{de~Soto}| prints: \ShowPattern[Hernando]{de~Soto}\JustIndex\Soto. Since the name arguments were evaluated, now \cmd{\ShowPattern\{\}} gives us the pattern: \ShowPattern{}. % % \item Section~\ref{sec:NameArgMacros} lists all the macros that change the current name pattern. % \end{itemize} % % \DescribeMacro{\ShowIdxPageref} % \cmd{\ShowIdxPageref} shows how macro arguments generate an index page reference, regardless of whether or not that page reference or cross-reference actually exists. Internally, it puts the indexing mechanism into a state that will print a full page reference in the text. % % \begin{SyntaxBox} % \cmd{\ShowIdxPageref\ }\oarg{FNN}\marg{SNN\textbf{,}Affix}\oarg{Alternate}\\ % \cmd{\ShowIdxPageref\{\}} % \end{SyntaxBox} % % Index styles, \cmd{\PretagName}, and \cmd{\TagName} affect the output of \cmd{\ShowIdxPageref}. Active characters and macros appear as they would be printed in the text, not as they may be represented in the \texttt{idx} file. One should check that too when debugging. % % In a normal \LaTeX\ document, for example, if we mention \LSoto\ after setting up a sort tag (Section~\ref{sec:IndexSort}), we get the following: % \begin{Quote} % \IndexActual{@} % \UntagName[Hernando]{de~Soto} % \ShowIdxPageref{} % % |\PretagName[Hernando]{de~Soto}{Desoto, Hernando}|\\ % |\ShowIdxPageref[Hernando]{de~Soto}| % \end{Quote} % % A \texttt{dtx} file uses a different default for \cmd{\IndexActual} (Section~\ref{sec:IndexSort}). Since we tag all names in this \texttt{dtx} file with \cmd{\TagName} to have hyperlinked index page references (Section~\ref{sec:IndexTag}), we instead have here: % \begin{Quote} % \IndexActual{=} % \TagName[Hernando]{de~Soto}{\string|hyperpage} % \ShowIdxPageref{} % % |\ShowIdxPageref[Hernando]{de~Soto}| % \end{Quote} % % \newpage % % \DescribeMacro{\ShowIdxPageref*} % Throughout this manual, \cmd{\ShowIdxPageref*} illustrates basic index entries that do not contain sorting information or tags. The syntax is: % % \begin{SyntaxBox} % \cmd{\ShowIdxPageref*}\oarg{FNN}\marg{SNN\textbf{,}Affix}\oarg{Alternate}\\ % \cmd{\ShowIdxPageref*\{\}} % \end{SyntaxBox} % % Regardless of whether we have a normal \LaTeX\ document or a \texttt{dtx} file, we get:\JustIndex\Soto % \begin{Quote} % |\ShowIdxPageref*[Hernando]{de~Soto}|\\ % \ShowIdxPageref*{} % \end{Quote} % % \DescribeMacro{\ShowNameInfo} % Here we can see how the macros that take name arguments interpret them. We can check our intent against what the package actually sees as input. When we use a null argument, \cmd{\ShowNameInfo} uses the token registers that contain the arguments of the last name arguments that were evaluated. % % \begin{SyntaxBox} % \cmd{\ShowNameInfo}\oarg{FNN}\marg{SNN\textbf{,}Affix}\oarg{Alternate}\\ % \cmd{\ShowNameInfo\{\}} % \end{SyntaxBox} % % Next we use \cmd{\ShowNameInfo} to illustrate detokenized name arguments from a number of names. This approach both prevents potential errors and discloses macros in name arguments. The ``Affix*'' and ``Alt*'' designations have an asterisk because, while those are the syntactic terms that describe name macro arguments, those terms do not describe the exact cultural meaning of their contents. % \begin{itemize}\small % \item \Name*[J.E.]{Carter, Jr.}[James Earl]\dotfill^^A % |\Name*[J.E.]{Carter, Jr.}[James Earl]| % \item[] \ShowNameInfo{} % % \item \Name*{Miyazaki, Hayao}[Sensei]\dotfill^^A % |\Name*{Miyazaki, Hayao}[Sensei]| % \item[] \ShowNameInfo{} % % \item \Name*{Elizabeth, I}[I, ``Gloriana'']\dotfill^^A % |\Name*{Elizabeth, I}[I, ``Gloriana'']| % \item[] \ShowNameInfo{} % % \item \Name*{Henry}[VIII]\ddag\dotfill |\Name*{Henry}[VIII]\ddag| % \item[] \ShowNameInfo{} % % \item \Name*{Confucius}\dotfill |\Name*{Confucius}| % \item[] \ShowNameInfo{} % \end{itemize} % % \NameArgWarning % % When using macros in name arguments, \cmd{\ShowNameInfo} may give different results, depending on the use of \cmd{\noexpand} and the name interface. Macros in name arguments may be displayed with trailing spaces because \textsf{nameauth} uses \cmd{\protected@edef} when parsing name elements. We show how to mitigate these issues. In the following name examples, we assume that the \cmd{\de} macro was defined to use \textsf{babel}, as in Section~\ref{sec:HyphNames}. % \begin{itemize}\footnotesize % \item The macro in these arguments expands, which can change name patterns. % \item[] \ShowNameInfo[John]{\de{Strietelmeier}}\\ % |\ShowNameInfo[John]{\de{Strietelmeier}}| % % \item The macro in these arguments stays consistent due to \cmd{\noexpand}. % \item[] \ShowNameInfo[John]{\noexpand\de{Strietelmeier}}\\ % |\ShowNameInfo[John]{\noexpand\de{Strietelmeier}}| % \end{itemize} % % \begin{Quote} % \begin{Verbatim} % \begin{nameauth} % \< Striet & John & \noexpand\de{Strietelmeier} & > % \end{nameauth} % \NameAddInfo[John]{\noexpand\de{Strietelmeier}} % {professor} % \end{Verbatim} % \end{Quote} % % \NameAddInfo[John]{\noexpand\de{Strietelmeier}} % {professor} % \begin{itemize} % \item \ForgetThis \Striet\dotfill \cmd{\Striet}\\ % With the first use of the name, we note the info. % \begin{itemize} % \item \NameQueryInfo{}\dotfill |\NameQueryInfo{}| % \item \ShowPattern{}\dotfill |\ShowPattern{}| % \item \ShowNameInfo{}\dotfill |\ShowNameInfo{}| % \end{itemize} % % \item \Striet\dotfill \cmd{\Striet}\\ % The name is repeated; the same pattern recurs. % \begin{itemize} % \item \NameQueryInfo{}\dotfill |\NameQueryInfo{}| % \item \ShowPattern{}\dotfill |\ShowPattern{}| % \item \ShowNameInfo{}\dotfill |\ShowNameInfo{}| % \end{itemize} % % \item \Name[John]{\noexpand\de{Strietelmeier}}\dotfill^^A % |\Name[John]{\noexpand\de{Strietelmeier}}|\\ % We use the same name again, but with the basic interface. % The name pattern still works, but \cmd{\ShowNameInfo} % expands the arguments after pulling them from the internal % token registers. We no longer refer to these registers for % use in customization in order to avoid errors. % \begin{itemize}\footnotesize % \item \NameQueryInfo{}\dotfill |\NameQueryInfo{}| % \item \ShowPattern{}\dotfill |\ShowPattern{}| % \item \ShowNameInfo{}\\ % |\ShowNameInfo{}| % \end{itemize} % % \item \Name[John]{\noexpand\de{Strietelmeier}}\dotfill^^A % |\Name[John]{\noexpand\de{Strietelmeier}}|\\ % This expansion is hidden when using full name arguments everywhere. % \begin{itemize} % \item \NameQueryInfo[John]{\noexpand\de{Strietelmeier}}\\ % |\NameQueryInfo[John]{\noexpand\de{Strietelmeier}}| % \item \ShowPattern[John]{\noexpand\de{Strietelmeier}}\\ % |\ShowPattern[John]{\noexpand\de{Strietelmeier}}| % \item \ShowNameInfo[John]{\noexpand\de{Strietelmeier}}\\ % |\ShowNameInfo[John]{\noexpand\de{Strietelmeier}}| % \end{itemize} % \end{itemize} % % Thus, we rely on \cmd{\NameauthPattern} for name-related information instead of re-parsing name arguments. That is how recent versions of \cmd{\NameQueryInfo} work, simplifying the use of name tags in formatting hooks (Sections~\ref{sec:DataTags} and~\ref{sec:DataTagHooks}). % % \newpage % % Below we activate alternate formatting (Section~\ref{sec:AltFormat}) and use name forms seen in European academic writing. % \begin{AltFormatZone} % \begin{itemize} % \item \ForgetThis \Cath % \item[] \ShowNameInfo{} % % \item \ForgetThis \Luth % \item[] \ShowNameInfo{} % \end{itemize} % \end{AltFormatZone} % % \phantomsection % \label{page:NameState} % \DescribeMacro{\ShowNameState} % With these macros we can see in plain text the name pattern, the name type, the current index state of the name, % \DescribeMacro{\ShowNameState*} % and all the systems with which its pattern is associated. The un-starred form prints the information in one long line of text. The starred form prints five shorter lines of text, each ending with |\par|. As with other macros in this section, these macros can have null arguments. % % \begin{SyntaxBox} % \cmd{\ShowNameState}\oarg{FNN}\marg{SNN\textbf{,}Affix}\oarg{Alternate}\\ % \cmd{\ShowNameState\{\}}\\[1ex] % \cmd{\ShowNameState*}\oarg{FNN}\marg{SNN\textbf{,}Affix}\oarg{Alternate}\\ % \cmd{\ShowNameState*\{\}} % \end{SyntaxBox} % Here is the key to understanding the output of these macros: % \begin{itemize}[leftmargin=4.3em] % \item[Pattern:] The base name pattern shown by \cmd{\NameauthPattern}. % % \item[Type:] The category of the name; how the name arguments were parsed: % \begin{itemize}[leftmargin=4.6em] % \item[w :] Western name % \item[nw :] Non-Western name, current syntax % \item[nw,os :] Non-Western name, obsolete syntax (Section~\ref{sec:Obsolete}) % \end{itemize} % % \item[State:] The index state, as defined in Section~\ref{sec:RuleStates}: % \begin{itemize}[leftmargin=4.6em] % \item[states :] 1, 2, 3, 4, 5, and 6 % \end{itemize} % % \item[Systems:] All the control systems (Section~\ref{sec:NamePatterns}) that the name pattern inhabits, including front matter, main matter, cross-references, excluded cross-references, index sorting tags, index tags, and name database tags: % \begin{itemize}[leftmargin=4.6em] % \item[systems :] front, main, xref, excl, pretag, idxtag, namedb. % \end{itemize} % \end{itemize} % We begin by showing info about some unused names that will not appear in the index. We add margin notes using \cmd{\ShowNameState*}, while using \cmd{\ShowNameState} in the body text. % \begin{itemize} % \item |\ShowNameState[Hieronymus]{Bosch}|\\ % \ShowNameState[Hieronymus]{Bosch} % \Info[-11.5ex]{\ShowNameState*{}} % \item |\ShowNameState{Tamerlane}|\\ % \ShowNameState{Tamerlane} % \Info[-7.5ex]{\ShowNameState*{}} % \end{itemize} % % \newpage % % Now we display the info for new and extant names in the text.\footnote{In a \texttt{dtx} file, with the \textsf{ltxdoc} class and \textsf{hypdoc} package, we tag all names in the index with hyperlinks (Section~\ref{sec:SpecialTag}). Otherwise, names need not have a pattern in the \texttt{idxtag} system.} % \begin{itemize} % \item \Name*[Rudolph]{Carnap}\dotfill |\Name*[Rudolph]{Carnap}|\\ % \ShowNameState{} % \Info[-9ex]{\ShowNameState*{}} % % \item \Name*{Henry, VIII}\dotfill |\Name*{Henry, VIII}|\\ % \ShowNameState{} % \Info[-5.5ex]{\ShowNameState*{}} % % \item \NamesInactive\Name*{Henry}[VIII]\ddag\NamesActive \dotfill^^A % |\NamesInactive|\\ % \hbox{}\hfill|\Name*{Henry}[VIII]\ddag|\\ % \hbox{}\hfill|\NamesActive|\\ % \ShowNameState{} % \Info[-7.5ex]{\ShowNameState*{}} % % \item \Name*{Thomas, à~Kempis}\dotfill |\Name*{Thomas, à~Kempis}| % \item[] \ShowNameState{}\footnote{This again is due to using \textsf{inputenc} and \textsf{fontenc}.} % \Info[-8ex]{\ShowNameState*{}} % \end{itemize} % Here is a name used only in a cross-reference:\footnote{Here we should populate the name arguments because the name has not appeared in the text.} % \begin{itemize} % \item |\IndexRef{Sun King}{Louis XIV}|\IndexRef{Sun King}{Louis XIV}\\ % \ShowNameState{Sun King} % \Info[-7ex]{\ShowNameState*{}} % \end{itemize} % Next is a name displayed after a cross-reference exists:\footnote{If the name is printed and \cmd{\ShowNameState} follows immediately, we can use a null argument.} % \begin{itemize} % \item \Name*{Sun King}\dotfill |\Name*{Sun King}|\\ % \ShowNameState{} % \Info[-7.5ex]{\ShowNameState*{}} % \end{itemize} % The following is an unused name excluded from the index:\footnote{Here we should populate the name arguments because the name has not appeared in the text.} % \begin{itemize} % \item |\ExcludeName{Santa, Claus}|\ExcludeName{Santa, Claus}\\ % \ShowNameState{Santa, Claus} % \Info[-7.5ex]{\ShowNameState*{}} % \end{itemize} % Finally we have a previously excluded name used in the text:\footnote{If the name is printed and \cmd{\ShowNameState} follows immediately, we can use a null argument.} % \begin{itemize} % \item \Name{Santa, Claus}\dotfill |\Name{Santa, Claus}|\\ % \ShowNameState{} % \Info[-7.5ex]{\ShowNameState*{}} % \end{itemize} % % \ReturnLink % % \begin{Quotation}{\Name[L.M.]{Montgomery}} % {\Title{Anne of Green Gables}, C 5 (1908)} % I read in a book once that a rose by any other name would smell as % sweet, but I've never been able to believe it. I don't believe a rose % \textsc{would} be as nice if it was called a thistle or a skunk cabbage. % \index{creatives, quotes of\noexpand\string|hyperpage} % \index{Rose, references to\noexpand\string|hyperpage} % \end{Quotation} % % \newpage % % \section{Indexing Macros} % \label{sec:Indexing} % % This section draws on what we have seen so far and applies that knowledge to creating indexes of names via the \textsf{nameauth} package macros, not indexing in general. % % \subsection{General Control} % \label{sec:GeneralIndex} % % Before we get to the topics of index entries and cross-references, we cover those macros that globally affect the indexing of names. % % \subsubsection{Toggle Indexing} % % \DescribeMacro{\IndexInactive} % \cmd{\IndexInactive} deactivates the indexing functions of the naming macros, as well as \cmd{\IndexName}, and \cmd{\IndexRef}. % \DescribeMacro{\IndexActive} % \cmd{\IndexActive} enables indexing. These can be used throughout the document. They do not affect indexing apart from \textsf{nameauth} names. % \begin{itemize} % \item \cmd{\IndexInactive} broadly suppresses \cmd{\IndexName}, \cmd{\IndexRef}, and the indexing components of naming macros, \cmd{\AKA}, and \cmd{\PName}. % % \item For a fine degree of control, see Section~\ref{sec:IdxFine}. % \end{itemize} % % \Global \cmd{\IndexActive} and \cmd{\IndexInactive} can be used as a pair or singly within a group. They have top priority (Section~\ref{sec:Priorities}). Use \cmd{\global} to force a global effect. % % \subsubsection{Multiple Indexes} % % \DescribeMacro{\NameauthIndex} % \LaTeX\ has various ways to produce multiple indexes; see \href{https://www.texfaq.org/FAQ-multind}{\bfseries this page}. \cmd{\NameauthIndex} is the indexing hook defined by default as \cmd{\index}. Users can redefine this hook for use with multiple indexes. Below we use the \textsf{index} package to do this. % \Info[4ex]{\hrule\strut Here we test indexing rules:\break % \Name{Yamaha, Torakusu}\label{page:Idx1}\break % create index entry:\break % \cmd{\IndexName}\texttt{\{Nippon Gakki\}}\IndexName{Nippon Gakki}\strut\hrule} %^^A % \ifdefined\NameauthDoTestFiles \edef\NameauthTestFile{test07_01.tex}\else % \edef\NameauthTestFile{\jobname.tmp}\fi %^^A % \begin{VerbatimOut}{\NameauthTestFile} % \documentclass{article} % \input{compat.tex} % Included with nameauth for compatibility. % % \usepackage{makeidx} % Must have for defining \seealso macro. % \usepackage{index} % \usepackage{nameauth} % % \makeindex % Default index % \newindex{per}{rdx}{rnd}{Index of Persons} % Other index % \renewcommand*\NameauthIndex{\index[per]} % % \begin{document} % The Electric Boogaloo\index{Boogaloo, Electric} % main index % was created by \Name{Ollie~\& Jerry}. % name index % % \printindex[per] % Shows the entry: Ollie & Jerry, 1 % % \renewcommand\indexname{Index of Subjects} % \printindex % Shows the entry: Boogaloo, Electric, 1 % \end{document} % \end{VerbatimOut} %^^A % \begin{Quote} % \VerbatimInput[gobble=0]{\NameauthTestFile} % \end{Quote} % % \newpage % % \subsubsection{Verbose Warnings} % % \DescribeMacro{\IndexWarnVerbose} % As with many of the other options in \textsf{nameauth}, we have added two macros that toggle verbose index warnings like the \texttt{verbose} option (default is terse). % \DescribeMacro{\IndexWarnTerse} % To disable verbose warnings, use \cmd{\IndexWarnTerse}. To enable verbose warnings, use the \texttt{verbose} option or \cmd{\IndexWarnVerbose}. % % \Global \cmd{\IndexWarnVerbose} and \cmd{\IndexWarnTerse} can be used as a pair or singly within a group. They have the same priority as the \texttt{verbose} option, but they do not affect what is displayed in the document. Use \cmd{\global} to force a global effect. % % \subsubsection{Index Protection} % % \DescribeMacro{\IndexProtect} % This macro prevents naming macros from producing output, both in the text and in the index. It is local in scope. Its primary use is to prevent errors in the index, in case the naming macros get passed as arguments to themselves or passed into index entries by mistake. The core naming engine uses internal locks to protect against this problem in the text. % One can use \cmd{\IndexProtect} right before \cmd{\printindex} to protect the index against bogus output. For example: % \Info[4ex]{\hrule\strut Here we test indexing rules:\break % \Name{Yamaha, Torakusu}\label{page:Idx2}\strut\hrule} % \begin{itemize} % \item |\Name{foo\Name{bar}}| in the text generates \Name{foo\Name{bar}}. Notice that the internal locks prevent |\Name{bar}| from producing output in the text. % % \item The first \LaTeX\ pass creates |\indexentry{foo\Name {bar}}| in the \texttt{idx} file. With enough passes of \LaTeX\ and \texttt{makeindex}, in the \texttt{ind} file we get both |\item foo\Name {bar}| from the text and an additional |\item bar| from the macro executed in the index. % % \item That gives one index entry ``foo{\NamesFormat bar}'' and another entry ``bar''. % % \item Using \cmd{\IndexProtect} \cmd{\printindex} still permits the index entry generated by |\item foo\Name {bar}|, but it does not allow |\Name {bar}| to generate any output or additional entries in the index. % % \item We get only one entry ``foo'', similar to what we see in the text.\footnote{We add the index tag \S\ to this example to show that it is a made-up name.} % \end{itemize} % % \subsection{Page Entries} % \label{sec:IndexPageno} % % \DescribeMacro{\IndexName} % The internal version of this macro is used also by the naming macros. This is the user interface to create index page entries in the same way that the naming macros do. \cmd{\IndexName} prints nothing in the body text. % % \begin{SyntaxBox} % \cmd{\IndexName}\oarg{FNN}\marg{SNN\textbf{,}Affix}\oarg{Alternate} % \end{SyntaxBox} % % If \meta{FNN} is present, it ignores \meta{Alternate} for Western and ``native'' Eastern name forms. If \meta{FNN} is absent, \cmd{\IndexName} can use either the current or the obsolete Non-Western syntax (Section~\ref{sec:Obsolete}). Indexing follows guidelines in [\hyperlink{Mulvany}{Mulvany}, 152--82]. The following points also deal with macros explained in Section~\ref{sec:IdxPrefix}. % \begin{itemize} % \item \cmd{\IndexName} obeys both \cmd{\IndexInactive} and \cmd{\IndexActive}, which are used to deactivate and activate indexing. % % \item \cmd{\IndexName} does not obey \cmd{\SkipIndex}. The latter only works with macros that display a name in the text, which \cmd{\IndexName} does not. % % \item \cmd{\IndexName} will not make page entries for any names that are excluded by \cmd{\ExcludeName}. Nor will it make entries names that have been used to create cross-references. % % \item \cmd{\IndexName} resets the effects of both \cmd{\SeeAlso} and \cmd{\SkipIndex} unless one uses the \texttt{oldreset} option. % % \item Section~\ref{sec:IdxPrefix} shows behavior among \cmd{\SkipIndex}, \cmd{\JustIndex}, and the naming macros that differs from the same macros and \cmd{\IndexName}. % \end{itemize} % % \subsection{Cross-References} % \label{sec:IndexRef} % % Index cross-references have two kinds. \textit{See} references only point from a name to other name entries containing page entries. \textit{See also} references occur at the end of an entry with page entries or sub-entries. % % \subsubsection[Basic Macro]{Basic Macros for Both Kinds of Xrefs} % % \DescribeMacro{\IndexRef} % By default, \cmd{\IndexRef} creates a \textit{see} reference from the name defined by its first three arguments to the target in its final argument. To create a \textit{see also} reference, one must precede it with \cmd{\SeeAlso} (Section~\ref{sec:IdxPrefix}). Thus, the two forms used are: % % \begin{SyntaxBox} % \phantom{\cmd{\SeeAlso}}\cmd{\IndexRef}\oarg{FNN}\marg{SNN^^A % \textbf{,}Affix}\oarg{Alt.}\marg{Target}\\ % \cmd{\SeeAlso}\cmd{\IndexRef}\oarg{FNN}\marg{SNN^^A % \textbf{,}Affix}\oarg{Alt.}\marg{Target} % \end{SyntaxBox} % % Although it might be redundant to point this out, in practice, when using \cmd{\IndexName} and \cmd{\IndexRef}, one might forget that the latter has four arguments, at least two of which are required. Missing text and bad xrefs can result. % \begin{itemize} % \item Define \textit{see} references \emph{before} making any \cmd{\Name} entries for them. % % \Info[-2ex]{\hrule\strut Here we test indexing rules:\break % Creating \textit{see also} xref\break\footnotesize % \cmd{\SeeAlso}\cmd{\IndexRef}\break\ttfamily % \{Yamaha, Torakusu\}\break % \{Nippon Gakki\}\SeeAlso\IndexRef{Yamaha, Torakusu}{Nippon Gakki}^^A % \label{page:Idx3}\strut\hrule} % % \item Define \textit{see also} references \emph{after} all \cmd{\Name} instances to the respective names have been created. % % \item \cmd{\IndexRef} will not alter or repeat extant cross-references. % % \item \cmd{\IndexRef} will not cross-reference names excluded by \cmd{\ExcludeName}. % % \item \cmd{\IndexRef} will not add a \textit{see} cross-reference that would map also to an extant name pattern, unless one uses the \texttt{oldsee} option. See Section~\ref{sec:RuleStates} for a state diagram that explains this in detail. A page entry usually correlates with a name pattern, but that may not always be the case. We check for a control sequence (name pattern). % % \item \cmd{\IndexName} resets the effects of both \cmd{\SeeAlso} and \cmd{\SkipIndex}, unless one uses the \texttt{oldreset} option. % % \item To have multiple names and cross-references interact, see Section~\ref{sec:IdxVariants}. % % \item To manage multiple sub-entries, see Section~\ref{sec:CatSub}. % \end{itemize} % % \newpage % % \cmd{\IndexRef} prints nothing in the text. The name parsing is like \cmd{\IndexName}. The final argument is not checked in any way. For example: % \begin{Quote} % \PatInfo[3.5ex]{\ShowPattern{Sun King}!PN} % \begin{tabular}{ll} % source: & \cmd{\IndexRef}\texttt{\{Sun King\}\{Louis XIV\}}^^A % \IndexRef{Sun King}{Louis XIV}\\[0.5ex] % index: & Sun King \textit{see} Louis XIV\\ % \end{tabular} % \end{Quote} % % \cmd{\IndexRef} will not merge multiple cross-references and it will not allow more than one cross-reference. For multiple cross-references one must use something like the following example, or create manual index entries: % \begin{Quote} % \begin{tabular}{ll} % source: & |\IndexRef{bar}{baz; foo}|\\[0.5ex] % index: & bar, \textit{see} baz; foo\\ % \end{tabular} % \end{Quote} % % \subsubsection[Fine Control]{Fine Control of Xref Logic} % \label{sec:IdxFine} % % The index control logic for cross-references can establish fine-grained control that excludes individual names. We trade more macros for more automation. % % \DescribeMacro{\ExcludeName} % We can prevent a name from being used as either an index entry or as an index cross-reference. This macro will not exclude extant cross-references: % % \begin{SyntaxBox} % \cmd{\ExcludeName}\oarg{FNN}\marg{SNN\textbf{,}Affix}\oarg{Alternate} % \end{SyntaxBox} % % Unlike \cmd{\IndexInactive} and \cmd{\IndexActive}, which affect all \textsf{nameauth} indexing, \cmd{\ExcludeName} only excludes a specific name from being printed as a page entry or cross-reference in the index. See the following example, as well as examples in Sections~\ref{sec:NameParticles} and \ref{sec:VarNames}. Indexing remains active: %^^A % \begin{VerbatimOut}{\jobname.tmp} % \ExcludeName{Mr. Baseball} % In this example we cannot get page entries for % \Name{Mr. Baseball}, the nickname of % \Name[Bob]{Uecker}, because it was excluded. % \end{VerbatimOut} %^^A % \begin{Quote} % \PatInfo[4ex]{\ShowPattern{Mr. Baseball}!PN\break % \ShowPattern[Bob]{Uecker}!MN} % \VerbatimInput[gobble=0]{\jobname.tmp} % % \input{\jobname.tmp} % \end{Quote} % % \DescribeMacro{\IncludeName} % Use the following macros to break a few indexing rules. They remove protections used for exclusion and cross-referencing. % \DescribeMacro{\IncludeName*} % They have the same syntax as \cmd{\ExcludeName}: % % \begin{SyntaxBox} % \cmd{\IncludeName\ }\oarg{FNN}\marg{SNN\textbf{,}Affix}\oarg{Alternate}\\ % \cmd{\IncludeName*}\oarg{FNN}\marg{SNN\textbf{,}Affix}\oarg{Alternate} % \end{SyntaxBox} % % \cmd{\IncludeName} removes an exclusion attached to a name by \cmd{\ExcludeName}. \cmd{\IncludeName*} completely erases both exclusion and cross-reference information. Once that protection is removed, one can create page entries to a name in the index that had been used as a cross-reference. % % Analogously, \cmd{\ForgetName} (Section~\ref{sec:NameControl}) removes name patterns, allowing one to create a cross-reference. Section~\ref{sec:RuleStates} explains this behavior as a set of states. Below we run some tests (cf. Section~\ref{sec:NameTests}). %^^A % \begin{VerbatimOut}{\jobname.tmp} % \begin{itemize} % \item \Name*{Mr. Baseball} is % \IfAKA{Mr. Baseball} % {\meta{an xref}}{\meta{a name}}{\meta{excluded}}. % % \item Making an xref fails.\IndexRef{Mr. Baseball}{Uecker, Bob} % \Name*{Mr. Baseball} is still % \IfAKA{Mr. Baseball} % {\meta{an xref}}{\meta{a name}}{\meta{excluded}}. % % \item The inclusion macro\IncludeName{Mr. Baseball} makes it % \IfAKA{Mr. Baseball} % {\meta{an xref}}{\meta{a name}}{\meta{excluded}}. % Now we could create page entries with a naming macro. % % \item Instead, we forget the name\ForgetName{Mr. Baseball} % to destroy the name pattern that governs the name. It is now % \IfAKA{Mr. Baseball} % {\meta{an xref}} % {\IfMainName{Mr. Baseball}{\meta{extant}} % {\IfFrontName{Mr. Baseball}{\meta{extant}} % {\meta{destroyed}}}} % {\meta{excluded}}. % % \item Making another xref\IndexRef{Mr. Baseball}{Uecker, Bob} creates % \IfAKA{Mr. Baseball} % {\meta{an xref}}{\meta{a name}}{\meta{excluded}}. % \end{itemize} % \end{VerbatimOut} %^^A % \begin{Quote} % \Info[3ex]{\hrule\strut Here we test indexing rules:\break % \Name{Yamaha, Torakusu}\label{page:Idx4}\strut\hrule} % \VerbatimInput[gobble=0]{\jobname.tmp} % % \input{\jobname.tmp} % \end{Quote} % % Cross-references get more protection than exclusions: % \PatInfo[3ex]{\ShowPattern[J.D.]{Rockefeller, IV}!MN\break % \ShowPattern[Jay]{Rockefeller}!PN\break % \ShowPattern[Jay]{Rockefeller}!MN} % \begin{VerbatimOut}{\jobname.tmp} % \begin{itemize} % \item \DropAffix\LJRIV[Jay] was indexed as % ``\ShowIdxPageref*[J.D.]{Rockefeller, IV}.'' % % \item We create the % xref\IndexRef[Jay]{Rockefeller}{Rockefeller, J.D., IV}. % % \item The test calls \SJRIV[Jay] an % \IfAKA[Jay]{Rockefeller}{\meta{xref}}{\meta{name}}{}. % % \item After being ``included''\IncludeName[Jay]{Rockefeller} % he still is an % \IfAKA[Jay]{Rockefeller}{\meta{xref}}{\meta{name}}{}. % % \item After ``forced inclusion''\IncludeName*[Jay]{Rockefeller} % he can be a \IfAKA[Jay]{Rockefeller}{\meta{xref}}{\meta{name}}{} % and create page entries. % \end{itemize} % \end{VerbatimOut} %^^A % \begin{Quote} % \VerbatimInput[gobble=0]{\jobname.tmp} % % \input{\jobname.tmp} % \end{Quote} % % \begin{InfoBox} % Using \cmd{\IncludeName*} is necessary when creating index sub-entries for a name using \cmd{\IndexTag}. If one creates a cross-reference in any sub-entry of a name, \cmd{\IncludeName*} will permit additional page entries to be made for the other sub-entries of that name or for the name itself. See Section~\ref{sec:CatSub}. % \end{InfoBox} % % \subsection[Prefix Macros]{Prefix Macros Used for Indexing} % \label{sec:IdxPrefix} % % Indexing macros ignore Boolean flags meant for naming macros. Yet there are three prefix macros that affect indexing: \cmd{\SeeAlso}, \cmd{\SkipIndex}, and \cmd{\JustIndex}. % % \DescribeMacro{\SeeAlso} % Put \cmd{\SeeAlso} before \cmd{\IndexRef}, \cmd{\AKA}, and \cmd{\PName} (Section~\ref{sec:AKA}) to make a \textit{see also} reference for a name that has appeared already in the index. If enabled before invoking \cmd{\PName}, \cmd{\SeeAlso} will be disabled when the regular name is generated, then enabled when the cross-reference is generated. %^^A % \Info[3ex]{\hrule\strut Here we test indexing rules:\break % \Name{Nippon Gakki}\label{page:Idx5}\strut\hrule} % \begin{VerbatimOut}{\jobname.tmp} % One can refer to \Name[the]{Rat Pack} as a group of entertainers % including \Name[Sammy]{Davis, Jr.}, \Name[Dean]{Martin}, and % \Name[Frank]{Sinatra}. No more page entries for % \Name*[the]{Rat Pack} will occur after this line, and a % \textit{see also} xref will exist. % \SeeAlso\IndexRef[the]{Rat Pack} % {Davis, Sammy, Jr.; Martin, Dean; Sinatra, Frank} % \end{VerbatimOut} %^^A % \begin{Quote} % \VerbatimInput[gobble=0]{\jobname.tmp} % % \input{\jobname.tmp} % \end{Quote} % % Currently \cmd{\IndexName} and other \textsf{nameauth} macros that create index entries will reset the Boolean flag governed by \cmd{\SeeAlso} unless one uses the \texttt{oldreset} option. preventing a stray use of the macro from affecting the index. % % \DescribeMacro{\SkipIndex} % The prefix macro \cmd{\SkipIndex} will suppress indexing for just one instance of a name displayed by a naming macro. |\SkipIndex\Name[Monty]{Python}| produces \SkipIndex\Name[Monty]{Python} in the text, but with no index entry. \cmd{\SkipIndex} works with the naming macros. Side effects include: % \begin{itemize} % \item Unless the \texttt{oldreset} option is used, both \cmd{\IndexName} and \cmd{\IndexRef} issue warnings if \cmd{\SkipIndex} precedes them. Then, both \cmd{\IndexName} and \cmd{\IndexRef} ignore \cmd{\SkipIndex} and reset its flag. % % \item When the \texttt{oldreset} option is used, both \cmd{\PName} and \cmd{\PName*} issue warnings when {\ttfamily \string \if@nameauth@SkipIndex} is true on exit. % \end{itemize} % % \DescribeMacro{\JustIndex} % This prefix macro makes \cmd{\Name}, \cmd{\Name*}, \cmd{\FName}, and the quick interface shorthand macros act similar to \cmd{\IndexName}. \cmd{\JustIndex} suppresses name output in the text, but flags for long and first name forms are reset as if the naming macro had produced output. Using the \texttt{oldreset} option prevents these flags from being reset, completely mimicking a call to \cmd{\IndexName}. % \begin{Center} % \begin{tabular}{lll}\toprule % \rowcolor{nagrey}^^A % \bfseries Option & \bfseries Text & \bfseries Macros\\ % % default & \JustIndex\SWash \Wash & |\JustIndex\SWash \Wash|\\ % % default & \JustIndex\LWash \Wash & |\JustIndex\LWash \Wash|\\ % % \rowcolor{nagrey}^^A % \makeatletter\global\@nameauth@OldPasstrue\makeatother^^A % \ttfamily oldpass & \JustIndex\SWash \Wash & % |\JustIndex\SWash \Wash|\\ % \rowcolor{nagrey}^^A % \ttfamily oldpass & \JustIndex\LWash \Wash & % |\JustIndex\LWash \Wash|\\\bottomrule % \makeatletter\global\@nameauth@OldPassfalse\makeatother^^A % \end{tabular} % \end{Center} % % There are potential side effects related to \cmd{\JustIndex}: % \begin{itemize} % \item Both \cmd{\AKA} and \cmd{\PName} ignore \cmd{\JustIndex} and go on about their business. They also set \cmd{\@nameauth@JustIndexfalse}. % % \item \cmd{\JustIndex} resets the flags set by \cmd{\ForgetThis} and \cmd{\SubvertThis}, preventing them from passing through. % % \item The following three lines are equivalent: % \phantomsection % \Info[2ex]{\hrule\strut Here we test indexing rules:\break % Creating \textit{see} xref\break\footnotesize % \cmd{\IndexRef}\ttfamily \{Nippon Gakki\}\break % \{Yamaha Corp.\}^^A % \IndexRef{Nippon Gakki}{Yamaha Corp.}^^A % \label{page:Idx6}\strut\hrule} % \begin{itemize} % \item\cmd{\JustIndex} \cmd{\SkipIndex} % \cmd{\Name\{A\}} \cmd{\Name\{B\}} % % \item\cmd{\SkipIndex} \cmd{\JustIndex} % \cmd{\Name\{A\}} \cmd{\Name\{B\}} % % \item\cmd{\JustIndex} \cmd{\Name\{A\}} % \cmd{\SkipIndex} \cmd{\Name\{B\}} % \end{itemize} % \item[] \cmd{\JustIndex} takes priority with \cmd{\Name\{A\}} and passes \cmd{\SkipIndex} to \cmd{\Name\{B\}} (see also Section~\ref{sec:Priorities}). % % \item \cmd{\JustIndex} and the naming macros do not replace \cmd{\IndexRef}. % \end{itemize} % % \subsection{Automatic Rules} % \label{sec:IdxRules} % % Below we indicate what to expect regarding index rules. We do not attempt to concatenate page ranges. Previously we put names and cross-references in margin notes, indicating that we were testing the index rules. Here are the results: % \begin{itemize}[leftmargin=2.8\parindent]\small % \item[\emph{Page \pageref{page:Idx1}}:] % There are no name patterns (Section~\ref{sec:NamePatterns}) for either a name or a cross-reference. Then we create the name \Name*{Yamaha, Torakusu} along with its pattern. A pair of index page entries are generated, one before and one after the name. Also on page \pageref{page:Idx1} an index page entry is created for \Name{Nippon Gakki}, whose name pattern still does not yet exist. % \PatInfo[3ex]{\ShowPattern{Yamaha,Torakusu}!MN} % % \item[] % \begin{tabular}{@{}p{0.36\textwidth}p{0.4\textwidth}} % \emph{Macros} & \emph{Cumulative Index}\\[0.5ex] % \cmd{\Name\{Yamaha, Torakusu\}}\par % \cmd{\IndexName\{Nippon Gakki\}} & % \ShowIdxPageref*{Nippon Gakki}, \pageref{page:Idx1}\par % \ShowIdxPageref*{Yamaha, Torakusu}, \pageref{page:Idx1} % \end{tabular} % \medskip % % \item[\emph{Page \pageref{page:Idx2}}:] % The name \Name{Yamaha, Torakusu} appears again. Since a pattern exists, the short form is printed and two index page entries are generated. % \PatInfo[3ex]{\ShowPattern{Yamaha,Torakusu}!MN} % % \item[] % \begin{tabular}{@{}p{0.36\textwidth}p{0.4\textwidth}} % \emph{Macros} & \emph{Cumulative Index}\\[0.5ex] % \cmd{\Name\{Yamaha, Torakusu\}} & % \ShowIdxPageref*{Nippon Gakki}, \pageref{page:Idx1}\par % \ShowIdxPageref*{Yamaha, Torakusu}, \pageref{page:Idx1}, % \pageref{page:Idx2}\\ % \end{tabular} % \medskip % % \item[\emph{Page \pageref{page:Idx3}}:] % We create a \textit{see also} cross-reference from \Name*{Yamaha, Torakusu} to the name \Name{Nippon Gakki}. Now a cross-reference pattern exists for Mr. \Name{Yamaha, Torakusu}. We can no longer create index page entries for Mr. \Name{Yamaha, Torakusu}. %\PatInfo[3ex]{\ShowPattern{Yamaha,Torakusu}!MN\break % \ShowPattern{Yamaha,Torakusu}!PN} % % \item[] % \begin{tabular}{@{}p{0.36\textwidth}p{0.4\textwidth}} % \emph{Macros} & \emph{Cumulative Index}\\[0.5ex] % \cmd{\SeeAlso}\cmd{\IndexRef\{Yamaha,}\par % \texttt{Torakusu\}\{Nippon Gakki\}} & % \ShowIdxPageref*{Nippon Gakki}, \pageref{page:Idx1}\par % \ShowIdxPageref*{Yamaha, Torakusu}, \pageref{page:Idx1}, % \pageref{page:Idx2} % \textit{see also} Nippon Gakki\\ % \end{tabular} % % \item[\emph{Page \pageref{page:Idx4}}:] % We attempt to make an index page entry to Mr. \Name{Yamaha, Torakusu} by invoking his name. That attempt fails due to the extant xref. % \PatInfo[3ex]{\ShowPattern{Yamaha,Torakusu}!MN\break % \ShowPattern{Yamaha,Torakusu}!PN} % % \item[] % \begin{tabular}{@{}p{0.36\textwidth}p{0.4\textwidth}} % \emph{Macros} & \emph{Cumulative Index}\\[0.5ex] % \cmd{\Name\{Yamaha, Torakusu\}} & % \ShowIdxPageref*{Nippon Gakki}, \pageref{page:Idx1}\par % \ShowIdxPageref*{Yamaha, Torakusu}, \pageref{page:Idx1}, % \pageref{page:Idx2} % \textit{see also} Nippon Gakki\\ % \end{tabular} % \medskip % % \item[\emph{Page \pageref{page:Idx5}}:] % We print the name \Name{Nippon Gakki}, bringing its name pattern into being. Even though it was the \emph{target} of an xref, that does not restrict the ability to make page entries for it. % \PatInfo[3ex]{\ShowPattern{Yamaha,Torakusu}!MN\break % \ShowPattern{Yamaha,Torakusu}!PN\break % \ShowPattern{Nippon Gakki}!MN} % % \item[] % \begin{tabular}{@{}p{0.36\textwidth}p{0.4\textwidth}} % \emph{Macros} & \emph{Cumulative Index}\\[0.5ex] % \cmd{\Name\{Nippon Gakki\}} & % \ShowIdxPageref*{Nippon Gakki}, \pageref{page:Idx1}, % \pageref{page:Idx5}\par % \ShowIdxPageref*{Yamaha, Torakusu}, \pageref{page:Idx1}, % \pageref{page:Idx2} % \textit{see also} Nippon Gakki\\ % \end{tabular} % \medskip % % \label{page:Idx7} % \item[\emph{Page \pageref{page:Idx6}}:] % We attempt to create a \textit{see} cross-reference from \Name{Nippon Gakki} to the target \Name{Yamaha Corp.}. That fails because, unlike a \textit{see also} reference, a \textit{see} reference cannot be created when a name pattern already exists. The \textsf{nameauth} package issues a warning at this point. Yet the name \Name{Yamaha Corp.} is not created until page \pageref{page:Idx7}. % \PatInfo[3ex]{\ShowPattern{Yamaha,Torakusu}!MN\break % \ShowPattern{Yamaha,Torakusu}!PN\break % \ShowPattern{Nippon Gakki}!MN}^^A % % \item[] % \begin{tabular}{@{}p{0.36\textwidth}p{0.4\textwidth}} % \emph{Macros} & \emph{Cumulative Index}\\[0.5ex] % \cmd{\IndexRef\{Nippon Gakki\}}\par \texttt{\{Yamaha Corp.\}} & % \ShowIdxPageref*{Nippon Gakki}, \pageref{page:Idx1}, % \pageref{page:Idx5}\par % \ShowIdxPageref*{Yamaha, Torakusu}, \pageref{page:Idx1}, % \pageref{page:Idx2} % \textit{see also} Nippon Gakki\\ % \end{tabular} % \medskip % % \item[\emph{Page \pageref{page:Idx7}}:] % Index entries for \Name{Nippon Gakki} and \Name{Yamaha Corp.} also include this page due to the content of this list. % \PatInfo[3ex]{\ShowPattern{Yamaha,Torakusu}!MN\break % \ShowPattern{Yamaha,Torakusu}!PN\break % \ShowPattern{Nippon Gakki}!MN\break % \ShowPattern{Yamaha Corp.}!MN}^^A % % \item[] % \begin{tabular}{@{}p{0.36\textwidth}p{0.4\textwidth}} % \emph{Macros} & \emph{Cumulative Index}\\[0.5ex] % \cmd{\Name\{Nippon Gakki\}}\par % \cmd{\Name\{Yamaha Corp.\}} & % \ShowIdxPageref*{Nippon Gakki}, \pageref{page:Idx1}, % \pageref{page:Idx5}, \pageref{page:Idx7}\par % \ShowIdxPageref*{Yamaha Corp.} \pageref{page:Idx7}\par % \ShowIdxPageref*{Yamaha, Torakusu}, \pageref{page:Idx1}, % \pageref{page:Idx2}, % \textit{see also} Nippon Gakki\\ % \end{tabular} % \end{itemize} % % \begin{Quotation}{\Name[Dwight D.]{Eisenhower}} % {Associated Press luncheon (24 April 1950)} % Censorship, in my opinion, is a stupid and shallow way of % approaching the solution to any problem. Though sometimes % necessary, as witness a professional and technical secret that may % have a bearing upon the welfare and very safety of this country, we % should be very careful in the way we apply it, because in censorship % always lurks the very great danger of working to the disadvantage of % the American nation. % \index{politicians, quotes of\noexpand\string|hyperpage} % \end{Quotation} % % \newpage % % \subsection[Sorting Names]{Sorting Names in the Index} % \label{sec:IndexSort} % % When using \texttt{makeindex}, names with characters outside the ASCII range \texttt{[A--Za--z]} need to be sorted, as do names with spaces, active characters, Roman numerals, and macros especially in the \meta{SNN} argument. We do that in \textsf{nameauth} using sort tags. For other multilingual approaches, see the respective documentation for \textsf{xindex} and \texttt{xindy}. Those details go beyond the scope of this manual. % % \subsubsection{General Approach} % % \DescribeMacro{\IndexActual} % Using \cmd{\index\{}\meta{sort key}\texttt{@}\meta{actual}\texttt{\}} works with both \texttt{makeindex} and \texttt{texindy}. The general practice for sorting with \texttt{makeindex -s} involves creating an \texttt{ist} file (pages 659--65 in \Title{The Latex Companion}). % % By default, the ``actual'' character is |@|. If one needs to change the ``actual'' character, such as when using \texttt{gind.ist} with \texttt{dtx} files, one would put |\IndexActual{=}| in the preamble (or driver section) before creating index entries with the naming macros. \cmd{\PretagName} does not care about the ``actual'' character, but it provides the information that is automatically added after that character. % % \Global Effects of \cmd{\IndexActual} are local in scope. Use \cmd{\global} to make it otherwise, but that will affect every use of \cmd{\PretagName} thereafter. We demonstrate this scoping below as it pertains to \texttt{gind.ist} in a \texttt{dtx} file:\footnote{This example will generate a warning because we sort a name that does not exist.} % \begin{Quote} % \begin{Verbatim} % \PretagName{Ægidius}{Aegidius} % % In a \texttt{dtx} file the ``actual'' character is \texttt{=}. % \begingroup % In a local scope we change to the normal character \texttt{@} % and show the index entry: % \texttt{\IndexActual{@}\ShowIdxPageref{Ægidius}}. % \endgroup % Now back to \texttt{dtx} mode: \texttt{\ShowIdxPageref{Ægidius}}. % \end{Verbatim} % \PatInfo[3ex]{\ShowPattern{Ægidius}!PRE} % \PretagName{Ægidius}{Aegidius} % % In a \texttt{dtx} file the ``actual'' character is \texttt{=}. % \begingroup % In a local scope we change to the normal character \texttt{@} % and show the index entry: % \texttt{\IndexActual{@}\ShowIdxPageref{Ægidius}}. % \endgroup % Now back to \texttt{dtx} mode: \texttt{\ShowIdxPageref{Ægidius}}. % \end{Quote} % % \noindent \DescribeMacro{\PretagName} % The \textsf{nameauth} package enables automatic index sorting using a ``pretag'' (cf. Section~\ref{sec:NamePatterns}). Unless the \texttt{nopretag} option is used (which results in warnings), \cmd{\PretagName} creates a sort key terminated with the ``actual'' character. Do not put the ``actual'' character in the ``pretag'': % % \begin{SyntaxBox} % \cmd{\PretagName}\oarg{FNN}\marg{SNN\textbf{,}Affix}\oarg{Alternate}\marg{tag} % \end{SyntaxBox} % % \PatInfo[2ex]{\ShowPattern{Æthelred, II}!PRE\break % \ShowPattern[W.E.B.]{Du~Bois}!PRE\break % \ShowPattern{Æthelred, II}!MN\break % \ShowPattern[W.E.B.]{Du~Bois}!MN} % One can ``pretag'' any name, any cross-reference, and even excluded names. Once made, sorting tags cannot be unmade. If one uses \cmd{\PretagName} in the preamble, those names will be sorted automatically throughout the document. For example: % \begin{Quote} % \begin{Verbatim} % \PretagName{Æthelred, II}{Aethelred 2} % \PretagName[W.E.B.]{Du~Bois}{Dubois, William} % \end{Verbatim} % \end{Quote} % % \newpage % % Every reference to \LAeth\ and \LDuBois\ is automatically tagged and sorted.\footnote{Regarding the margin note that shows name patterns, with \texttt{pdflatex} and \texttt{latex}, in \texttt{\ShowPattern{Æthelred, II}} the glyphs \texttt{ÃĘ} correspond to \cmd{\IeC\{}\cmd{\AE\}}.} One should ``pretag'' all names that contain active characters or macros unless one is using other multilingual tools like \textsf{xindex} and \texttt{xindy}. % % We keep the next example simple to illustrate the concept. We do not use alternate formatting because we do not capitalize, mutate, or segment the alias ``\LA{Doctor angelicus}'' (cf. Sections~\ref{sec:NameMedieval}, \ref{sec:AltFormat}). % \Info[4ex]{Name patterns and index entries too large for margin.}^^A %^^A % \begin{VerbatimOut}{\jobname.tmp} % \PretagName{\textit{Doctor angelicus}}{Doctor angelicus} % \IndexRef{\textit{Doctor angelicus}}{Thomas Aquinas} % \IndexRef[Thomas]{Aquinas}{Thomas Aquinas} % % Perhaps the greatest medieval theologian was % \Name{Thomas, Aquinas}, later known as % \Name{\textit{Doctor angelicus}}. % \SeeAlso\IndexRef{\textit{Doctor angelicus}}{Thomas Aquinas} % \end{VerbatimOut} %^^A % \begin{Quote} % \VerbatimInput[gobble=0,lastline=7]{\jobname.tmp} % % \IndexRef{\textit{Doctor angelicus}}{Thomas Aquinas} % \IndexRef[Thomas]{Aquinas}{Thomas Aquinas} % % Perhaps the greatest medieval theologian was % \Name{Thomas, Aquinas}, later known as % \Name{\textit{Doctor angelicus}}. % \end{Quote} % % We make \Name{\textit{Doctor angelicus}} a \textit{see} references with no page entries. If we did want page entries and a \textit{see also} reference from \Name{\textit{Doctor angelicus}} to \Name{Thomas, Aquinas}, we would omit line~2 above, wait until the body text is complete at the the end of the document, such as before \cmd{\printindex}, and then use: % \begin{Quote} % \VerbatimInput[gobble=0,numbers=none,firstline=8]{\jobname.tmp} % \end{Quote} % % \subsubsection*{\hfil Name Particles} % % Spaces change sorting. For example, the sort tag \texttt{De\textvisiblespace Soto} precedes \texttt{deal} due to the space therein. The sort tag \texttt{DeSoto} falls as expected between \texttt{derp} and \texttt{determinism}. Remove spaces when sorting with \cmd{\PretagName}. % % \subsubsection*{\hfil Collating Sequences} % % German \textsf{ä ö ü ß} map to English \textsf{ae oe ue ss}. Yet Norwegian \textsf{æ ø å} follow \textsf{z} in that order. One might have to create a sort tag that substitutes, e.g., \textsf{za zb zc} for \textsf{æ ø å}. Check a style guide regarding collating sequences, spaces, and sorting. This is where using other multilingual tools can be helpful. % % \subsubsection*{\hfil Alternate Formatting} % % Additional examples starting with Section~\ref{sec:RealAltEx} deal with index sorting as it relates to alternate formatting, ``Continental'' practice, and macros in name arguments. % % \begin{AltFormatZone} % \begin{Quotation}{\Shak} % {``Julius Caesar'', Act III, Scene II (first performed 1599)} % \textbf{Antony:} Friends, Romans, countrymen, lend me your ears;\\ % I come to bury Caesar, not to praise him. % \index{creatives, quotes of\noexpand\string|hyperpage} % \end{Quotation} % \end{AltFormatZone} % % \newpage % % \subsubsection{Sorting Initials} % \label{sec:IndexInitials} % % Sorting \Name*[J.D.]{Rockefeller, IV} (|\Name*[J.D.]{Rockefeller, IV}|) presents a problem that does not occur with \Name*[Clive Staples]{Lewis} (|\Name*[Clive Staples]{Lewis}|). In the case of \Name*[J.D.]{Rockefeller, IV}[Jay], the initials will appear in the index, while with \Name*[Clive Staples]{Lewis}[C.S.], the longer names will appear in the index. % % In \textsf{nameauth} we have a specific way to do that once per name, and all the remaining names will be sorted as expected. Before we use a name like \Name[J.D.]{Rockefeller, IV}, preferably in the preamble, we use the following macro: % \begin{Quote} % |\PretagName[J.D.]{Rockefeller, IV}{Rockefeller, John D 4}| % \begin{itemize} % \item The index entry is ``\ShowIdxPageref*[J.D.]{Rockefeller, IV}''. % % \item In the ``pretag'' we spell out the first forename and add enough of the second to get a unique sorting key. % % \item We turn the Roman numeral affix into an Arabic numeral so that it does not sort like letters. % \end{itemize} % \end{Quote} % % For more examples, see Sections~\ref{sec:NameMedieval}, \ref{sec:Romani}, \ref{sec:VarNames}, and all of Section~\ref{sec:AdvancedFormat}. % % \begin{InfoBox} % In order to sort the index consistently and properly, all names % should be sorted by their longer name forms, not their initials. % \end{InfoBox} % % \subsubsection[Unicode]{Unicode Compatibility} % \label{sec:CompatON} % % Here we engage how active Unicode characters affect index entries. Changes in the way that \texttt{pdflatex} and \texttt{latex} handle Unicode characters since 2018 have made indexing simpler and more intuitive, e.g. % \begin{Center} % \begin{tabular}{rllrll}\toprule % \rowcolor{nagrey}^^A % \bfseries Pre-2018 & & \bfseries Index & % \bfseries Post-2018 & & \bfseries Index\\ % % ä & \textrightarrow & % \texttt{\cmd{\IeC\textvisiblespace}\{\cmd{\"a}\}} & % ä & \textrightarrow & \texttt{ä}\\ % % \rowcolor{nagrey}^^A % æ & \textrightarrow & % \texttt{\cmd{\IeC\textvisiblespace}\{\cmd{\ae\textvisiblespace}\}} & % æ & \textrightarrow & \texttt{æ}\\\bottomrule % \end{tabular} % \end{Center} % % The \cmd{\IeC} macro plus its argument then would expand to \cmd{\T1} plus its argument, which would occur especially if accented characters were written out to a file, then read in again. This could cause problems that would generate multiple index entries. We can test for changes that can affect \textsf{nameauth}: % \begin{enumerate} % \item Test for the presence of \texttt{utf8-2018.def} and define a macro: % \begin{Quote} % \begin{Verbatim} % \makeatletter % \@ifl@t@r\fmtversion{2018/10/05}{\newcommand\nameauthltx{}}{} % \makeatother % \end{Verbatim} % \end{Quote} % % \item Test for the presence of \texttt{utf8-2018.def} by checking for a file: % \begin{Quote} % \begin{Verbatim} % \IfFileExists{utf8-2018.def}{do if present}{do if absent} % \end{Verbatim} % \end{Quote} % % \item Test for the version of \textsf{xparse} that allows the current function of name arguments, and define a macro: % \begin{Quote} % \begin{Verbatim} % \makeatletter % \@ifl@t@r\fmtversion{2018/04/30}{\newcommand\nameauthxp{}}{} % \makeatother % \end{Verbatim} % \end{Quote} % \end{enumerate} % % Before 2018, some index styles like \texttt{gind.ist} could not work with characters with macrons. Since 2018, those restrictions have been removed. To work with both old or new versions of \texttt{pdflatex} and \texttt{latex}, we can do the following: % \begin{Quote} % \begin{Verbatim} % \begin{nameauth} % \ifdefined\nameauthltx % \< Ghazali & & Ghazāli & > % \else % \< Ghazali & & Ghazali & > % \fi % \end{nameauth} % % \ifdefined\nameauthltx % \PretagName{Ghazāli}{Ghazali} % \fi % % \Ghazali\ was an important Islamic philosopher. % \end{Verbatim} % % \Ghazali\ was an important Islamic philosopher. % \end{Quote} % % \subsubsection{Debugging} % % If one sees multiple index entries for the same name, or if the names are not sorted correctly, either check the \texttt{idx} file or use the debugging macros (Section~\ref{sec:DebuggingMacros}). Check \textsf{nameauth} package warnings. Set the \texttt{verbose} option, which will offer a number of ``informational'' warnings that could be of assistance. % \begin{itemize} % \item Do naming macros always use the same arguments? % % \item Are there any active characters, spaces, or control sequences in the name arguments? Use \cmd{\PretagName}. % % \item Are active Unicode characters expanding consistently? % % \item Use \cmd{\ShowPattern}, \cmd{\ShowIdxPageref}, and \cmd{\ShowNameState}. % % \item Did \cmd{\noexpand} precede macros in name arguments? Can those macros ultimately expand differently in the index? If so, check how alternate formatting is being used. % % \item Is alternate formatting used consistently? Are names used within sections of alternate formatting used outside of them? % \end{itemize} % % Using \cmd{\protected@edef} in macros can add spaces to index entries. The \textsf{nameauth} macros must use \cmd{\protected@edef} to work with classes that write index entries to \texttt{aux} files. One must check this in the \texttt{idx} file. We show this below: % \begin{Quote} % \begin{Verbatim} % \makeatletter % \newcommand\Idx[1]{\protected@edef\arg{#1}\index{\arg}} % \makeatother % \end{Verbatim} % % \cmd{\Idx\{}\cmd{\textsc\{football\}\}} produces:\\ % \hbox{}\qquad\cmd{\indexentry}\texttt % {\{\cmd{\textsc\textvisiblespace\textvisiblespace}\{football\}\}\{}\meta % {page}\texttt{\}}\\[1ex] % The macro \cmd{\index\{}\cmd{\textsc\{football\}\}} produces:\\ % \hbox{}\qquad\cmd{\indexentry}\texttt % {\{\cmd{\textsc}\{football\}\}\{}\meta{page}\texttt{\}} % \end{Quote} % % \subsection{Index Tags} % \label{sec:IndexTag} % % \subsubsection{General Approach} % % \DescribeMacro{\TagName} % Index tags are information added automatically to entries created by \textsf{nameauth} macros. % \DescribeMacro{\UntagName} % \cmd{\TagName} creates or changes a persistent tag. \cmd{\UntagName} deletes a tag. This information can include life dates, regnal dates, etc. Both \cmd{\TagName} and \cmd{\UntagName} have \emph{global scope} and handle arguments in the same way as \cmd{\IndexName}: % % \begin{SyntaxBox} % \cmd{\TagName}\oarg{FNN}\marg{SNN\textbf{,}Affix}\oarg{Alternate}\marg{tag}\\ % \cmd{\UntagName}\oarg{FNN}\marg{SNN\textbf{,}Affix}\oarg{Alternate} % \end{SyntaxBox} % % All the indexing macros are keyed to the name patterns. \cmd{\PretagName} generates the leading sort key. \cmd{\TagName} and \cmd{\UntagName} affect the trailing content. The following graphic illustrates the ``segments'' of an index entry and the \textsf{nameauth} macros that affect the respective segments: % \begin{Center} % \begin{tabular}{r|l|l|l}\toprule % & & Naming macros\\ % & \cmd{\PretagName} & \cmd{\IndexName}\\ % \large\bfseries|\index{| & \large\bfseries|Aethelred 2@| & % \large\bfseries|Æthelred II| & \large\bfseries|, king}|\\ % & & & \cmd{\TagName}\\ % & & & \cmd{\UntagName}\\\bottomrule % \end{tabular} % \end{Center} % % Tags created by \cmd{\TagName} can be helpful in the indexes of academic texts by adding dates, titles, etc. \cmd{\TagName} causes the \textsf{nameauth} indexing macros to append % {\ttfamily\fbox{\textvisiblespace the Great, pope}} % to the index entry below (normal \LaTeX\ document):\IndexName{Gregory, I} % \begin{Quote} % \IndexInactive % \PatInfo[3.5ex]{\ShowPattern{Gregory, I}!PRE\break % \ShowPattern{Gregory, I}!TAG\break % \ShowPattern{Gregory, I}!MN} % \begin{Verbatim} % \PretagName{Gregory, I}{Gregory 1} % \TagName{Gregory, I}{ the Great, pope} % Pope \Name*{Gregory, I} is known as \Name*{Gregory, I} % [the Great].\\ % Index: \ShowIdxPageref{Gregory, I} % \end{Verbatim} % % \IndexActual{@} % \TagName{Gregory, I}{ the Great, pope} % Pope \Name*{Gregory, I} is known as \Name*{Gregory, I} % [the Great].\\ % Index: \ShowIdxPageref{Gregory, I} % \TagName{Gregory, I}{ the Great, pope\string|hyperpage} % \end{Quote} % \IndexName{Gregory, I} % % See Section~\ref{sec:NameAncient} for more ways to deal with ancient names. \cmd{\TagName} works with all names that produce index page entries. It does not work with with cross-references produced by \cmd{\IndexRef}, \cmd{\AKA}, etc. % Tags can hold different kinds of information, but they should not be verbose. They can include daggers, asterisks, and so on. For example, all fictional names in the index of this manual are tagged with \S. One must add any desired spaces to the start of the tag. % % \begin{Quotation}{\ForgetThis\Name[M.T.]{Cicero}[Marcus Tullius]} % {\Title{\la{De oratore}} B II; C IX, \S 36 (55 \textsc{BC})} % By what other voice, too, than that of the orator, is history, % the evidence of time, the light of truth, the life of memory, the % directress of life, the herald of antiquity, committed to immortality? % \index{Romans, quotes of\noexpand\string|hyperpage} % \end{Quotation} % % \newpage % % \subsubsection[Identical Names]{Disambiguating Identical Names} % \label{sec:IdxIdent} % % We can format and index one name as two different people with \cmd{\TagName} and \cmd{\ForgetThis} (Section~\ref{sec:NameControl}). The index tags group together their respective entries: % \begin{Quote} % \begin{Verbatim} % \TagName[Engelbert]{Humperdinck}{ (composer, 1854--1921)} % This refers to the classical German composer: % \Name[Engelbert]{Humperdinck}. % % \TagName[Engelbert]{Humperdinck}{ (singer, *1936)} % This refers to the English singer from the 60s and 70s: % \ForgetThis\Name[Engelbert]{Humperdinck}. % \end{Verbatim} % % \TagName[Engelbert]{Humperdinck}{ (composer, 1854--1921)\string|hyperpage} % This refers to the classical composer: % \Name[Engelbert]{Humperdinck}. % % \TagName[Engelbert]{Humperdinck}{ (singer, *1936)\string|hyperpage} % This refers to the singer from the 60s and 70s: % \ForgetThis\Name[Engelbert]{Humperdinck}. % \end{Quote} % % The name patterns are \texttt{\ShowPattern[Engelbert]{Humperdinck}!TAG} for the index tag and \texttt{\ShowPattern[Engelbert]{Humperdinck}!MN} for the name. % This is the least ``intrusive'' way of creating unique names but it requires one to track potential changes to the text that might change the placement of index tags relative to their names.\footnote{The name decision macros might help automate this, as might the separate name systems.} % % Sections~\ref{sec:Romani} and~\ref{sec:Unique} show how one can do similar things with non-printing macros in name arguments, where the names are sorted with \cmd{\PretagName} and also have index tags. This relieves one of having to keep track of otherwise identical names, because the name patterns are distinct, even if they look alike. One can go to greater lengths in Section~\ref{sec:AdvancedFormat} and its subsections. % % One should try to use the \textsf{nameauth} macros in a way that is arguably the most ``natural'' and has the best fit for one's use case. That is a reason why this manual contains so many different examples. See also Section~\ref{sec:Complexity}. % % \subsubsection[Special Tags]{Special Tags for Special Cases} % \label{sec:SpecialTag} % % \cmd{\TagName} can create ``special'' index entries for names with the general form below. These tags are compatible with \textsf{hyperref} used in normal \LaTeX\ documents.\footnote{This was implemented in v.3.3, based on the answer of \Name*[Heiko]{Oberdiek} to \href{https://tex.stackexchange.com/questions/201720/index-produces-invalid-idx-entry-with-manual-style-commaparse-hyperref} % {\bfseries this question}.} % When a \meta{macro} that takes one or more arguments exists, one can use the form: % % \begin{SyntaxBox} % \cmd{\TagName}\oarg{FNN}\marg{SNN\textbf{,}Affix}\oarg{Alternate}\marg{\texttt{\upshape\textbar}macro}\\ % \end{SyntaxBox} % % \begin{Quotation}{\Name{Plato}} % {opening statement in \textit{Cratylus} (c. 388 \textsc{bc})} % \Name{Hermogenes}: I should explain to you, \Name{Socrates}, that our friend \Name{Cratylus} has been arguing about names; he says that they are natural and not conventional; not a portion of the human voice which men agree to use; but that there is a truth or correctness in them, which is the same for Hellenes as for barbarians.^^A % \index{philosophers, quotes of\noexpand\string|hyperpage} % \end{Quotation} % % \newpage % % \Info*{\small\dbend}When using the \textsf{ltxdoc} class with \textsf{hypdoc}, as in this manual, neither \textsf{nameauth} nor regular use of \cmd{\index} creates hyperlinked page entries. Index data tags in the || section of the \texttt{dtx} file, which reads the ``commented'' part of the \texttt{dtx} file into a \texttt{document} environment, take the form: % \begin{Quote} % \cmd{\TagName}\meta{name args}\texttt{\{\textbar hyperpage\}} % \end{Quote} % % Within the ``commented'' part of the package documentation in this \texttt{dtx} file, the vertical bar is active. Hence, in this part, we use one of these two: % \begin{itemize} % \item \cmd{\TagName}\meta{name args}\texttt{\{}\cmd{\string\textbar hyperpage\}} % \item \cmd{\index\{}\meta{entry info}\cmd{\noexpand}\cmd{\string \textbar hyperpage\}} % \end{itemize} % % Internally, in \cmd{\@nameauth@IdxFormat}, when a cross-reference is being created, a tag of the form \meta{some text}\texttt{\textbar}\meta{some macro} is reduced to \meta{some text}, allowing the macros \texttt{\textbar see} and \texttt{\textbar seealso} internally to be appended to the index entry even if a tag with a vertical bar exists. % % \Info*{\small\dbend}Next we create a special tag. Since we used lines~1--2 in this \texttt{dtx} file, we put them in the driver section to keep it simple. % \begin{Quote} % \begin{Verbatim} % \newcommand\Orphan[2]{#1(\hyperpage{#2})} % \TagName[Lost]{Name}{\,\S|Orphan{perdit}} % \Name[Lost]{Name} % \end{Verbatim} % % \Name[Lost]{Name}\\ % \texttt{idx} file: % |\indexentry{Name, Lost\,\S |\texttt % {\textbar}|Orphan{perdit}}{|\meta{page}|}|\\ % \texttt{ind} file: % |\item Name, Lost\,\S \pfill \Orphan{perdit}{|\meta{page}|}| % \end{Quote} % % The \textsf{microtype} package and its tracking features is probably the best solution to fix index entries and sub-entries that break badly across columns or pages. Here we show how to add manual breaks, inelegant as that may be. % \begin{itemize} % \item Create a macro that takes an argument and appends a break: % \item[] |\newcommand*{\EndBreak}[1]{#1\newpage}| % \item The principle is similar to using: % \item[] \cmd{\index\{Doe, John\string|textbf\}} % \item The default for two column mode is \cmd{\newpage}. One might use % \cmd{\newcolumn} with \textsf{multicol} and \textsf{idxlayout}, etc. %\end{itemize} % % We use \cmd{\EndBreak} in an index tag for every index entry on the last page where such entries occur. If all instances of a name on that pagee have the same index tag, there will be no duplicate page entries, hyperlinks will work, and the index will break as indicated: % \begin{Center} % \begin{tabular}{rll}\toprule % \rowcolor{nagrey}^^A % \bfseries Page & \bfseries Macro & \bfseries Index\\ % % (preamble) & |\newcommand*{\EndBreak}[1]|\\ % & | {#1\newpage}|\\ % % 10 & \cmd{\Name\{Some, Name\}} & Some Name, 10\\ % % 15 & \cmd{\Name\{Some, Name\}} & Some Name, 10, 15\\ % % 18 & \cmd{\TagName\{Some, Name\textbar EndBreak\}} & \\ % & \cmd{\Name\{Some, Name\}} & % Some Name, 10, 15, 18\meta{break}\\\bottomrule % \end{tabular} % \end{Center} % % We do not have to supply an argument to \cmd{\EndBreak} because, as with font switching in the index, the page entry is implied. We also can intermix \textsf{nameauth} macros with manual index entries.\footnote{One may need to look at the \texttt{idx} or \texttt{ind} files to craft matching entries on the page where the break occurs. Again, this approach is probably not as good as using \textsf{microtype}.} % Instead of using \cmd{\TagName}, we could try this: % \begin{Center} % \begin{tabular}{rll}\toprule % \rowcolor{nagrey}^^A % \bfseries Page & \bfseries Macro & \bfseries Index\\ % % 18 & |\SkipIndex\Name\{Some, Name}% |\\ % & \cmd{\index\{Some Name\textbar EndBreak\}} & % Some Name, 10, 15, 18\meta{break}\\\bottomrule % \end{tabular} % \end{Center} % % Results for manual entries may vary, depending on what distribution of \LaTeX\ is being used and how old it is. Any name with active characters needs to be handled differently before 2018 than after 2018. All instances of \cmd{\index\{Some Name\textbar EndBreak\}} must fall on the same page. % % We do not recommend breaking an index entry in the middle. There are several discussions, such as \href{https://tex.stackexchange.com/questions/86646/indexing-subentries-and-see-also}{\bfseries this page} and \href{https://tex.stackexchange.com/questions/231840/what-is-the-proper-use-of-several-seealso-in-the-same-index-entry-with-makeinde}{\bfseries that page}. Modifying \cmd{\EndBreak} above by putting \cmd{\@gobble} after \cmd{\newpage} would allow breaking an index entry in the middle, but there are no real guarantees that the new macro would work well. % % \subsection[Categories/Sub-entries]{Categories and Sub-entries} % \label{sec:CatSub} % % Indexes can have categories and sub-entries such as the following: % \begin{itemize} % \item[] \meta{category 1} % \begin{itemize} % \item[] \meta{name entry} % \begin{itemize} % \item[] \meta{name sub-entry 1} % \item[] \meta{name sub-entry 2}\dots % \end{itemize} % \item[] \meta{name entry}\dots % \end{itemize} % \item[] \meta{category 2}\dots % \end{itemize} % % To get \textsf{nameauth} to work with this structure, one uses \cmd{\PretagName} to organize names under categories. One uses \cmd{\TagName} to create sub-entrues under names. A simple mnemonic is: ``Pre stands for C'' when it comes to categories, while ``Tags are on the inside'' like sub-entries. % % The following syntax box shows a couple of generic examples for creating categories and sorting names under them with \cmd{\PretagName}: % % \begin{SyntaxBox} % \cmd{\PretagName}\oarg{FNN}\marg{SNN}\texttt % {\{}\meta{category 1}\texttt{!}\meta{SNN}\texttt % {, }\meta{FNN}\texttt{\}}\\ % \cmd{\PretagName}\marg{SNN\textbf{,}Affix}\texttt % {\{}\meta{category 1}\texttt{!}\meta{SNN} \meta{Affix}\texttt{\}} % \end{SyntaxBox} % % Likewise, the following syntax box shows a couple of generic examples for creating sub-entries under names with \cmd{\TagName}: % % \begin{SyntaxBox} % \cmd{\TagName}\oarg{FNN}\marg{SNN}\texttt % {\{!}\meta{name sub-entry}\texttt{\}}\\ % \cmd{\TagName}\marg{SNN\textbf{,}Affix}\texttt % {\{!}\meta{name sub-entry}\texttt{\}} % \end{SyntaxBox} % % \newpage % % \begin{itemize} % \item If the name has no tag, \cmd{\UntagName} will % restore the base name entry. % % \item \cmd{\TagName} can set up a default tag, set up or change % sub-entries, and change back to the default tag. % % \item If a sub-entry of a name needs a \textit{see} reference: % \begin{itemize} % \item If the name has been used in the front matter or the main matter, % use \cmd{\ForgetName} or no \textit{see} reference will be created. % \item Pick sub-entry A with no page references. % \item[] |\TagName[Some]{Name}{!Sub-entry A}| % \item Create a \textit{see} reference using that sub-entry. % \item[] |\IndexRef[Some]{Name}{Something else}| % \item Free up the name for more references. % \item[] |\IncludeName*[Some]{Name}| % \item Change back to the base name entry or another sub-entry. % \item If needed, use \cmd{\SubvertName}. % \end{itemize} % % \item If a sub-entry of a name needs a \textit{see also} reference: % \begin{itemize} % \item Pick sub-entry B with complete page references. % \item[] |\TagName[Some]{Name}{!Sub-entry B}| % \item Create a \textit{see also} reference using that sub-entry. % \item[] |\SeeAlso\IndexRef[Some]{Name}{Something else}| % \item Free up the name for more references. % \item[] |\IncludeName*[Some]{Name}| % \item Change back to the base name emtry or another sub-entry. % \end{itemize} % % \item Have as few levels in an index as needed. % \end{itemize} % % Next, we show categories and sub-entries used in a normal \LaTeX\ document. % % \JustIndex\Wash \JustIndex\Ike %^^A % \ifdefined\NameauthDoTestFiles \edef\NameauthTestFile{test07_02.tex}\else % \edef\NameauthTestFile{\jobname.tmp}\fi %^^A % \begin{VerbatimOut}{\NameauthTestFile} % \documentclass{article} % \input{compat.tex} % Included with nameauth for compatibility. % \usepackage[a6paper,landscape,left=1cm,right=1cm]{geometry} % \usepackage{makeidx} % \usepackage{nameauth} % % \newcommand*{\EndBreak}[1]{#1\newpage} % % \makeindex % % % Sort these names under: US Generals. % \PretagName[Omar N.]{Bradley}{US Generals!Bradley, Omar} % \PretagName[George S.]{Patton, Jr.}{US Generals!Patton, George} % % % Sort these names under: US Presidents. % \PretagName[George]{Washington}{US Presidents!Washington, George} % \PretagName[Dwight D.]{Eisenhower}{US Presidents!Eisenhower, Dwight D.} % \PretagName[Abraham]{Lincoln}{US Presidents!Lincoln, Abraham} % % % Sort these names under: Philosophers. % \PretagName{Aristotle}{Philosophers!Aristotle} % \PretagName{Plato}{Philosophers!Plato} % % % Sort these names under: Black Americans, famous. % \PretagName[Frederick]{Douglass} % {Black Americans, famous!Douglass, Frederick} % \PretagName[Martin Luther]{King, Jr.} % {Black Americans, famous!King, Martin Luther, Jr.} % % % Sort these names under: Europeans, historical. % \PretagName{\AE thelred, II}{Europeans, historical!Aethelred 2} % \PretagName[Hernando]{de Soto} % {Europeans, historical!de Soto, Hernando} % % \begin{nameauth} % \< Wash & George & Washington & > % \< Bradley & Omar N. & Bradley & > % \< Aris & & Aristotle & > % \< Plato & & Plato & > % \< Aeth & & \AE thelred, II & > % \< Linc & Abraham & Lincoln & > % \< MLK & Martin Luther & King, Jr. & > % \< Soto & Hernando & de Soto & > % \< Patton & George S. & Patton, Jr. & > % \< Ike & Dwight D. & Eisenhower & > % \end{nameauth} % % \begin{document} % \small % % \section{Famous Black Americans} % % \Name[Frederick]{Douglass} rose to eminence by sheer force of % character and talents that neither slavery nor caste % proscription could crush. Circumstances made % \Name[Frederick]{Douglass} a slave, but they could not prevent % him from becoming a freeman and a leader among mankind.\\ % % We also celebrate \MLK, then \MLK. % % \section{Patres Patriae} % % We mention President \Wash; again, \Wash. % Family and close friends called him \SWash.\\ % % \TagName[George]{Washington}{!as general} % We can reminisce about \LWash[General]. % \UntagName[George]{Washington} % % When speaking of \Linc, we can refer to \LLinc[Abe]. % % \section{Philosophers} % % \TagName{Plato}{|EndBreak} % Among philosophers we consider \Plato\ and \Aris. % % \section{Historical Figures} % % We ponder about \Aeth, then \Aeth. % We note \Soto, then just \Soto. % \CapThis\Soto{} starts a sentence. % % \section{Further Discussion} % % \TagName[George]{Washington}{!as general} % \TagName[Dwight D.]{Eisenhower}{!as general} % \LWash, \LIke, \LBradley, and \LPatton % were high-ranking generals.\\ % \SeeAlso\IndexRef[George]{Washington}{Eisenhower} % \SeeAlso\IndexRef[Dwight D.]{Eisenhower}{Washington} % \IncludeName*[George]{Washington} % \IncludeName*[Dwight D.]{Eisenhower} % % \UntagName[George]{Washington} % \UntagName[Dwight D.]{Eisenhower} % \Wash\ and \Ike\ also were US presidents. % % \ForgetName[Omar N.]{Bradley} % \ForgetName[George S.]{Patton, Jr.} % \TagName[Omar N.]{Bradley}{!colleagues of} % \TagName[George S.]{Patton, Jr.}{!colleagues of} % \IndexRef[Omar N.]{Bradley}{Eisenhower, Patton} % \IndexRef[George S.]{Patton, Jr.}{Bradley, Eisenhower} % % \printindex % \end{document} % \end{VerbatimOut} %^^A % \begin{Quote} % \VerbatimInput[gobble=0,lastline=23]{\NameauthTestFile} % % \newpage % % \VerbatimInput[gobble=0,firstline=24,lastline=76]{\NameauthTestFile} % % \newpage % % \VerbatimInput[gobble=0,firstline=77]{\NameauthTestFile} % \end{Quote} % % \JustIndex\MLK \JustIndex\Doug % \JustIndex\Aeth \JustIndex\Soto % \JustIndex\Aris \JustIndex\Plato % \JustIndex\Linc \JustIndex\Wash % \JustIndex\Ike \JustIndex\Patton \JustIndex\Bradley % \begin{tcolorbox}[colback=white] % \IfFileExists{cat01.pdf}{\includegraphics[scale=0.85]{cat01.pdf}} % {\hbox{\vbox to 8cm{\hbox{\hfill}}}} % \end{tcolorbox} % \medskip % % \newpage % % A few notable features from this example include: % \begin{itemize} % \item The entry categories are set up in the preamble with \cmd{\PretagName}. They do not change thereafter. % % \item Changes from one sub-entry to another, or back to the base name entry, occur using \cmd{\TagName} and \cmd{\UntagName}. % % \item We permit references to names with other sub-entries or main entries again with \cmd{\IncludeName*}. Otherwise, the creation of an xref would protect that name from further entries. % % \item We permit the creation of \textit{see} references in subentries of extant names by using \cmd{\ForgetName} % \end{itemize} % % Obviously, the more complex an index gets, the more complex it will be to deal with the \textsf{nameauth} macros. The user must decide where the break-even point lies. % % \ReturnLink % % \begin{Quotation}{\Name[John F.]{Kennedy}} % {Inaugural Address (1961)} % The world is very different now. For man holds in his mortal hands the power to abolish all forms of human poverty and all forms of human life. And yet the same revolutionary beliefs for which our forebears fought are still at issue around the globe\,---\,the belief that the rights of man come not from the generosity of the state but from the hand of God. % % \dots And so, my fellow Americans: ask not what your country can do for you\,---\,ask what you can do for your country. % % My fellow citizens of the world: ask not what America will do for you, but what together we can do for the freedom of man. % % Finally, whether you are citizens of America or citizens of the world, ask of us here the same high standards of strength and sacrifice which we ask of you. With a good conscience our only sure reward, with history the final judge of our deeds, let us go forth to lead the land we love, asking His blessing and His help, but knowing that here on earth God's work must truly be our own. % \index{politicians, quotes of\noexpand\string|hyperpage} % \end{Quotation} % % \newpage % % \section{Name Tags} % \label{sec:DataTags} % % \subsection{Basics} % % \DescribeMacro{\NameAddInfo} % All valid names in \textsf{nameauth} can have name tags. Unlike other kinds of tags, name tags are not generated automatically with every name managed by \textsf{nameauth}. \cmd{\NameAddInfo} is \cmd{\long}, allowing for more information in the \meta{tag} argument: % \begin{SyntaxBox} % \cmd{\NameAddInfo}\oarg{FNN}\marg{SNN\textbf{,}Affix}\oarg{Alternate}\marg{tag} % \end{SyntaxBox} % % \PatInfo*{\ShowPattern[George]{Washington}!DB\break % \ShowPattern[George]{Washington}!MN}^^A % For example, |\NameAddInfo[George]{Washington}{(1732--99)}|\NameAddInfo[George]{Washington}{(1732--99)} makes a name tag but does not print whenever \Wash\ \cmd{\Wash} is used. The name tag is displayed only by using the macro \cmd{\NameQueryInfo\{\}} \NameQueryInfo{}. % % When making a tag, include a leading space if \cmd{\NameQueryInfo} is used in a formatting hook (Section~\ref{sec:DataTagHooks}) and such space is desired. Otherwise avoid leading spaces. Another way uses a conditional: % ^^A % \begin{VerbatimOut}{\jobname.tmp} % \makeatletter % \NameAddInfo[George]{Washington} % {\if@nameauth@InHook{ }\fi(1732--99)} % \makeatother % \end{VerbatimOut} % ^^A % \begin{Quote} % \VerbatimInput[gobble=0]{\jobname.tmp} % % \input{\jobname.tmp} % \end{Quote} % % \DescribeMacro{\NameQueryInfo} % To print a name tag for a given name, we use \cmd{\NameQueryInfo}, either from an arbitrary set of name arguments, or from the previously-evaluated name arguments if a null argument is given. It prints a name tag from the name info data set: % % \begin{SyntaxBox} % \cmd{\NameQueryInfo}\oarg{FNN}\marg{SNN\textbf{,}Affix}\oarg{Alternate}\\ % \cmd{\NameQueryInfo\{\}} % \end{SyntaxBox} % % \begin{itemize} % \item With name arguments, using the pattern for those arguments:\\ % |\NameQueryInfo[George]{Washington}|\dotfill^^A % \NameQueryInfo[George]{Washington}\JustIndex\Wash % \PatInfo[-4ex]{\ShowPattern[George]{Washington}!DB\break % \ShowPattern{Elizabeth, I}!MN\break % \ShowPattern{Elizabeth, I}!DB} % % \item With a null argument, using the pattern from the last name used:\\ % |\LEliz\ \NameQueryInfo{}|\dotfill^^A % \LEliz\ \NameQueryInfo{} % \end{itemize} % % \DescribeMacro{\NameClearInfo} % \cmd{\NameAddInfo} will replace one name tag with another name tag, but it does not delete a tag. That is the role of \cmd{\NameClearInfo}. The syntax is: % % \begin{SyntaxBox} % \cmd{\NameClearInfo}\oarg{FNN}\marg{SNN\textbf{,}Affix}\oarg{Alternate} % \end{SyntaxBox} % % \PatInfo*{\ShowPattern[George]{Washington}!DB\break % \ShowPattern[George]{Washington}!MN}^^A % We now revisit \LWash\ and his associated name tag. %^^A % \begin{VerbatimOut}{\jobname.tmp} % The name tag for \Wash\ is: \NameQueryInfo{}\\ % Clearing the tag.\NameClearInfo[George]{Washington} % \ifcsdef{George!Washington!DB} % {The tag exists}{The tag is gone.} % \end{VerbatimOut} %^^A % \begin{Quote} % \VerbatimInput[gobble=0]{\jobname.tmp} % % \input{\jobname.tmp} % \end{Quote} % % \subsection{Name Tags in Hooks} % \label{sec:DataTagHooks} % % \Info*{\small\dbend}When calling name tags in formatting hooks (Section~\ref{sec:Formatting}), it helps to remember that they can call other tags as well. Here we offer a quick reminder to stop potential recursion, either with Boolean flags or locally-defined macros. We show the latter below; note the extra grouping tokens: %^^A % \begin{VerbatimOut}{\jobname.tmp} % \NameAddInfo{A} % {{\newcommand\A{Tag A} \A \unless\ifdefined\B \NameQueryInfo{B} \fi}} % \NameAddInfo{B} % {{\newcommand\B{Tag B} \B \unless\ifdefined\A \NameQueryInfo{A} \fi}} % % \begin{itemize} % \item \NameQueryInfo{A} % \item \NameQueryInfo{B} % \end{itemize} % \end{VerbatimOut} %^^A % \begin{Quote} % \VerbatimInput[gobble=0]{\jobname.tmp} % % \input{\jobname.tmp} % \end{Quote} % % With version 4.1 of \textsf{nameauth}, printing name tags in hooks has become easy. For example, we can print tags with the first use of a name. Formatting hooks are called within a local scope. They can take zero arguments, where they insert macros like font switches before a name. They also can take one argument, where they start to more complex actions (Section~\ref{sec:AdvancedFormat}). Here are two basic tips: % \begin{itemize} % \item Use the recommended template as a base model for custom hooks. % % \item Keep all changes local to the formatting hooks. % \end{itemize} % % Below we recommend a starter hook template that uses \cmd{\NameQueryInfo} with a null argument (Section~\ref{sec:NullArgs}) to print the tag with the first use of a name: % \begin{Quote} % \begin{Verbatim} % \renewcommand*\NamesFormat[1] % {#1\NameQueryInfo{}} % \end{Verbatim} % \end{Quote} % % Here is another example with more nuanced control: % \begin{Quote} % \begin{Verbatim} % \newif\ifNoTag % \renewcommand*\NamesFormat[1] % {% % #1\unless\ifNoTag\NameQueryInfo{}\fi % \global\NoTagfalse% % } % \end{Verbatim} % \end{Quote} % % We saw this next example in Section~\ref{sec:Complexity}. If the tag is in a hook, it adds a space before it. Otherwise it adds no space. The color and font switches match the conventions of this manual: % \begin{Quote} % \begin{Verbatim} % \makeatletter % \NameAddInfo{Elizabeth, I}{\if@nameauth@InHook{ }\fi``Gloriana''} % \makeatother % \renewcommand*\NamesFormat[1] % {\color{blue}\sffamily #1\NameQueryInfo{}} % \renewcommand*\MainNameHook{\sffamily} % \end{Verbatim} % \end{Quote} % % \Info*{\small\dbend}Even though the core name engine has a ``locked path'' to protect against being reentrant, that does not prevent all problems. Below we show an example of a solution that will avoid halting \LaTeX\ with an error. We ensure that, if we are in a formatting hook, we will not call an infinite series of \cmd{\NameQueryInfo}. Take care to note what happens in a formatting hook, and what happens outside of a hook. %^^A % \begin{VerbatimOut}{\jobname.tmp} % \makeatletter % \NameAddInfo[Ulysses S.]{Grant} % {\if@nameauth@InHook\ (term 1869--1877)\else % eighteenth US president (1869--1877)\fi} % \NameAddInfo[Schuyler]{Colfax} % {\if@nameauth@InHook\ (seventeenth US vice-president)\else % \footnote{\Name[Schuyler]{Colfax} was the seventeenth % US vice-president during the first term (1869--1873) % of \Name*[Ulysses S.]{Grant}, \NameQueryInfo{}.}\fi} % \makeatother % % \renewcommand*\NamesFormat{} % \renewcommand*\MainNameHook{} % % Let's remember \Name[Schuyler]{Colfax}.\NameQueryInfo{} % Derived from ``scholar'', this name can occur % as ``Skylar'' for girls and ``Skyler'' for boys. % % \renewcommand*\NamesFormat[1]{#1\NameQueryInfo{}} % % \ForgetThis\Name[Ulysses S.]{Grant} had a poor reputation among % radical Republicans, especially the Forty-Eighters. Again we note % \ForgetThis\Name[Schuyler]{Colfax}. % \end{VerbatimOut} %^^A % \begin{Quote} % \PatInfo[3.5ex]{\ShowPattern[Ulysses S.]{Grant}!DB\break % \ShowPattern[Schuyler]{Colfax}!DB\break % \ShowPattern[Schuyler]{Colfax}!MN\break % \ShowPattern[Ulysses S.]{Grant}!MN} % \VerbatimInput[gobble=0]{\jobname.tmp} % % \input{\jobname.tmp} % \end{Quote} % % \ReturnLink % % \begin{Quotation}{\Name[Leonard]{Bernstein}} % {``What Makes Opera Grand?'', \Title{Vogue} (December 1958)} % \textls[8]{Any great work of art \dots revives and readapts time and % space, and the measure of its success is the extent to which it makes % you an inhabitant of that world\,---\,the extent to which it invites % you in and lets you breathe its strange, special air.} % \index{creatives, quotes of\noexpand\string|hyperpage} % \end{Quotation} % % \newpage % % \section[Formatting and Decisions]{Basic Formatting and Name Decisions} % \label{sec:FormatChoice} % % \subsection{Basic Formatting} % \label{sec:Formatting} % % This section gives a basic overview. Section~\ref{sec:AdvancedFormat} explores automation and more. % % \negmedskip % \subsubsection*{\hfil Syntactic Changes} % % Even with the default options for \textsf{nameauth} wherein no font changes occur, we can observe syntactic changes to names: % % \begingroup % \renewcommand\NamesFormat{} % \renewcommand\MainNameHook{} % \begin{tcolorbox}[colframe=gray,colback=white, % adjusted title={\large\hfil Syntactic Changes; % No Formatting or Post-Processing}]\centering % \begin{tabular}{llll}\toprule % \bfseries First Instance & \bfseries Macro & \bfseries Later Instance & \bfseries Macro\\\midrule % \ForgetThis\Patton & \cmd{\Patton} & \Patton & \cmd{\Patton}\\ % \ForgetThis\LPatton & \cmd{\LPatton} & \LPatton & \cmd{\LPatton}\\ % \ForgetThis\SPatton & \cmd{\SPatton} & \SPatton & \cmd{\SPatton}\\\midrule % \ForgetThis\Yamt & \cmd{\Yamt} & \Yamt & \cmd{\Yamt}\\ % \ForgetThis\LYamt & \cmd{\LYamt} & \LYamt & \cmd{\LYamt}\\ % \ForgetThis\SYamt & \cmd{\SYamt} & \SYamt & \cmd{\SYamt}\\\bottomrule % \end{tabular} % \end{tcolorbox} % \endgroup % % We can add formatting to these changes by using formatting hooks. In its basic form, this refers to font changes. In its advanced form, one can add or modify text elements, syntactic forms of names, and so on, while leaving index entries undisturbed (Section~\ref{sec:AltFormat}). Although we have encountered examples of syntactic name changes since the start of this manual, here we define that behavior formally: % \begin{itemize} % \item First instance of a name % \begin{itemize} % \item No name pattern exists. % % \item A name is printed with its long form (default). % % \item The ``first-use'' formatting hook is used (default). % % \item After the name is printed, a name pattern is created. % \end{itemize} % % \item Subsequent instance of a name % \begin{itemize} % \item A name pattern already exists. % % \item A name is printed using a shorter form (default). % % \item The ``subsequent-use'' formatting hook is used (default). % \end{itemize} % \end{itemize} % % \subsubsection*{\hfil Two Formatting Systems} % % Many books are structured with front matter that includes a table of contents, foreword, introductory material, and other instructive content that is not part of the main matter. The \textsf{nameauth} package has separate syntax and formatting system for front matter (\texttt{!NF}) and main matter (\texttt{!MN}), linked to name patterns (Section~\ref{sec:NamePatterns}). % % \DescribeMacro{\NamesActive} % Independent ``main-matter'' and ``front-matter'' systems are used to format first and subsequent name uses. % \DescribeMacro{\NamesInactive} % \cmd{\NamesInactive} and the \texttt{frontmatter} option enable the front-matter system. \cmd{\NamesActive} switches names to the main-matter system. The \texttt{mainmatter} option is the default setting for names. % % \Global Both \cmd{\NamesInactive} and \cmd{\NamesActive} can be used explicitly as a pair or singly within a local scope. Use \cmd{\global} to force a global effect. % % \DescribeMacro{\NamesFormat} % The main-matter system uses \cmd{\NamesFormat} to post-process first occurrences of names and % \DescribeMacro{\MainNameHook} % \cmd{\MainNameHook} for subsequent uses. The front-matter system uses \cmd{\FrontNamesFormat} % \DescribeMacro{\FrontNamesFormat} % for first uses and \cmd{\FrontNameHook} for subsequent uses. The \texttt{alwaysformat} % \DescribeMacro{\FrontNameHook} % option causes only \cmd{\NamesFormat} and \cmd{\FrontNamesFormat} to be used. Since the formatting hooks always are defined when using \textsf{nameauth}, one must use \cmd{\renewcommand} when changing their definitions.\footnote{The names of these macros grew from \cmd{\NamesFormat}, originally the only formatting hook. Especially with the macros in this section, the naming scheme is unfortunate because package development involved some groping in the dark regarding the concepts.} % Below we color-code the systems and ``forget'' previous name uses: % \begin{Quote} % \ForgetName[Rudolph]{Carnap} % \PatInfo[4ex]{\textrm{front-matter}\hfill\break % \ShowPattern[Rudolph]{Carnap}!NF\break % \ShowPattern[Nicolas]{Malebranche}!NF\break % \textrm{main-matter}\hfill\break % \ShowPattern[Rudolph]{Carnap}!MN\break % \ShowPattern[Nicolas]{Malebranche}!MN} % \begin{tcolorbox}[colframe=violet,colback=white, % adjusted title={\large\hfil Front-matter system: \cmd{\NamesInactive}}] % \NamesInactive % \begin{tabular}{ll} % \Name[Rudolph]{Carnap} & |\Name[Rudolph]{Carnap}|\\ % \Name[Rudolph]{Carnap} & |\Name[Rudolph]{Carnap}|\\ % \Name[Nicolas]{Malebranche} & |\Name[Nicolas]{Malebranche}|\\ % \Name[Nicolas]{Malebranche} & |\Name[Nicolas]{Malebranche}|\\ % \end{tabular} % \end{tcolorbox} % % \begin{tcolorbox}[colframe=blue,colback=white, % adjusted title={\large\hfil Main-matter system: \cmd{\NamesActive}}] % \NamesActive % \begin{tabular}{ll} % \Name[Rudolph]{Carnap} & |\Name[Rudolph]{Carnap}|\\ % \Name[Rudolph]{Carnap} & |\Name[Rudolph]{Carnap}|\\ % \Name[Nicolas]{Malebranche} & |\Name[Nicolas]{Malebranche}|\\ % \Name[Nicolas]{Malebranche} & |\Name[Nicolas]{Malebranche}|\\ % \end{tabular} % \end{tcolorbox} % \end{Quote} % % We used the \textsf{xcolor} package with the following macros: % \begin{Quote} % \begin{Verbatim} % \renewcommand*\FrontNamesFormat[1]{\color{violet}\sffamily #1} % \renewcommand*\FrontNameHook[1]{\color{darkgray}\sffamily #1} % \renewcommand*\NamesFormat[1]{\color{blue}\sffamily #1} % \renewcommand*\MainNameHook[1]{\sffamily #1} % \end{Verbatim} % \end{Quote} % % \DescribeMacro{\ForceName} % Use this prefix macro to force ``first use'' formatting for the next \cmd{\Name}, etc., but without deleting any name patterns. See also Sections~\ref{sec:DataTagHooks}, \ref{sec:NameControl}, and~\ref{sec:AKA}. Thus: % \begin{Block} % \PatInfo*{\ShowPattern[Rudolph]{Carnap}!MN}^^A % \Name[Rudolph]{Carnap}\dotfill^^A % \cmd{\Name[Rudolph]\{Carnap\}}\\ % \ForceName\Name[Rudolph]{Carnap}\dotfill^^A % \cmd{\ForceName}\cmd{\Name[Rudolph]\{Carnap\}} % \end{Block} % % \begin{InfoBox} % In cases where formatting also changes the syntactic form of a name in addition to its typography (Section~\ref{sec:AltFormat}f.), \cmd{\ForceName} could interfere with \cmd{\ForceFN} and \cmd{\ForceAffix}. % \end{InfoBox} % % \Info*{\small\texttt{alwaysformat}}Below we simulate \texttt{alwaysformat} via package internals. Only the ``first use'' formatting hooks are used. This is a relic from early versions of \textsf{nameauth}. % \makeatletter\@nameauth@AlwaysFormattrue\makeatother% % \ForgetName[M.T.]{Cicero}\ForgetName{Elizabeth, I}% % \begin{itemize} % \item Front matter: \NamesInactive \Name[Albert]{Einstein}, \Name[Albert]{Einstein}; \Name{Confucius}, \Name{Confucius}.\\ % Patterns: \texttt{\ShowPattern[Albert]{Einstein}!NF \ShowPattern{Confucius}!NF} % % \item Main matter: \NamesActive \Name[M.T.]{Cicero}, \Name[M.T.]{Cicero}; \Name{Elizabeth, I}, \Name{Elizabeth, I}.\\ % Patterns: \texttt{\ShowPattern[M.T.]{Cicero}!MN \ShowPattern{Elizabeth, I}!MN} % \end{itemize} % \makeatletter\@nameauth@AlwaysFormatfalse\makeatother % % \subsubsection*{\hfil Hook caveats} % % The core name engine determines what syntactic name elements exist and how they are to be displayed (Sections~\ref{sec:NullArgs} and~\ref{sec:AdvancedFormat}). The format hook dispatcher passes the name to the formatting hooks within a local scope:\footnote{We moved \cmd{\@nameauth@InHooktrue} into the immediate hook groups from the beginning of the hook dispatcher to make the logic and functionality more obvious to read.} % \begin{itemize} % \item[] \cmd{\bgroup}\cmd{\@nameauth@InHooktrue}\meta{Hook}\texttt{\{\#1\}}\cmd{\egroup}. % \end{itemize} % Due to this design, both the following achieve the same effect: % \begin{itemize} % \item[] \cmd{\renewcommand*}\cmd{\NamesFormat\{}\cmd{\itshape}\texttt{\}} % \item[] \cmd{\renewcommand*}\cmd{\NamesFormat\{}\cmd{\textit}\texttt{\}} % \end{itemize} % % One can create formatting hooks that take either no argument or one argument. Since the formatting hooks are already defined, one must not use \cmd{\newcommand} to create new hooks. Instead, use \cmd{\renewcommand} e.g.: % \begin{itemize} % \item[] \cmd{\renewcommand*}\cmd{\NamesFormat\{}\meta{content}\texttt{\}} % \item[] \cmd{\renewcommand*}\cmd{\NamesFormat[1]\{}\meta{content}\texttt{\}} % \end{itemize} % A hook with one argument has more options than a font switch (Section~\ref{sec:SpecialUses}). To test if one is in a formatting hook, use |\if@nameauth@InHook| (Sections~\ref{sec:Complexity} and~\ref{sec:DataTags}). % % \subsection{Application: Footnotes} % % Names in the body text, such as \ForgetThis\Harnack\ (later ennobled to \LHarnack[Adolf von]), normally affect name forms in the footnotes.\footnote{We have \Harnack\ from \cmd{\Harnack} instead of \ForgetThis\Harnack.} % In footnote \arabic{footnote} below, \cmd{\MainNameHook} is called instead of \cmd{\NamesFormat} because \Harnack\ occurred above. We could use \cmd{\ForgetThis} (Section~\ref{sec:NameControl}) in the footnote to change that behavior. Another way uses the front-matter system and a redefined footnote macro: %^^A % \begin{VerbatimOut}{\jobname.tmp} % \makeatletter % \let\@oldfntext\@makefntext % \long\def\@makefntext#1{\NamesInactive\@oldfntext{#1}\NamesActive} % \makeatother % \end{VerbatimOut} %^^A % \begin{Quote} % \PatInfo[4ex]{\ShowPattern[Adolf]{Harnack}!MN\break % \ShowPattern[Adolf]{Harnack}!NF} % \VerbatimInput[gobble=0]{\jobname.tmp} % \end{Quote} % \input{\jobname.tmp} % % Now we see different results.\footnote{We have \Harnack\ from \cmd{\Harnack}, then \Harnack.} % Footnote \arabic{footnote} shows the first use of a name because it is the first use in the front-matter system. Below we revert footnotes with: %^^A % \begin{VerbatimOut}{\jobname.tmp} % \makeatletter % \let\@makefntext\@oldfntext % \makeatother % \end{VerbatimOut} %^^A % \begin{Quote} % \VerbatimInput[gobble=0]{\jobname.tmp} % \end{Quote} % \input{\jobname.tmp} % % \begin{Quotation}{\Name{Confucius}} % {\Title{The Analects}, C II (475--221 \textsc{bc})} % He who exercises government by means of his virtue may be compared % to the north polar star, which keeps its place and all the stars % turn towards it. % \index{philosophers, quotes of\noexpand\string|hyperpage} % \end{Quotation} % % \newpage % % \subsection{Making Name Decisions} % \label{sec:NameControl} % % The macros that switch between name systems are local (\cmd{\NamesActive} and \cmd{\NamesInactive}). Otherwise, all the macros below are \emph{global} with respect to name patterns and scoping. Unless restricted to the current name system by \cmd{\LocalNames}, they affect both name systems. % % Creating and deleting name patterns affects syntactic name forms, formatting, index protection of cross-references (Section~\ref{sec:IndexRef}), and the outcomes of name tests (Section~\ref{sec:NameTests}). % % \DescribeMacro{\ForgetName} % This macro ``forgets'' a name by deleting its pattern. That forces a ``pre-first use'' state. The core name engine treats the name as a first use. Some test results change (Section~\ref{sec:NameTests}), and name protection for indexing is removed, similar to the way that \cmd{\IncludeName*} ``unprotects'' xrefs (Section~\ref{sec:IdxFine}). % % \begin{SyntaxBox} % \cmd{\ForgetName}\oarg{FNN}\marg{SNN\textbf{,}Affix}\oarg{Alternate} % \end{SyntaxBox} % % \DescribeMacro{\ForgetThis} % This macro makes the name engine ``forget'' the name pattern just before the parser, printing the name as a first use, then ``remembering'' the name. This can affect some tests in formatting hooks. After knowing \Einstein, we forget him again:\footnote{\cmd{\ForgetThis} no longer affects the index unless one uses the \texttt{oldreset} option. Likewise, \cmd{\SubvertThis} no longer affects the index unless one uses the \texttt{oldreset} option.} % \begin{Block} % \ForgetThis\Einstein\dotfill |\ForgetThis\Einstein| % \end{Block} % % \DescribeMacro{\SubvertName} % This macro ``subverts'' a name by creating a name pattern. This makes the name engine handle a name as a subsequent use, changes some test results, and ``protects'' a name from being used as a \textit{see} reference, analogous to \cmd{\ExcludeName} and \cmd{\IndexRef}: % % \begin{SyntaxBox} % \cmd{\SubvertName}\oarg{FNN}\marg{SNN\textbf{,}Affix}\oarg{Alternate} % \end{SyntaxBox} % % \DescribeMacro{\SubvertThis} % This macro causes the name egine to create a name pattern just before the parser, printing the name as a subsequent use. This can affect some tests in formatting hooks. \cmd{\ForgetThis} has a higher priority than \cmd{\SubvertThis} and negates it (Section~\ref{sec:Priorities}). % % \begin{InfoBox} % We advise users to avoid using \cmd{\ForgetThis} and \cmd{\SubvertThis} before any macro that does not print a name in the text. % \end{InfoBox} % % \begin{itemize} % \item \DescribeMacro{\LocalNames} The helper macro \cmd{\LocalNames} restricts the macros above to the \emph{current} name system, but not to any scope. % % \item \DescribeMacro{\GlobalNames} The helper macro \cmd{\GlobalNames} restores the effects of these macros to \emph{both name systems.} % \end{itemize} % % In the next example we define a macro that reports whether or not the specific name |\Name[Charlie]{Chaplin}|\JustIndex\Name[Charlie]{Chaplin} exists. There are four outcomes: the name exists in the main matter, in the front matter, in both name systems, or it does not exist. The naming macros use the current name system. The macros on this page affect both name systems by default. % % \newpage % % \begin{VerbatimOut}{\jobname.tmp} % \newcommand\CheckChuck{{Name systems: % \IfFrontName[Charlie]{Chaplin} % {\bfseries\IfMainName[Charlie]{Chaplin}{in both}{in front}} % {\bfseries\IfMainName[Charlie]{Chaplin}{in main}{in none}}}} % % Create a name pattern in both systems\dotfill % \SubvertName[Charlie]{Chaplin}\CheckChuck % % Restrict to the current (main) name system. \LocalNames % % Forget a name in the main-matter system\dotfill % \ForgetName[Charlie]{Chaplin}\CheckChuck % % Restored: \Name[Charlie]{Chaplin}\dotfill\CheckChuck % % Switch to the front matter. \NamesInactive % % Forget a name in the front-matter system\dotfill % \ForgetName[Charlie]{Chaplin}\CheckChuck % % Restored: \Name[Charlie]{Chaplin}\dotfill\CheckChuck % % Switch to the main matter. \NamesActive % % Lift name system restrictions. \GlobalNames % % Forget a name in both systems\dotfill % \ForgetName[Charlie]{Chaplin}\CheckChuck % \end{VerbatimOut} % \begin{Quote} % \VerbatimInput[gobble=0]{\jobname.tmp} % % \PatInfo[3ex]{\ShowPattern[Charlie]{Chaplin}!MN\break % \ShowPattern[Charlie]{Chaplin}!NF} % \input{\jobname.tmp} % \end{Quote} % % \subsection{Summary} % % \begingroup % We summarize info on name forms and formatting, using the following macros: % \begin{Quote} % \begin{Verbatim} % \renewcommand*\NamesFormat[1] % {\color{blue}\sffamily#1\NameQueryInfo{}} % \renewcommand*\MainNameHook{\sffamily} % \begin{nameauth} % \< Bailey & Betsey & Bailey & > % \< Faisal & & Faisal, bin Abdulaziz & > % \end{nameauth} % \NameAddInfo{Faisal, bin Abdulaziz}{ Al Saud} % \TagName{Faisal, bin Abdulaziz}{ Al Saud, king} % \end{Verbatim} % \end{Quote} % \renewcommand*\NamesFormat[1] % {\color{blue}\sffamily#1\NameQueryInfo{}} % \renewcommand*\MainNameHook{\sffamily} % % Now we show the macros at work. Regarding the automatic use of the name tag in the first-use hook, see Section~\ref{sec:DataTagHooks}. % \phantomsection % \begin{itemize}[leftmargin=3cm]\small % \item[\hypertarget{FirstI}{First Instance:}] % \PatInfo[3ex]{\ShowPattern[Betsey]{Bailey}!MN\break % \ShowPattern{Faisal, bin Abdulaziz}!MN} % Name pattern created with text output. % Index state 2, 4, or 6 (Section~\ref{sec:RuleStates}). % Name form: long. First-use hooks. % \item[] \ForgetThis\Bailey \dotfill \cmd{\Bailey}\\ % \hbox{}\hfill \cmd{\LBailey}\\ % \hbox{}\hfill \cmd{\SBailey} % \item[] \ForgetThis\Faisal \dotfill \cmd{\Faisal}\\ % \hbox{}\hfill \cmd{\LFaisal}\\ % \hbox{}\hfill \cmd{\SFaisal} % % \item[\hypertarget{LaterI}{Later Instance:}] % No change to name pattern. Index state 2, 4, or 6. % Name form: short or long. Subsequent-use hooks. % \item[] \Bailey \dotfill^^A % \cmd{\Bailey} % \item[] \LBailey \dotfill^^A % \cmd{\LBailey} % \item[] \SBailey \dotfill^^A % \cmd{\SBailey} % \item[] \Faisal \dotfill^^A % \cmd{\Faisal}\\ % \hbox{}\hfill \cmd{\SFaisal} % \item[] \LFaisal \dotfill^^A % \cmd{\LFaisal} % \item[] \ForceFN\SFaisal \dotfill^^A % \cmd{\ForceFN}\cmd{\SFaisal} % % \item[Forgotten:] % Name pattern deleted. Index state 1, 3, or 5. % Next instance usually will be a % \hyperlink{FirstI}{first instance}. % \item[] (no output)\ForgetName[Betsey]{Bailey}^^A % \dotfill \cmd{\ForgetName[Betsey]\{Bailey\}} % \item[] (no output)\ForgetName{Faisal, bin Abdulaziz}^^A % \dotfill |\ForgetName{Faisal, bin Abdulaziz}| % % \item[Subverted:] % Name pattern created. Index state 2, 4, or 6. % Next instance usually will be a % \hyperlink{LaterI}{later instance}. % \item[] (no output)\SubvertName[Betsey]{Bailey}^^A % \dotfill \cmd{\SubvertName[Betsey]\{Bailey\}} % \item[] (no output)\SubvertName{Faisal, bin Abdulaziz}^^A % \dotfill |\SubvertName{Faisal, bin Abdulaziz}| % % \item[\cmd{\ForgetThis}:] % Name pattern deleted, then created again. % Index state 2, 4, or 6. Name form and format: % \hyperlink{FirstI}{first instance}. % Next instance usually will be a % \hyperlink{LaterI}{later instance}. % \item[] \ForgetThis\Bailey \dotfill \cmd{\ForgetThis}\cmd{\Bailey}\\ % \hbox{}\hfill \cmd{\ForgetThis}\cmd{\LBailey}\\ % \hbox{}\hfill \cmd{\ForgetThis}\cmd{\SBailey} % \item[] \ForgetThis\Faisal \dotfill \cmd{\ForgetThis}\cmd{\Faisal}\\ % \hbox{}\hfill \cmd{\ForgetThis}\cmd{\LFaisal}\\ % \hbox{}\hfill \cmd{\ForgetThis}\cmd{\SFaisal} % % \item[\cmd{\SubvertThis}:] % Name pattern created. Index state 2, 4, or 6. % Name form and format: \hyperlink{LaterI}{later instance}. % Next instance usually will be a % \hyperlink{LaterI}{later instance}. % \item[] \SubvertThis\Bailey \dotfill^^A % \cmd{\SubvertThis}\cmd{\Bailey} % \item[] \SubvertThis\LBailey \dotfill^^A % \cmd{\SubvertThis}\cmd{\LBailey} % \item[] \SubvertThis\SBailey \dotfill^^A % \cmd{\SubvertThis}\cmd{\SBailey} % \item[] \SubvertThis\Faisal \dotfill^^A % \cmd{\SubvertThis}\cmd{\Faisal}\\ % \hbox{}\hfill \cmd{\SubvertThis}\cmd{\SFaisal} % \item[] \SubvertThis\LFaisal \dotfill^^A % \cmd{\SubvertThis}\cmd{\LFaisal} % \item[] \SubvertThis\ForceFN\SFaisal \dotfill^^A % \cmd{\SubvertThis}\cmd{\ForceFN}\cmd{\SFaisal} % % \item[Format as First:] % No change to name pattern. Index state 2, 4, or 6. % Name form: short or long. Name format: First-use hooks. % \item[] \ForceName\Bailey \dotfill^^A % \cmd{\ForceName}\cmd{\Bailey} % \item[] \ForceName\LBailey \dotfill^^A % \cmd{\ForceName}\cmd{\LBailey} % \item[] \ForceName\SBailey \dotfill^^A % \cmd{\ForceName}\cmd{\SBailey} % \item[] \ForceName\Faisal \dotfill^^A % \cmd{\ForceName}\cmd{\Faisal} % \item[] \ForceName\LFaisal \dotfill^^A % \cmd{\ForceName}\cmd{\LFaisal} % \item[] \ForceName\SFaisal \dotfill^^A % \cmd{\ForceName}\cmd{\SFaisal} % \item[] \ForceName\ForceFN\SFaisal \dotfill^^A % \cmd{\ForceName}\cmd{\ForceFN}\cmd{\SFaisal} % \end{itemize} % \endgroup % % \subsection{Testing Name Decisions} % \label{sec:NameTests} % % Since name patterns are control sequences like macros, we can test for their existence. This can relate names to each other dynamically throughout a document. % % \subsubsection{Testing Macros} % % The macros in this section test for the presence or absence of a name, then expand to a result based on the outcome of the test. % % \DescribeMacro{\GlobalNameTest} % The default behavior \emph{encapsulates the decision paths in a local scope,} insulating some changes therein. % \DescribeMacro{\LocalNameTest} % If this is not desired, use the \texttt{globaltest} option or \cmd{\GlobalNameTest}. \cmd{\LocalNameTest} will re-enable the default. Any naming macros (\cmd{\Name}, etc.) used in these paths will have global assignments associated with them, i.e., name patterns, tags, etc. % % \DescribeMacro{\IfMainName} % In order to test whether or not a ``main matter'' name pattern exists, use this long macro that can accommodate paragraph breaks: % % \begin{SyntaxBox} % \cmd{\IfMainName}\oarg{FNN}\marg{SNN\textbf{,}Affix}\oarg{Alt.}^^A % \marg{yes}\marg{no} % \end{SyntaxBox} % % For example we have not encountered |\Name[Bob]{Hope}| yet. We could do the following test that will reflect whether or not the name is present in the text: %^^A % \begin{VerbatimOut}{\jobname.tmp} % I heard someone say: \IfMainName[Bob]{Hope} % {Bob here!} % {No Bob here.}\IndexName[Bob]{Hope} % \end{VerbatimOut} %^^A % \begin{Quote} % \VerbatimInput[gobble=0]{\jobname.tmp} % % \input{\jobname.tmp} % \end{Quote} % % Now we test for |\Name{Elizabeth,I}|, a name that has occurred, and we also show the difference between local and global test paths. We see that the default keeps local any assignments made in the test paths: %^^A % \begin{VerbatimOut}{\jobname.tmp} % \GlobalNameTest % \providecommand\msg{We are unsure about \LEliz} % % \IfMainName{Elizabeth,I} % {\providecommand\msg{We really do know of \LEliz}} % {\providecommand\msg{We do not know of \LEliz}} % % \parbox{0.4\textwidth}{\msg} (\cmd{\GlobalNameTest}). % % \LocalNameTest % \providecommand\msg{We are unsure about \LEliz} % % \IfMainName{Elizabeth,I} % {\providecommand\msg{We really do know of \LEliz}} % {\providecommand\msg{We do not know of \LEliz}} % % \parbox{0.4\textwidth}{\msg} (\cmd{\LocalNameTest}). % \end{VerbatimOut} %^^A % \begin{Quote} % \VerbatimInput[gobble=0,lastline=7]{\jobname.tmp} % % \VerbatimInput[gobble=0,firstline=8]{\jobname.tmp} % % \input{\jobname.tmp} % \end{Quote} % % \DescribeMacro{\IfFrontName} % In order to test whether or not a ``front matter'' name pattern exists, use this long macro that can accommodate paragraph breaks. Its syntax is: % % \begin{SyntaxBox} % \cmd{\IfFrontName}\oarg{FNN}\marg{SNN\textbf{,}Affix}\oarg{Alt.}^^A % \marg{yes}\marg{no} % \end{SyntaxBox} % % This macro works just like \cmd{\IfMainName}, except using the ``front matter'' name patterns as the test subject. These testing macros prove their worth especially through combination. For example, we do a test based on Section~\ref{sec:Formatting}. %^^A % \begin{VerbatimOut}{\jobname.tmp} % \IfFrontName[Rudolph]{Carnap} % {\IfMainName[Rudolph]{Carnap} % {\Name[Rudolph]{Carnap} is in both main- and front-matter text.} % {\Name[Rudolph]{Carnap} is only in front-matter text.}} % {\IfMainName[Rudolph]{Carnap} % {\Name[Rudolph]{Carnap} is only in main-matter text.} % {\Name[Rudolph]{Carnap} has not been mentioned.}} % \end{VerbatimOut} %^^A % \begin{Quote} % \VerbatimInput[gobble=0]{\jobname.tmp} % % \input{\jobname.tmp} % \end{Quote} % % \DescribeMacro{\IfAKA} % This macro tests whether or not a regular or excluded form of cross-reference control sequence exists. The syntax is: % % \begin{SyntaxBox} % \cmd{\IfAKA}\oarg{FNN}\marg{SNN\textbf{,}Affix}\oarg{Alt.}^^A % \marg{y}\marg{n}\marg{excl} % \end{SyntaxBox} % % This macro also works like \cmd{\IfMainName}, except that it has an additional \meta{excl} branch to detect names excluded by \cmd{\ExcludeName} (Section~\ref{sec:GeneralIndex}). If we do not use \cmd{\ExcludeName}, we can leave the \meta{excl} branch empty. % \begin{itemize} % \item Cross-references (the \meta{y} path) are name patterns ending in \texttt{!PN} (Section~\ref{sec:NamePatterns}). They expand to empty. % % \item Excluded names (the \meta{excl} path) have xrefs that expand to the value of \cmd{\@nameauth@Exclude}. % % \item \cmd{\ExcludeName} creates excluded xrefs. \cmd{\IncludeName} destroys them. % % \item \cmd{\IndexRef}, \cmd{\AKA}, \cmd{\AKA*}, \cmd{\PName}, and \cmd{\PName*} create xrefs, which are destroyed only by \cmd{\IncludeName*}. % \end{itemize} % \begin{Quote} % \begin{Verbatim} % \IfAKA[James]{Janos} % {\Name*[Jesse]{Ventura} is a stage name} % {\Name*[Jesse]{Ventura} is a regular name} % {}. % \end{Verbatim} % \end{Quote} % \PatInfo*{\ShowPattern[Jesse]{Ventura}!MN\break % \ShowPattern[James]{Janos}!PN\break % \ShowPattern[James]{Janos}!MN}^^A % First we mention \Name[Jesse]{Ventura} |\Name[Jesse]{Ventura}|, pro wrestler and Minnesota governor. His lesser-known legal name, % \IndexRef[James]{Janos}{Ventura, Jesse}\Name[James]{Janos} is an % alias: % |\IndexRef[James]{Janos}{Ventura, Jesse}\Name[James]{Janos}|. % The order of the macros is important. The test above says: % \IfAKA[James]{Janos} % {\Name*[Jesse]{Ventura} is a stage name} % {\Name*[Jesse]{Ventura} is a regular name} % {}. % We also can create a complete, unified test: % \begin{Quote} % \begin{Verbatim} % \IfAKA[FNN]{SNN, Affix}[Alt.] % {It is an xref.} % {It is a name. % \IfFrontName[FNN]{SNN, Affix}[Alt.] % {% It is at least in the front matter % \IfMainName[FNN]{SNN, Affix}[Alt.] % {It is in both front and main matter.} % {It is only in the front matter.}% % } % {% It is not in the front matter. % \IfMainName[FNN]{SNN, Affix}[Alt.] % {It is only in the main matter.} % {It does not exist.}% % }% % } % {It is excluded.} % \end{Verbatim} % \end{Quote} % % \subsubsection{Applications} % % As we have seen, we can control name forms with \cmd{\ForgetThis} and the like. Yet we also can use tests in situations where we might not know if a name has appeared, like when a name appears in a \texttt{table} or other float environment. Thus: % \begin{Quote} % \begin{Verbatim} % \IfMainName[M.S.]{Omartian} % {\Name[M.S.]{Omartian}} % {\Name[M.S.]{Omartian}[Michael]} produced many number-one % records over three decades. % \end{Verbatim} % % \PatInfo*{\ShowPattern[M.S.]{Omartian}} % \IfMainName[M.S.]{Omartian} % {\Name[M.S.]{Omartian}} % {\Name[M.S.]{Omartian}[Michael]} produced many number-one % records over three decades. % \end{Quote} % % Next we recall the movie, \textit{Ferris Bueller's Day Off}. Using conditionals, we can design statements that are sensitive to the plot. % \begin{Quote} % \begin{Verbatim} % This is \FName[Cameron]{Frye}. % \IfMainName[Ferris]{Bueller} % {He is developing positive traits.} % {He is gloomy and introspective.} % \Name[Ferris]{Bueller} decides to hang out with % \FName[Cameron]{Frye}. % \IfMainName[Ferris]{Bueller} % {He is developing positive traits.} % {He is gloomy and introspective.} % \end{Verbatim} % % This is \FName[Cameron]{Frye}. % \IfMainName[Ferris]{Bueller} % {He is developing positive traits.} % {He is gloomy and introspective.} % \Name[Ferris]{Bueller} decides to hang out with % \FName[Cameron]{Frye}. % \IfMainName[Ferris]{Bueller} % {He is developing positive traits.} % {He is gloomy and introspective.} % \end{Quote} % % Below, we can extend the use of conditionals to name tags. This allows different facts to appear with names, depending on what other names have appeared. We forget all names beforehand and show the following example: % \begin{VerbatimOut}{\jobname.tmp} % \NameAddInfo{Saul, of Tarsus} % {\IfMainName{Jesus, Christ} % {\IfMainName[Lucius]{Sergius Paulus} % {called himself \Name{Paul}, % perhaps in honor of his patron} % {next became a preacher to the Gentiles}} % {wrote first that he persecuted Christians}} % % \ForgetName{Jesus, Christ} % \ForgetName[Lucius]{Sergius Paulus} % \IndexRef{Paul}{Saul of Tarsus} % % \Name{Saul, of Tarsus} \NameQueryInfo{}. % He wrote in the letter to the Galatians, later reported in % the book of Acts, that he saw a vision of \Name{Jesus, Christ} % on the road to Damascus. % % \Name{Saul, of Tarsus} \NameQueryInfo{}. % He undertook three missionary journeys before being % sent to Rome for trial in an appeal to Caesar. % While in Cyprus, \Name{Saul, of Tarsus} converted % \Name[Lucius]{Sergius Paulus}, who became a patron. % % \Name{Saul, of Tarsus} \NameQueryInfo{}. % Under the name \Name{Paul} he wrote his letters % during his journeys and imprisonment. % \end{VerbatimOut} %^^A % \begin{Quote} % \PatInfo[3ex]{\ShowPattern{Paul}!PN\break % \ShowPattern{Saul, of Tarsus}!DB\break % \ShowPattern{Jesus, Christ}!MN\break % \textls[-10]{\ShowPattern[Lucius]{Sergius Paulus}!MN}\break % \ShowPattern{Paul}!MN\break % \ShowPattern{Saul, of Tarsus}!MN} % \VerbatimInput[gobble=0]{\jobname.tmp} % % \input{\jobname.tmp} % \end{Quote} % % \subsubsection*{\hfil Caveats} % % \begin{itemize} % \item One should check and validate test results. That is particularly true when using the tests inside macros. See \Title{The \TeX book}, 212--15. % % \item See Section~\ref{sec:Noexpand} regarding the use of \cmd{\noexpand} in name arguments to stabilize name patterns so that comparisons are consistent and valid. % % \item See also Section~\ref{sec:Unicode} regarding possible Unicode issues. This is perhaps less of an issue in modern \TeX\ distributions. % % \item The \textsf{trace} package, along with the macros \cmd{\show} and \cmd{\meaning}, can help debug problems. % \end{itemize} % % \newpage % % \subsubsection{Beamer Example} % % Names will change automatically in \textsf{beamer} overlays as one advances the slides unless we control them, as shown in the following example. %^^A % \ifdefined\NameauthDoTestFiles \edef\NameauthTestFile{test09_01.tex}\else % \edef\NameauthTestFile{\jobname.tmp}\fi %^^A % \begin{VerbatimOut}{\NameauthTestFile} % \documentclass{beamer} % \input{compat.tex} % Included with nameauth for compatibility. % \usepackage[noindex]{nameauth} % % \mode % \beamerdefaultoverlayspecification{<+->} % % \begin{document} % % \begin{frame}{Move Text Without Retyping Names} % \begin{itemize}\footnotesize % \item<1-> Original\ForgetName[George]{Washington}% % \ForgetName[George]{Washington's}\\ % This version of \Name[Ulysses S.]{Grant} changes. % \begin{enumerate} % \item<2-> \IfMainName[George]{Washington's}{He}% % {\Name[George]{Washington}} % became the first president % of the United States. % \item<3-> \IfMainName[George]{Washington}{His}% % {\Name*[George]{Washington's}} % military successes during the Seven Years War % readied him to command the army % of the Continental Congress. % \end{enumerate} % \item<1-> Reordered\ForgetName[George]{Washington}% % \ForgetName[George]{Washington's}\\ % This version of \ForgetThis\Name[Ulysses S.]{Grant} % does not change. % \begin{enumerate} % \item<3-> \IfMainName[George]{Washington}{His}% % {\Name*[George]{Washington's}} % military successes during the Seven Years War % readied him to command the army % of the Continental Congress. % \item<2-> \IfMainName[George]{Washington's}{He}% % {\Name[George]{Washington}} % became the first president % of the United States. % \end{enumerate} % \end{itemize} % % \end{frame} % % \end{document} % \end{VerbatimOut} %^^A % \begin{Quote} % \VerbatimInput[gobble=0]{\NameauthTestFile} % \IndexName[George]{Washington} % \IndexName[Ulysses S.]{Grant} % \end{Quote} % % The overlays, numbered from one to three, keep name forms consistent by deleting name patterns for each new overlay. Otherwise, name patterns would change for each new overlay. % % \newpage % % Name conditionals ensure specific, context-dependent forms based on what name has appeared. These conditionals allow the text in each overlay to be order-independent and able to be moved around at will. The first overlay shows the use of \cmd{\ForgetThis} to keep names constant. % % \begin{tcolorbox}\centering % \IfFileExists{beamer01.pdf}{\includegraphics[scale=0.6]{beamer01.pdf}} % {\hbox{\vbox to 8cm{\hbox{\hfill}}}} % \end{tcolorbox} % \IndexName[George]{Washington} % \IndexName[Ulysses S.]{Grant} % \bigskip % % The second overlay uses \cmd{\ForgetName} forcing specific name forms respective to each overlay, instead of respective to the overall sequence of overlays. We also observe the use of name conditionals in text elements that one might reorder. % % \begin{tcolorbox}\centering % \IfFileExists{beamer02.pdf}{\includegraphics[scale=0.6]{beamer02.pdf}} % {\hbox{\vbox to 8cm{\hbox{\hfill}}}} % \end{tcolorbox} % \IndexName[George]{Washington} % \IndexName[Ulysses S.]{Grant} % % \newpage % % Overlay three shows how these features integrate. A presenter can design slides that determine name forms, regardless of being re-ordered. % % \begin{tcolorbox}\centering % \IfFileExists{beamer03.pdf}{\includegraphics[scale=0.6]{beamer03.pdf}} % {\hbox{\vbox to 8cm{\hbox{\hfill}}}} % \end{tcolorbox} % \IndexName[George]{Washington} % \IndexName[Ulysses S.]{Grant} % \ReturnLink % % \begin{Quotation}{\Name[Theodore]{Roosevelt}} % {Introduction, \Title{The Papers and Writings of Abraham Lincoln} (1905)} % It is a very poor thing, whether for nations or individuals, to advance % the history of great deeds done in the past as an excuse for doing poorly % in the present; but it is an excellent thing to study the history of the % great deeds of the past, and of the great men who did them, with an % earnest desire to profit thereby so as to render better service in the % present. In their essentials, the men of the present day are much like % the men of the past, and the live issues of the present can be faced to % better advantage by men who have in good faith studied how the leaders of % the nation faced the dead issues of the past. % \index{politicians, quotes of\noexpand\string|hyperpage} % \end{Quotation} % % \newpage % % \section{Name Authority Basics} % \label{sec:NameAuthority} % % \subsection{Variant Names} % \label{sec:VarNames} % % This section explains how to manage simpler surname variants. There are several ways that \textsf{nameauth} can handle variants, in increasing levels of complexity. % \begin{itemize}[leftmargin=2cm] % \item[Group 1:] Use \meta{Alternate} to create variant forms, yet retain consistent index entries. This is the default function of \textsf{nameauth} seen already. % % \item[Group 2:] Use methods from Sections~\ref{sec:IndexPageno} and~\ref{sec:IndexRef}, and the manual approaches in Section~\ref{sec:Romani}. % \begin{itemize} % \item Use a particular name as a ``standard'' variant, then use other variants with a \textit{see} reference. % % \item Use one or more names as ``standard'' variants that refer to each other via \textit{see also} references. % \end{itemize} % % \item[Group 3:] Use alternate formatting and macros in name arguments (Sections~\ref{sec:AltFormat} and~\ref{sec:Romani}). % \end{itemize} % % \NameArgWarning % % \subsubsection[Alternate Argument]{Variants and the \protect\meta{Alternate} Argument} % % We begin with the first kind of variant names listed above. We decide that the canonical name to be used is \Tyson. We set up both the canonical name and an alternate name in the \texttt{nameauth} environment: % \begin{Quote} % \PatInfo[4ex]{\ShowPattern[Mike]{Tyson}!MN} % \begin{Verbatim} % \begin{nameauth} % \< Tyson & Mike & Tyson & > % \< Iron & Mike & Tyson & Iron Mike > % \end{nameauth} % % \IndexRef{Iron Mike}{Tyson, Mike} % \end{Verbatim} % \end{Quote} % % Because \cmd{\Iron} uses the \meta{Alternate} column, all index page entries are the same as those for \cmd{\Tyson}, the canonical name. Adding the cross-reference via \cmd{\IndexRef} produces ``Iron Mike \textit{see} Tyson, Mike'' in the index. % \begin{Quote} % \begin{tabular}{llll}\toprule % \rowcolor{nagrey}^^A % \bfseries Text & \bfseries Macro & % \bfseries Text & \bfseries Macro\\ % % \LIron \qquad & \cmd{\LIron} & % \LTyson[Iron Mike] & \cmd{\LTyson[Iron Mike]}\\ % % \rowcolor{nagrey}^^A % \Iron & \cmd{\Iron} & \Tyson & \cmd{\Tyson}\\ % % \SIron & \cmd{\SIron} & \STyson & \cmd{\STyson}\\\bottomrule % \end{tabular} % \end{Quote} % % Yet \meta{Alternate} does more than handle variant forenames in Western name forms. It can be used to manage alternate names in Eastern and ancient forms, as we have already seen. For this to work properly, we must have a name where \meta{SNN} and \meta{Affix} are both populated in order to use \meta{Alternate}. Otherwise, one winds up with the obsolete syntax (Section~\ref{sec:Obsolete}). That probably is undesired. % % \newpage % % We will engage with different kinds of variant names more, beginning with Section~\ref{sec:NameAncient}, Here we give a basic illustration of how one can start to manage these names just by using \meta{Alternate}. For instance: % \begin{Quote} % \PatInfo[4ex]{\ShowPattern{Elizabeth, I}!MN} % \begin{Verbatim} % \begin{nameauth} % \< Eliz & & Elizabeth, I & > % \end{nameauth} % % \IndexRef{Gloriana}{Elizabeth I} % \IndexRef[Good Queen]{Bess}{Elizabeth I} % % \LEliz[I, ``Gloriana''] was known also as % \ForceFN\SEliz[``Good Queen Bess'']. % \end{Verbatim} % % \LEliz[I, ``Gloriana''] was known also as % \ForceFN\SEliz[``Good Queen Bess'']. % \end{Quote} % % \subsubsection[Multiple Variants]{Managing Multiple Variant Names} % % With the second group of name variants listed above (relating to Sections~\ref{sec:IndexPageno} and~\ref{sec:IndexRef}), we get into pseudonyms, aliases, and variant family names. This class is more complicated for the following reasons: % \begin{itemize} % \item Names having separate index entries are linked together with cross-references; most of the work that interrelates these names is done with the indexing macros. % % \item Names that the author wants to treat as different may be seen by the \textsf{nameauth} internals as identical (Section~\ref{sec:Unique}). One can use nonprinting macros or grouping tokens in name arguments, index tagging macros, and formatting macros to create unique names (see below and Section~\ref{sec:IndexTag}). % \end{itemize} % % We approach and cross the boundary between the second and third groups of names mentioned above when we deal with names that contain particles, that change capitalization, that have changing grammatical endings (Sections~\ref{sec:NameParticles}, \ref{sec:NameMedieval}, \ref{sec:NameAncient}, \ref{sec:Romani}, and~\ref{sec:RealAltEx}f.). % % The following method avoids using macros in name arguments and it is easier to set up. The trade-off is that, while macros in name arguments are harder to set up, they benefit from automation. Below we establish two names and a sort key for the main name under which both names are indexed: % \begin{Quote} % \begin{Verbatim} % \begin{nameauth} % \< DuBois & W.E.B. & Du~Bois & > % \< AltDuBois & W.E.B. & DuBois & > % \end{nameauth} % \PretagName[W.E.B.]{Du~Bois}{DuBois, William} % \end{Verbatim} % \end{Quote} % \begin{itemize} % \item \PatInfo*{\ShowPattern[W.E.B.]{Du~Bois}!MN\break % \ShowPattern[W.E.B.]{DuBois}!MN}^^A % Based on historical research and some name authorities, we decide that the the canonical name will be: \ForgetThis\DuBois\ \cmd{\DuBois}. % % \item We use the non-breaking space (the tilde active character) because internally, \textsf{nameauth} removes all regular spaces from name patterns. Both \cmd{\Name[W.E.B.]\{Du Bois\}} and \cmd{\Name[W.E.B.]\{DuBois\}} have the same name pattern: \texttt{\ShowPattern[W.E.B.]{DuBois}} (Section~\ref{sec:NamePatterns}). The name pattern \texttt{\ShowPattern[W.E.B.]{Du~Bois}} differs from both of the other names. % % \item Another reason to use the non-breaking space is that it prevents a line break between the particle \textit{Du} and the name \textit{Bois}. % % \item The sort key that could be applicable to both names is \texttt{\{DuBois, William\}}. Had we used the sort key \texttt{\{Du Bois, William\}}, the name would be sorted before \texttt{dual}, which is not in order (Section~\ref{sec:IndexInitials}). % % \item Instead of using \cmd{\SkipIndex}\cmd{\AltDuBois} many times, we create a cross-reference before the alternate name is used to prevent index page entries from being created for the alternate form: % \IndexRef[W.E.B.]{DuBois}{Du Bois, W.E.B.}\\[1ex] % | \IndexRef[W.E.B.]{DuBois}{Du Bois, W.E.B.}| % % \item With the following setup we keep full stop detection and modify name forms. The only manual part would be to check if the name straddles a page break, then add |\JustIndex\DuBois| after the name if needed: %^^A % \begin{VerbatimOut}{\jobname.tmp} % \newcommand\VarDuBois{\JustIndex\DuBois\AltDuBois} % \newcommand\LVarDuBois{\JustIndex\DuBois\LAltDuBois} % \newcommand\SVarDuBois{\JustIndex\DuBois\SAltDuBois} % \VarDuBois[William E.B.]; % \LVarDuBois; % \SVarDuBois[William] % \end{VerbatimOut} %^^A % \begin{Quote} % \VerbatimInput[gobble=0]{\jobname.tmp} % % \input{\jobname.tmp} % \end{Quote} % \end{itemize} % % There are other solutions that one might envision, but they are a bit unwieldy. It does not seem practical to implement complex solutions for names unless perhaps one is using \LaTeX\ as a back-end for perhaps an XML workflow. % % \subsubsection[Nonstandard Caps]{Nonstandard Capitalization and Indexing} % \label{sec:NonstandardCaps} % % Here we look at simple nonstandard capitalization. Section~\ref{sec:AltFormat} dals with more complex examples. We consider poet \ForgetThis\Name[e.e.]{cummings}. Using the default \texttt{noformat} option, one can begin a sentence with something like: % \BothInfo[-6ex]{\ShowPattern[e.e.]{cummings}!MN} % {\ShowIdxPageref*[e.e.]{cummings}} %^^A % \begin{VerbatimOut}{\jobname.tmp} % \SubvertThis\CapThis\Name[e.e.]{cummings}'s motif of the % goat-footed balloon man has underlying sexual themes that % nevertheless present a childish facade. % \end{VerbatimOut} %^^A % \begin{Quote} % \VerbatimInput[gobble=0]{\jobname.tmp} % \renewcommand*\NamesFormat{} % \renewcommand*\MainNameHook{} % % \input{\jobname.tmp} % \end{Quote} % % If we want formatting and capitalization, we can do it this way: % \begin{VerbatimOut}{\jobname.tmp} % \ExcludeName[e.e.]{cummings's} % \JustIndex\Name[e.e.]{cummings} % \ForceName\SubvertThis\CapThis\Name[e.e.]{cummings's} % motif of the goat-footed balloon man has underlying % sexual themes that nevertheless present a childish facade. % \end{VerbatimOut} %^^A % \begin{Quote} % \VerbatimInput[gobble=0]{\jobname.tmp} % \PatInfo{\ShowPattern[e.e.]{cummings's}!PN\break % \ShowPattern[e.e.]{cummings's}!MN} % % \input{\jobname.tmp} % \end{Quote} % % In both examples above, we use \cmd{\SubvertThis} to force a subsequent use in order to prevent a first use that looks like ``\ForgetThis\CapThis\Name[e.e.]{cummings's}''. The macro \cmd{\CapThis} will capitalize the first letter in \emph{all name elements.} Using \cmd{\ExcludeName} keeps one from having to use \cmd{\SkipIndex} every time. % % \subsubsection[Variants and Xrefs]{Variant Names and Index Cross-References} % \label{sec:IdxVariants} % % \subsubsection*{\hfil Single Connections} % % Here we show differences among variants and cross-references. We can index variants under the canonical name or we can set up cross-references to variants. The order in which we do that is significant. % \begin{Quote} % \begin{Verbatim} % \begin{nameauth} % \< Carter & J.E. & Carter, Jr. & > % \end{nameauth} % \end{Verbatim} % \end{Quote} % % \begin{enumerate} % \item We use the canonical name to create page entries: % \PatInfo*{\ShowPattern[J.E.]{Carter, Jr.}!MN\hfill % \textrm{(1--2)}\break % \ShowPattern[Jimmy]{Carter}!PN\hfill \textrm{(3, 6)}\break % \ShowPattern[Jimmy]{Carter}!MN\hfill \textrm{(4)}\break % \ShowPattern[J.E.]{Carter, Jr.}!PN\hfill % \textrm{(5)}} % \item[] \LCarter[James Earl]\dotfill |\LCarter[James Earl]| % % \item Variants that only use \meta{Alternate} in the text create page entries under the canonical form, not under the variant form: % \item[] \DropAffix\LCarter[Jimmy]\dotfill^^A % |\DropAffix\LCarter[Jimmy]| % \item[] |\ShowIdxPageref*[J.E.]{Carter, Jr.}[Jimmy]|\dotfill^^A % \ShowIdxPageref*[J.E.]{Carter, Jr.}[Jimmy] % % \item We must create a \textit{see} reference from an alternate form to a canonical form \emph{before} using the alternate form in a naming macro, or the xref will be ignored and a warning will result: % \item[] |\IndexRef[Jimmy]{Carter}{Carter, J.E., Jr.}|^^A % \IndexRef[Jimmy]{Carter}{Carter, J.E., Jr.} % % \item No page entries will occur below because we made the \textit{see} reference first. Note how the alternate form is an independent name: % \item[] \Name[Jimmy]{Carter}\dotfill |\Name[Jimmy]{Carter}|\JustIndex\Carter % % \item We must index the alternate name with one of the following: % \item[] |\IndexName[J.E.]{Carter, Jr.}| % \item[] |\JustIndex\Carter| % % \item If instead we wanted to make a \textit{see also} reference, we would use both the canonical name and the alternate name, then create the cross-reference at the end of the document, \emph{after} all uses of the alternate name: % \item[] |\SeeAlso\IndexRef[Jimmy]{Carter}{Carter, J.E., Jr.}| % \end{enumerate} % % \subsubsection*{\hfil Multiple Connections} % % Below, two names are indexed with page numbers. They have \textit{see also} cross-references to each other. One of those names also has a \textit{see} reference to it: % \begin{enumerate} % \item We use the canonical name to set up page entries: % \PatInfo{\ShowPattern{Maimonides}!MN \textrm{(1)}\break % \ShowPattern{Moses, ben-Maimon}!PN \textrm{(2)}\break % \ShowPattern{Moses, ben-Maimon}!MN \textrm{(3)}\break % \ShowPattern{Rambam}!MN \textrm{(4)}\break % \ShowPattern{Rambam}!PN \textrm{(5)}} % \item[] \Name{Maimonides}\dotfill |\Name{Maimonides}| % % \item \Name{Maimonides} has two other names, one more used than the other. We set up his least-used name as the \textit{see} reference: % \item[] |\IndexRef{Moses, ben-Maimon}{Maimonides}|^^A % \IndexRef{Moses, ben-Maimon}{Maimonides} % % \item We have a main name with a page entry and a ``\textit{see} reference'' to that name. No page entries will occur below because we made the xref first: % \item[] \Name{Moses, ben-Maimon}\dotfill |\Name{Moses, ben-Maimon}| % % \item Before creating \textit{see also} cross-references, we use the other alias so that all the page entries precede the cross-references: % \item[] \Name{Rambam}\dotfill |\Name{Rambam}| % % \item All \textit{see also} references must come after all page entries. For example, one could put both of these macros at the end of the document: % \item[] |\SeeAlso\IndexRef{Maimonides}{Rambam}|\\ % \SeeAlso\IndexRef{Maimonides}{Rambam}^^A % |\SeeAlso\IndexRef{Rambam}{Maimonides}|^^A % \SeeAlso\IndexRef{Rambam}{Maimonides} % \end{enumerate} % % \subsubsection*{\hfil Multiple Targets} % % There is a case where one cross-reference can point to multiple targets, such as demonstrated in the example below: %^^A % \begin{VerbatimOut}{\jobname.tmp} % \PretagName{\textit{Snellius}}{Snellius} % \IndexRef{\textit{Snellius}} % {Snel van Royen, R.; Snel van Royen, W.} % Both \Name[W.]{Snel van Royen}[Willebrord] and % his son \Name[R.]{Snel van Royen}[Rudolph] were known % by the Latin moniker \Name{\textit{Snellius}}. % \end{VerbatimOut} %^^A % \begin{Quote} % \PatInfo[5ex]{\ShowPattern{\textit{Snellius}}!PRE\break % \ShowPattern{\textit{Snellius}}!PN\break % \ShowPattern[W.]{Snel van Royen}!MN\break % \ShowPattern[R.]{Snel van Royen}!MN} % \VerbatimInput[gobble=0]{\jobname.tmp} % % \input{\jobname.tmp} % \end{Quote} % % One must plan the location of xrefs or use \cmd{\IncludeName*}. Above, we have no page entry for |\Name{\textit{Snellius}}| because \cmd{\IndexRef} comes first. % % \subsection{Using a Name Authority} % % Below are two names from a name authority that this author created for a translation of \Title{\la{De Diaconis et Diaconissis Veteris Ecclesiae Liber Commentarius}} by \Name[Caspar]{Ziegler}. To get valid names that one can research, here are some tips: % \begin{itemize} % \item \href{https://data.cerl.org/thesaurus/_search}{CERL Thesaurus} % % \item \href{https://viaf.org/}{Virtual International Authority File} % % \item \href{https://edit16.iccu.sbn.it/web/edit-16}{EDIT16} % % \item \href{https://www.worldcat.org/}{WorldCat} % % \item \href{https://id.loc.gov/authorities/names.html}{Library of Congress} % % \item \href{https://www.columbia.edu/acis/ets/Graesse/contents.html} % {Older version of Graesse, \Title{\la{Orbis Latinus}}} % \end{itemize} % \begin{enumerate} % \item Vernacular names are canonical. Latin names refer to them. That holds also for place names. % % \item Sort vernacular names with \cmd{\PretagName} due to particles (Section~\ref{sec:IndexSort}). % % \item If Latin names are only cross-references, use \cmd{\IndexRef}\meta{name args} to generate cross-references before referring to any names (Section~\ref{sec:IndexRef}). % % \item If Latin names have page entries, then place \cmd{\SeeAlso}\cmd{\IndexRef}\meta{name args} as needed at the end of the document, before \cmd{\printindex}. % % \item English usage requires \cmd{\CapThis} with particles in \meta{SNN} (Section~\ref{sec:NameParticles}). % \end{enumerate} % \begin{Quote} % \vspace{3ex} % \BothInfo{\ShowPattern[Jacques]{De~Pamele}!MN\break % \ShowPattern[Jacobus]{Pamelius}!MN\break % \ShowPattern[Giovanni]{d'Andrea}!MN\break % \ShowPattern[Ioannes]{Andreae}!MN} % {\ShowIdxPageref*[Jacques]{De~Pamele}\break % \ShowIdxPageref*[Jacobus]{Pamelius}\break % \ShowIdxPageref*[Giovanni]{d'Andrea}\break % \ShowIdxPageref*[Ioannes]{Andreae}} % \vspace{-3ex} % \begin{Verbatim} % \PretagName[Jacques]{De~Pamele}{Depamele, Jacques} % \Name[Jacques]{De~Pamele}[Jacques de~Joigny] % \IndexRef[Jacobus]{Pamelius}{De~Pamele, Jacques} % \Name[Jacobus]{Pamelius} % % \PretagName[Giovanni]{d'Andrea}{Dandrea, Giovanni} % \Name[Giovanni]{d'Andrea} % \IndexRef[Ioannes]{Andreae}{d'Andrea, Giovanni} % \Name[Ioannes]{Andreae} % \end{Verbatim} % \end{Quote} % \negmedskip % \IndexRef[Jacobus]{Pamelius}{De~Pamele, Jacques} % \IndexRef[Ioannes]{Andreae}{d'Andrea, Giovanni} % \begin{itemize}[leftmargin=3.5cm] % \item[Canonical Name] \Name[Jacques]{De~Pamele}[Jacques de~Joigny]\\ % |\Name[Jacques]{De~Pamele}[Jacques de~Joigny]| % % \item[Latin Name] \Name[Jacobus]{Pamelius}\\ % |\Name[Jacobus]{Pamelius}| % % \item[Canonical Name] \Name[Giovanni]{d'Andrea}\\ % |\Name[Giovanni]{d'Andrea}| % % \item[Latin Name] \Name[Ioannes]{Andreae}\\ % |\Name[Ioannes]{Andreae}| % \end{itemize} % % \CapThis\Name[Giovanni]{d'Andrea} |\CapThis\Name[Giovanni]{d'Andrea}| can be used at the beginning of a sentence. |\Name[Jacques]{De~Pamele}| gives \Name[Jacques]{De~Pamele}. % % \ReturnLink % % \begin{Quotation}{\DuBois} % {\Title{Darkwater: Voices from within the Veil} (1920)} % In the awful cataclysm of World War, where from beating, slandering, % and murdering us the white world turned temporarily aside to kill each % other, we of the Darker Peoples looked on in mild amaze. % % \dots The fateful day came. It had to come. The cause of war is % preparation for war; and of all that Europe has done in a century there % is nothing that has equaled in energy, thought, and time her preparation % for wholesale murder. The only adequate cause of this preparation was % conquest and conquest, not in Europe, but primarily among the darker % peoples of Asia and Africa; conquest, not for assimilation and uplift, % but for commerce and degradation. For this, and this mainly, did Europe % gird herself at frightful cost for war. % \index{civil rights leaders, quotes of\noexpand\string|hyperpage} % \end{Quotation} % % \newpage % % \section{Advanced Formatting} % \label{sec:AdvancedFormat} % % Up to this point, formatting hooks have applied font and color changes to a parsed name, and perhaps printed a name tag. In this section we start to change the syntactic form of a name inside the formatting hooks. Below we see a general scheme of how the core name engine processes a name: % % \begin{tcolorbox}[colframe=violet!80!black,colback=white, % adjusted title={\sffamily\bfseries Naming Macro Layer}] % \small % % Naming macros (\cmd{\Name}, \cmd{\Name*}, \cmd{\FName}, \cmd{\FName*}, and the macros created by the \texttt{nameauth} environment) send arguments to three ``interface hooks'' that, by default, point to \cmd{\@nameauth@Name} (Section~\ref{sec:FullCustomize}). That macro is the backend for both the basic and quick interfaces.\medskip % % This backend handles work requested by \cmd{\JustIndex}, \cmd{\SubvertThis}, \cmd{\ForgetThis}, and \cmd{\SkipIndex}. Unless \cmd{\JustIndex} occurred, the backend then hands off the name arguments to the name parser, with either a main-matter \texttt{!MN} suffix or a front-matter \texttt{!NF} suffix. % % \begin{tcolorbox}[colframe=blue!80!black,colback=white, % adjusted title={\sffamily\bfseries Syntactic Element Layer}] % % The \cmd{\@nameauth@Parse} macro determines name category (Western or Non-Western), capitalization, punctuation, and name elements to be used. All needed macros are made available to the next layer. % % \begin{tcolorbox}[colframe=orange!80!black,colback=white, % adjusted title={\sffamily\bfseries Name Display Layer}] % % The two main macros in this layer are \cmd{\@nameauth@NonWest} and \cmd{\@nameauth@West}. The macro \cmd{\@nameauth@Form} has rules that set Boolean flags to determine the name form to be displayed, which goes to the format hook dispatcher. % % \begin{tcolorbox}[colframe=red!80!black,colback=white, % adjusted title={\sffamily\bfseries Format Hook Dispatcher}] % % \cmd{\@nameauth@Hook}: Check the name to be printed for a final full stop. Check which name system we are using.\medskip % % Call the appropriate formatting hook, depending on whether or not the name pattern exists, and if we are in the main-matter system or the front-matter system. % % \end{tcolorbox} % % \end{tcolorbox} % % \cmd{\@nameauth@Parse}: Create the name's pattern, a control sequence that makes the name ``exist'' for the sake of \textsf{nameauth}. % % \end{tcolorbox} % % \cmd{\@nameauth@Name}: If the final full stop flag is true, check the lookahead token for a full stop and gobble it if needed. % % \end{tcolorbox} % % \begin{Quotation}{\Name{Voltaire}} % {\Title{Sept Discours en Vers sur l'Homme} (1738)} % The secret to being a bore is to tell everything. % \index{philosophers, quotes of\noexpand\string|hyperpage} % \end{Quotation} % % \newpage % % \subsection{Formatting Hooks} % \label{sec:ComplexHooks} % % \begin{InfoBox}[General Hook Redefinition] % \VerbatimInput[gobble=0,numbers=none,fontsize=\small]{nullhook.tmp} % \end{InfoBox} % % \input{nullhook.tmp} % % \begingroup^^A Local format hook redefinition % This proof of concept puts the first mention of a name either in italics (front matter) or in boldface (main matter), and it adds a margin note if that is allowed. We use \cmd{\let} to save and restore the old hooks: %^^A % \ifdefined\NameauthDoTestFiles \edef\NameauthTestFile{test11_01.tex}\else % \edef\NameauthTestFile{\jobname.tmp}\fi %^^A % \begin{VerbatimOut}{\NameauthTestFile} % \documentclass{article} % \input{compat.tex} % Included with nameauth for compatibility. % \usepackage{makeidx} % \usepackage{nameauth} % % \makeindex % % % First save main- and front-matter hooks. Then change % % first-use hooks for both main matter and front matter. % \let\OldFormat\NamesFormat % \let\OldFrontNames\FrontNamesFormat % % \renewcommand*\NamesFormat[1]{\textbf{#1}\unless\ifinner % \marginpar{\raggedleft\scriptsize #1}\fi} % \renewcommand*\FrontNamesFormat[1]{\textit{#1}\unless\ifinner % \marginpar{\raggedleft\scriptsize #1}\fi} % % \PretagName{Vlad, {\c T}epe{\c s}} % {Vlad Tepes} % for accented names % \TagName{Vlad, II}{ Dracul} % for index information % \TagName{Vlad, III}{ Dracula} % \IndexRef{Dracula}{Vlad III} % % \begin{document} % % \begin{quote} % The new format (front matter):\NamesInactive % % \Name{Vlad, III}[III Dracula], known as % \IndexRef{Vlad, {\c T}epe{\c s}}{Vlad III} % \SubvertThis\Name*{Vlad, {\c T}epe{\c s}} % (\Name*{Vlad, {\c T}epe{\c s}}[the Impaler]) % after his death, was the son of \Name{Vlad, II}[II Dracul], % a member of the Order of the Dragon. Later instances of % ``\Name*{Vlad, III}'' and ``\Name{Vlad, III}'' appear thus. % % The new format (main matter):\NamesActive % % \Name{Vlad, III}[III Dracula], known as % \IndexRef{Vlad, {\c T}epe{\c s}}{Vlad III} % \SubvertThis\Name*{Vlad, {\c T}epe{\c s}} % (\Name*{Vlad, {\c T}epe{\c s}}[the Impaler]) % after his death, was the son of \Name{Vlad, II}[II Dracul], % a member of the Order of the Dragon. Later instances of % ``\Name*{Vlad, III}'' and ``\Name{Vlad, III}'' appear thus. % % \let\NamesFormat\OldFormat % \let\FrontNamesFormat\OldFrontNames % % We are back in the old format. % % in the front matter we see: \NamesInactive % \ForgetThis\Name{Vlad, III}[III Dracula], % \Name*{Vlad, III}, and \Name{Vlad, III}. % % in the main matter we see: \NamesActive % \ForgetThis\Name{Vlad, III}[III Dracula], % \Name*{Vlad, III}, and \Name{Vlad, III}. % \end{quote} % % \printindex % \end{document} % \end{VerbatimOut} %^^A % \begin{Quote} % \VerbatimInput[gobble=0,lastline=38]{\NameauthTestFile} % % \newpage % % \VerbatimInput[gobble=0,firstline=39]{\NameauthTestFile} % % \let\OldFormat\NamesFormat % \let\OldFrontNames\FrontNamesFormat % % \renewcommand*\NamesFormat[1]{\textbf{#1}\unless\ifinner % \marginpar{\raggedleft\scriptsize #1}\fi} % \renewcommand*\FrontNamesFormat[1]{\textit{#1}\unless\ifinner % \marginpar{\raggedleft\scriptsize #1}\fi} % % The new format (front matter):\NamesInactive % % \Name{Vlad, III}[III Dracula], known as % \IndexRef{Vlad, {\c T}epe{\c s}}{Vlad III} % \SubvertThis\Name*{Vlad, {\c T}epe{\c s}} % (\Name*{Vlad, {\c T}epe{\c s}}[the Impaler]) % after his death, was the son of \Name{Vlad, II}[II Dracul], % a member of the Order of the Dragon. Later instances of % ``\Name*{Vlad, III}'' and ``\Name{Vlad, III}'' appear thus. % % The new format (main matter):\NamesActive % % \Name{Vlad, III}[III Dracula], known as % \IndexRef{Vlad, {\c T}epe{\c s}}{Vlad III} % \SubvertThis\Name*{Vlad, {\c T}epe{\c s}} % (\Name*{Vlad, {\c T}epe{\c s}}[the Impaler]) % after his death, was the son of \Name{Vlad, II}[II Dracul], % a member of the Order of the Dragon. Later instances of % ``\Name*{Vlad, III}'' and ``\Name{Vlad, III}'' appear thus. % % \let\NamesFormat\OldFormat % \let\FrontNamesFormat\OldFrontNames % % We are back in the old format. % % in the front matter we see: \NamesInactive % \ForgetThis\Name{Vlad, III}[III Dracula], % \Name*{Vlad, III}, and \Name{Vlad, III}. % % in the main matter we see: \NamesActive % \ForgetThis\Name{Vlad, III}[III Dracula], % \Name*{Vlad, III}, and \Name{Vlad, III}. % \end{Quote} % % We redefine \cmd{\NamesFormat} and \cmd{\FrontNamesFormat} because it is more common to add extra information with the first mention of a name. % \endgroup^^A Local format hook redefinition % % \subsubsection[Life Dates]{Application: Life Dates} % % \begingroup^^A Local format hook redefinition % History texts tend to use life dates, regnal dates, and dates when certain figures flourished. We can use name tags for such dates, which can work with all name types. When used with Roman names (Section~\ref{sec:Romani}), if using name tags for dates, one would put \LA{agnomina} in \meta{Affix}. % % First we must create any name tags that might be used. Whether it is in the preamble or in the body text, the main point is that the tag can only be used if it exists. The tags used below have a leading space because they are printed conditionally in formatting hooks. % % We also define a cross-reference ``Atat\"urk''. After doing so, we use naming macros with that name, printing formatted names in the text but making no index page entries. That is a result of indexing rules in \textsf{nameauth}. % % We add a Boolean flag to the formatting hook that lets us suppress dates in first uses as needed, while normally displaying dates in first uses by default. We set aside the usual formatting of this manual. %^^A % \ifdefined\NameauthDoTestFiles \edef\NameauthTestFile{test11_02.tex}\else % \edef\NameauthTestFile{\jobname.tmp}\fi %^^A % \begin{VerbatimOut}{\NameauthTestFile} % \documentclass{article} % \input{compat.tex} % Included with nameauth for compatibility. % \usepackage{makeidx} % \usepackage{nameauth} % % \makeindex % % % Add name tags to names. % \NameAddInfo[George]{Washington}{ (1732--99)} % \NameAddInfo[Mustafa]{Kemal}{ (1881--1938)} % \NameAddInfo{Atat\"urk}{ (in 1934, a special surname)} % % % Ensure that Atat\"urk is a cross-reference that % % has no page entries in the index. % \IndexRef{Atat\"urk}{Kemal, Mustafa} % % % Manually suppress name tag in ``first'' instance % \newif\ifNoTag % % % Redesign formatting hook to usually print a tag % % only in ``first'' instance. On exit, It resets % % the flag that suppresses tags, making that flag % % work only once per name use. % % \renewcommand*\NamesFormat[1] % {% % #1\unless\ifNoTag\NameQueryInfo{}\fi % \global\NoTagfalse% % } % % \begin{document} % % \ForgetThis\Name[George]{Washington} held office as % the first US president from 1789 to 1797. % \Name[George]{Washington} was the only president whose % term in office was completely in the eighteenth century. % % If we need to trigger the first use hook at some point, % we can suppress dates and get an automatic long instance via: % \NoTagtrue\ForgetThis\Name[George]{Washington}. % % Or we can trigger the first-use hook in a subsequent name use % and still have dates: \ForceName\Name[George]{Washington}. % % We can add name info tags to names used only as cross-% % references. For example, \Name[Mustafa]{Kemal} was granted % the name \Name{Atat\"urk}. % % We mention \Name[Mustafa]{Kemal} % and \Name{Atat\"urk} again. Likewise, we can trigger a % first use, but with no name tag tag: % \NoTagtrue\ForgetThis\Name{Atat\"urk}. % % \printindex % \end{document} % \end{VerbatimOut} %^^A % \NameAddInfo[George]{Washington}{ (1732--99)} % \NameAddInfo[Mustafa]{Kemal}{ (1881--1938)} % \NameAddInfo{Atat\"urk}{ (in 1934, a special surname)} % \IndexRef{Atat\"urk}{Kemal, Mustafa} % \renewcommand*\NamesFormat[1] % {^^A % #1\unless\ifNoTag\NameQueryInfo{}\fi % \global\NoTagfalse^^A % } %^^A % \begin{Quote} % \VerbatimInput[gobble=0,lastline=5]{\NameauthTestFile} % % \VerbatimInput[gobble=0,firstline=6,lastline=32]{\NameauthTestFile} % \end{Quote} % % Up to now there has been a lot of setup. The payoff, however, comes in the main body text where the naming macros do not need manual additions: % \begin{Quote} % \VerbatimInput[gobble=0,firstline=33,lastline=44]{\NameauthTestFile} % % \ForgetThis\Name[George]{Washington} held office as % the first US president from 1789 to 1797. % \Name[George]{Washington} was the only president whose % term in office was completely in the eighteenth century. % % If we need to trigger the first use hook at some point, % we can suppress dates and get an automatic long instance via: % \NoTagtrue\ForgetThis\Name[George]{Washington}. % % Or we can trigger the first-use hook in a subsequent name use % and still have dates: \ForceName\Name[George]{Washington}. % \end{Quote} % % Since we already have set up a cross-reference with \cmd{\IndexRef}, we can use just the the naming macros with ``Atat\"urk'' and get the desired formatting without any page entries in the index: % \begin{Quote} % \VerbatimInput[gobble=0,firstline=45]{\NameauthTestFile} % % We can add name info tags to names used only as cross-^^A % references. For example, \Name[Mustafa]{Kemal} was granted % the name \Name{Atat\"urk}. % % We mention \Name[Mustafa]{Kemal} % and \Name{Atat\"urk} again. Likewise, we can trigger a % first use, but with no name tag: % \NoTagtrue\ForgetThis\Name{Atat\"urk}. % \end{Quote} % \endgroup^^A Local format hook redefinition % % \subsection{Alternate Formatting} % \label{sec:AltFormat} % % Alternate formatting is a framework that isolates local name changes in the text, especially to \meta{SNN}, from the name forms used globally in index entries. This allows some European or ``Continental'' academic formatting. % \begin{itemize} % \item Sections~\ref{sec:AltPossible} amd~\ref{sec:AltEnv} show how to enable and disable alternate formatting in either an activated or deactivated state. % % \item Section~\ref{sec:AltCaps} shows how \cmd{\CapThis} works only through its helper macro, \cmd{\AltCaps}, when alternate formatting is enabled. % % \item Section~\ref{sec:AltFeatures} shows how some built-in formatting macros work in formatting hooks along with the helper macros \cmd{\AltOn} and \cmd{\AltOff}. % \end{itemize} % % \begin{InfoBox} % Alternate formatting requires \cmd{\noexpand} before macros in name arguments to isolate all local changes in the formatting hooks from the global context, thus protecting index entries.\smallskip % % Every user-defined state change in custom macros used for alternate formatting requires two Boolean flags: one for the global state, and one for the local state.\smallskip % % Names that depend on alternate formatting cannot be used without it. Otherwise, one will see incorrect name forms in the text and spurious entries in the index. % \end{InfoBox} % % \subsubsection[Enabling/Disabling]{Enabling and Disabling} % \label{sec:AltPossible} % % Alternate formatting involves two separate things: capitalization and name formatting. Thus, we have two ``switches'' to manage it. The first is like the ignition switch of an automobile that either ``enables'' or ``disables'' the whole car. Alternate capitalization will work only while the auto is running. % % The second switch is like the manual clutch pedal of an auto. When one depresses the clutch, the output of the motor does not transfer to the wheels. It is ``deactivated''; the alternate formatting macros do not format their arguments. % % If one lets out the clutch, the power will transfer to the wheels and the car will be ``activated'' and start moving. Such activation happens when the alternate formatting macros format their arguments. % % \begin{Center} % \begin{tabular}{lcc}\toprule % Macro & Enabled & Activated\\\midrule % \cmd{\AltFormatActive} & \YES & \YES\\ % \cmd{\AltFormatActive*} & \YES & \NO\\ % \cmd{\AltFormatInactive} & \NO & \NO\\\bottomrule % \end{tabular} % \end{Center} % \begin{itemize} % \item \emph{Enabled} means that the alternate formatting mechanism inhibits the normal behavior of \cmd{\CapThis} and permits both \cmd{\AltCaps} and the local changes in formatting hooks triggered by \cmd{\AltOn}. % % \item \emph{Disabled} means that \cmd{\CapThis} again works normally and alternate formatting macros (\cmd{\AltCaps}, \cmd{\AltOn}, and \cmd{\AltOff}) are inhibited. % % \item \emph{Activated} means that built-in alternate formatting macros like \cmd{\textSC} globally format their arguments, except when turned off in formatting hooks by \cmd{\AltOff}. % % \item \emph{Deactivated} means that built-in alternate formatting macros like \cmd{\textSC} globally do not format their arguments, except when turned on in formatting hooks by \cmd{\AltOn}. % \end{itemize} % % \DescribeMacro{\AltFormatActive} % Both the \texttt{altformat} option and \cmd{\AltFormatActive} enable and globally activate alternate formatting. \cmd{\CapThis} works via \cmd{\AltCaps}. Built-in formatting macros will format their arguments. \cmd{\AltFormatActive} countermands \cmd{\AltFormatActive*}. % % \DescribeMacro{\AltFormatActive*} % The starred form \cmd{\AltFormatActive*} enables alternate formatting but leaves it in a globally deactivated state. It countermands both the \texttt{altformat} option and \cmd{\AltFormatActive}. It causes \cmd{\CapThis} to work via \cmd{\AltCaps}. Built-in formatting macros will not format their arguments. % % \DescribeMacro{\AltFormatInactive} % This macro both disables and deactivates alternate formatting. This reverts globally to standard formatting and the normal function of \cmd{\CapThis}. % % \begin{InfoBox} % These alternate formatting macros have global scope. % \end{InfoBox} % % \subsubsection[Environment]{Formatting Environment} % \label{sec:AltEnv} % % The sections in this manual can get complicated. Some quotations use alternate formatting. Some sections also use it, then switch back to regular formatting. % % Although many people will use either regular or alternate formatting, but not both, we have added environments to aid the use of text designed for alternate formatting into an arbitrary context, without worrying if the switching macros have set the proper state. % \DescribeEnv{AltFormatZone} % \texttt{AltFormatZone} works like \cmd{\AltFormatActive}, while \texttt{AltFormatZone*} works like \cmd{\AltFormatActive*}. % \DescribeEnv{AltFormatZone*} % When they exit, they disable alternate formatting. Thus, they can serve as a wrapper. % % \DescribeMacro{\FixateFormat} % These format environments create a local scope. \cmd{\FixateFormat} works only within \texttt{AltFormatZone} and \texttt{AltFormatZone*} to prevent the format switches from making any changes. \cmd{\FixateFormat} makes the environments the sole controller of alternate formatting within their scope. Below we show the use of \texttt{AltFormatZone} and \cmd{\FixateFormat}. Hooks do no formatting; the alternate formatting macros do that instead (Section~\ref{sec:AltFeatures}). \cmd{\SkipIndex} prevents spurious index entries: %^^A % \begin{VerbatimOut}{\jobname.tmp} % \FixateFormat Format cannot be fixated here. % % \AltFormatActive % \qquad \Name*[Konrad]{\noexpand\textSC{Zuse}}; % formatting is enabled and active. % % \AltFormatActive* % \qquad \SkipIndex \Name*[Konrad]{\noexpand\textSC{Zuse}}; % formatting is enabled and inactive. % \AltFormatInactive \hfill Formatting disabled. % % \begin{AltFormatZone} % Zone is active; format is not fixated. % % \qquad \Name*[Konrad]{\noexpand\textSC{Zuse}}; % formatting is enabled and active. % % \AltFormatActive* % \qquad \SkipIndex \Name*[Konrad]{\noexpand\textSC{Zuse}}; % formatting is enabled and inactive. % \end{AltFormatZone} \hfill Formatting disabled. % % \begin{AltFormatZone} % \FixateFormat Format is fixated as: enabled and active. % % \qquad \Name*[Konrad]{\noexpand\textSC{Zuse}}; % formatting is enabled and active. % % \AltFormatActive* % \qquad \SkipIndex \Name*[Konrad]{\noexpand\textSC{Zuse}}; % formatting is still enabled and active. % \end{AltFormatZone} \hfill Formatting disabled. % \end{VerbatimOut} %^^A % \begin{Quote} % \VerbatimInput[gobble=0]{\jobname.tmp} % % \input{\jobname.tmp} % \end{Quote} % \ForgetName[Konrad]{\noexpand\textSC{Zuse}} % % \subsubsection[Capitalization]{Alternate Capitalization} % \label{sec:AltCaps} % % \Info[1.5ex]{\hrule\strut We begin a big region of alternate formatting\strut\hrule} % \begin{AltFormatZone} % \FixateFormat^^A % Previously, we referred to potential problems using \cmd{\CapThis}. When alternate formatting is enabled, \cmd{\CapThis} changes its mechanism to avoid such problems. This aspect of alternate formatting does not engage the formatting hooks. % % \DescribeMacro{\AltCaps} % Using the aid of the helper macro \cmd{\AltCaps}, \cmd{\CapThis} will cause \cmd{\AltCaps} to capitalize its argument only in a formatting hook. \cmd{\AltCaps} is enabled whenever alternate formatting is enabled, but it works independently of both \cmd{\AltOn} and \cmd{\AltOff}, which are covered in the next section. \cmd{\AltCaps} does not partition its argument, which avoids any problems with \cmd{\CapThis}. We describe the syntax: % % \begin{SyntaxBox} % \cmd{\noexpand}\cmd{\AltCaps}\marg{Argument} % \end{SyntaxBox} % % \begin{Quote} % \begin{Verbatim} % \begin{nameauth} % \< Cath & Catherine \noexpand\AltCaps{d}e' % & \noexpand\textSC{Medici} & > % \end{nameauth} % \PretagName[Catherine \noexpand\AltCaps{d}e'] % {\noexpand\textSC{Medici}}{Medici, Catherine de} % % \ForgetThis\Cath\ was a powerful queen of France. % \CapThis\LCath[\noexpand\AltCaps{d}e'] % was blamed for the St.\ Bartholomew's Day massacre. % \end{Verbatim} % % \ForgetThis\Cath\ was a powerful queen of France. % \CapThis\LCath[\noexpand\AltCaps{d}e'] % was blamed for the St.\ Bartholomew's Day massacre. % \end{Quote} % % One major difference between formatting regimes is that, with regular formatting, \cmd{\CapThis} will cause the core name engine to capitalize every name element because we do not know which one to display. With alternate formatting, \cmd{\AltCaps} only capitalizes its argument. That causes \cmd{\CapThis} to work in a more granular way. % % \subsubsection{Formatting Features} % \label{sec:AltFeatures} % % \begingroup^^A Local format hook redefinition % % This part of alternate formatting works within the formatting hooks. First, we show the basic concept where macros do not change between the local scope of the hooks and the global scope of the index. After that, we show where the macros do change. % % \DescribeMacro{\textSC} % Using alternate formatting can be as easy as using any one of four predefined macros. % \DescribeMacro{\textIT} % These macros are analogous to the predefined formatting hooks that are accessible via package options. % \DescribeMacro{\textBF} % They \emph{always format} their arguments when using the \texttt{altformat} option or \cmd{\AltFormatActive}. % \DescribeMacro{\textUC} % They \emph{never format} their arguments when \cmd{\AltFormatActive*} is used or alternate formatting is disabled. % \cmd{\CapName}, \cmd{\RevComma}, and \cmd{\RevName} can modify names that use these hooks, but the results appear only in the text. % % There are subtle differences among these macros. \cmd{\textIT} and \cmd{\textBF} use font commands to make one font change. \cmd{\textUC} makes no font changes; it just calls \cmd{\MakeUppercase}. \cmd{\textSC}, however, makes two font changes. It first makes a roman font declaration, then calls \cmd{\textsc}. This mitigates font substitution warnings. % % \subsubsection*{\hfil No Local Changes} % % Here we show what happens when these formatting macros are used with \cmd{\AltFormatActive}. One should use \cmd{\noexpand} before these macros to prevent spurious index entries. Assuming that we have sorted the following names with \cmd{\PretagName} (Section~\ref{sec:IndexSort}), we get the following with this manual's formatting: %^^A % \begin{VerbatimOut}{\jobname.tmp} % \Name[Konrad]{\noexpand\textSC{Zuse}}; % \Name[Konrad]{\noexpand\textSC{Zuse}}\\ % \Name[Ada]{\noexpand\textIT{Lovelace}}; % \Name[Ada]{\noexpand\textIT{Lovelace}}\\ % \Name[Charles]{\noexpand\textBF{Babbage}}; % \Name[Charles]{\noexpand\textBF{Babbage}}\\ % \Name{\noexpand\textUC{Kanade}, Takeo}; % \Name{\noexpand\textUC{Kanade}, Takeo} % \end{VerbatimOut} %^^A % \begin{Quote} % \VerbatimInput[gobble=0]{\jobname.tmp} % % \input{\jobname.tmp} % \end{Quote} % % \subsubsection*{\hfil Local Changes} % % Now we permit the macros above to change their output within the formatting hooks. Using \cmd{\noexpand} is necessary to avoid unwanted index entries. % % \DescribeMacro{\AltOff}Recalling our automobile analogy, \cmd{\AltOff} is like depressing the clutch, It prevents macros like \cmd{\textSC}, \cmd{\textBF}, \cmd{\textIT}, and \cmd{\textUC} from formatting their arguments, but only within a formatting hook. % % \DescribeMacro{\AltOn} Likewise, \cmd{\AltOn} is like letting out the clutch. It allows macros like \cmd{\textSC}, \cmd{\textBF}, \cmd{\textIT}, and \cmd{\textUC} to format their arguments, but only within a formatting hook. The index reflects only the global state. % % If one uses the \texttt{altformat} option, \cmd{\AltFormatActive}, or \texttt{AltFormatZone}, the formatting ``power'' goes to the formatting macros by default in both the text and the index. If we want name forms to change in the text, we can add a formatting hook that uses \cmd{\AltOff} to suppress formatting in subsequent uses of a name (even when using \cmd{\FixateFormat}), without affecting the index: %^^A % \ifdefined\NameauthDoTestFiles \edef\NameauthTestFile{test11_03.tex}\else % \edef\NameauthTestFile{\jobname.tmp}\fi %^^A % \begin{VerbatimOut}{\NameauthTestFile} % \documentclass{article} % \input{compat.tex} % Included with nameauth for compatibility. % \usepackage{makeidx} % \usepackage[altformat]{nameauth} % % \makeindex % % \PretagName[Konrad]{\noexpand\textSC{Zuse}}{Zuse, Konrad} % \PretagName[Ada]{\noexpand\textIT{Lovelace}}{Lovelace, Ada} % \PretagName[Charles]{\noexpand\textBF{Babbage}} % {Babbage, Charles} % \PretagName{\noexpand\textUC{Kanade}, Takeo}{Kanade Takeo} % \renewcommand*\MainNameHook{\AltOff} % % \begin{document} % % \begin{quote} % \ForgetThis\Name[Konrad]{\noexpand\textSC{Zuse}}; % \Name[Konrad]{\noexpand\textSC{Zuse}}\\ % \ForgetThis\Name[Ada]{\noexpand\textIT{Lovelace}}; % \Name[Ada]{\noexpand\textIT{Lovelace}}\\ % \ForgetThis\Name[Charles]{\noexpand\textBF{Babbage}}; % \Name[Charles]{\noexpand\textBF{Babbage}}\\ % \ForgetThis\Name{\noexpand\textUC{Kanade}, Takeo}; % \Name{\noexpand\textUC{Kanade}, Takeo} % \end{quote} % % \printindex % \end{document} % \end{VerbatimOut} %^^A % \begin{Quote} % \VerbatimInput[gobble=0, lastline=16]{\NameauthTestFile} % % \VerbatimInput[gobble=0, firstline=17]{\NameauthTestFile} % % \renewcommand*\NamesFormat{} % \renewcommand*\MainNameHook{\AltOff} % % \ForgetThis\Name[Konrad]{\noexpand\textSC{Zuse}}; % \Name[Konrad]{\noexpand\textSC{Zuse}}\\ % \ForgetThis\Name[Ada]{\noexpand\textIT{Lovelace}}; % \Name[Ada]{\noexpand\textIT{Lovelace}}\\ % \ForgetThis\Name[Charles]{\noexpand\textBF{Babbage}}; % \Name[Charles]{\noexpand\textBF{Babbage}}\\ % \ForgetThis\Name{\noexpand\textUC{Kanade}, Takeo}; % \Name{\noexpand\textUC{Kanade}, Takeo} % \end{Quote} % \endgroup^^A Local format hook redefinition % % \subsubsection{History Text} % \label{sec:RealAltEx} % % \begingroup^^A Local format hook redefinition % % \ifdefined\NameauthDoTestFiles \edef\NameauthTestFile{test11_04.tex}\else % \edef\NameauthTestFile{\jobname.tmp}\fi %^^A % \begin{VerbatimOut}{\NameauthTestFile} % \documentclass{article} % \input{compat.tex} % Included with nameauth for compatibility. % \usepackage{makeidx} % \usepackage[altformat]{nameauth} % % \makeindex % % \begin{nameauth} % \< Luth & Martin & \noexpand\textSC{Luther} & > % \< Cath & Catherine \noexpand\AltCaps{d}e' % & \noexpand\textSC{Medici} & > % \end{nameauth} % \PretagName[Martin]{\noexpand\textSC{Luther}}{Luther, Martin} % \PretagName[Catherine \noexpand\AltCaps{d}e'] % {\noexpand\textSC{Medici}}{Medici, Catherine de} % % \renewcommand*\MainNameHook{\AltOff} % % \begin{document} % % \ForgetThis\Luth\ was a leading figure in the Protestant % Reformation. \Luth\ believed that one is declared % righteous in a forensic sense by divine grace through faith % created by the Holy Spirit via the Gospel and the Sacraments. % % \ForgetThis\Cath\ was not only Queen of France in her own right, % but she also guided the reigns of her three sons. % \CapThis\LCath[\noexpand\AltCaps{d}e'] % was blamed for the St.\ Bartholomew's Day massacre that saw the % murder of thousands of Huguenots. % % \printindex % \end{document} % \end{VerbatimOut} %^^A % \renewcommand*\MainNameHook{\AltOff} % \begin{Quote} % \VerbatimInput[gobble=0]{\NameauthTestFile} % % \newpage % % \ForgetThis\Luth\ was a leading figure in the Protestant % Reformation. \Luth\ believed that one is declared % righteous in a forensic sense by divine grace through faith % created by the Holy Spirit via the Gospel and the Sacraments. % % \ForgetThis\Cath\ was not only Queen of France in her own right, % but she also guided the reigns of her three sons. % \CapThis\LCath[\noexpand\AltCaps{d}e'] % was blamed for the St.\ Bartholomew's Day massacre that saw the % murder of thousands of Huguenots. % \end{Quote} % % Here we keep the particle with the forename, but display them as a long reference with the surname, showing a degree of flexibility (Section~\ref{sec:NameParticles}): % \begin{itemize} % \item \parbox{0.2\textwidth}{\LCath[\noexpand\AltCaps{d}e']} % |\LCath[\noexpand\AltCaps{d}e']| % % \item \parbox{0.2\textwidth}{\CapThis\LCath[\noexpand\AltCaps{d}e']} % |\CapThis\LCath[\noexpand\AltCaps{d}e']| % \end{itemize} % \endgroup^^A Local format hook redefinition % % \subsubsection{Inflected Names} % \label{sec:InflNames} % \begingroup^^A Local format hook redefinition % % Next we design grammatical inflections for use with alternate formatting. Perhaps this could be useful also for paradigms in a grammar book. % % We need two Boolean flags for one change in name form, which is a grammatical inflection in this case. Thus, we set up \texttt{\textbackslash ifGenitive} as the global flag and \texttt{\textbackslash ifDoGenitive} as the local flag. % % \cmd{\DoGenitivetrue} occurs only in the formatting hook. The macro that produces the genitive (or possessive) ending only does so when \texttt{\textbackslash ifDoGenitive} is true. This keeps the index entries consistent via \cmd{\noexpand}. Likewise, \cmd{\AltOff} only occurs in the formatting hook \cmd{\MainNameHook}. % \JustIndex\Jeff %^^A % \ifdefined\NameauthDoTestFiles \edef\NameauthTestFile{test11_05.tex}\else % \edef\NameauthTestFile{\jobname.tmp}\fi %^^A % \begin{VerbatimOut}{\NameauthTestFile} % \documentclass{article} % \input{compat.tex} % Included with nameauth for compatibility. % \usepackage{makeidx} % \usepackage[altformat]{nameauth} % % \makeindex % % \newif\ifGenitive % \newif\ifDoGenitive % \newcommand*\GEN{\ifDoGenitive\textSC{'s}\fi} % % \begin{nameauth} % \< Jeff & Thomas & % \noexpand\textSC{Jefferson}\noexpand\GEN{} & > % \end{nameauth} % % \PretagName[Thomas]{\noexpand\textSC{Jefferson}\noexpand\GEN{}} % {Jefferson, Thomas} % \TagName[Thomas]{\noexpand\textSC{Jefferson}\noexpand\GEN{}} % {, pres.} % % \renewcommand*\NamesFormat[1] % {\ifGenitive\DoGenitivetrue\fi#1\global\Genitivefalse} % \renewcommand*\MainNameHook[1] % {\ifGenitive\DoGenitivetrue\fi\AltOff#1\global\Genitivefalse} % % \begin{document} % % Consider \Genitivetrue\Jeff\ legacy as the author of the % colonies' \textit{Declaration of Independence} and his impact % as third president of the United States. \Jeff\ was a complex % historical figure whose actions defy a consistent moral compass % both in public policy and in personal affairs. % % \printindex % \end{document} % \end{VerbatimOut} %^^A % \begin{Quote} % \VerbatimInput[gobble=0,lastline=28]{\NameauthTestFile} % % \newpage % % \VerbatimInput[gobble=0,firstline=29]{\NameauthTestFile} % % \renewcommand*\NamesFormat[1] % {\ifGenitive\DoGenitivetrue\fi#1\global\Genitivefalse} % \renewcommand*\MainNameHook[1] % {\ifGenitive\DoGenitivetrue\fi\AltOff#1\global\Genitivefalse} % % Consider \ForgetThis\Genitivetrue\Jeff\ legacy as the author of the % colonies' \textit{Declaration of Independence} and his impact % as third president of the United States. \Jeff\ was a complex % historical figure whose actions defy a consistent moral compass % both in public policy and in personal affairs. % \end{Quote} % \endgroup^^A Local format hook redefinition % % \subsubsection{Reference Work I} % \label{sec:RefI} % \begingroup^^A Local format hook redefinition % % Here we show how \textsf{nameauth} might be used in a reference work, where names are also the head-words of articles. We present examples that include a basic Western name, a basic Eastern name, and a Western name with an alias. Some tips include: % \begin{itemize} % \item Sort all names that use alternate formatting. % % \item Match index entry forms to article head-words. % % \item Cross-reference name variants to the head-word. % % \item The first instance of a name displays the active alternate formatting. % % \item Deactivate alternate formatting in subsequent name instances. % % \item Since some \LaTeX\ fonts do not combine small caps and boldface, we use slanted text in \cmd{\RefArticle} below. % \end{itemize} %^^A % \ifdefined\NameauthDoTestFiles \edef\NameauthTestFile{test11_06.tex}\else % \edef\NameauthTestFile{\jobname.tmp}\fi %^^A % \begin{VerbatimOut}{\NameauthTestFile} % \documentclass{article} % \input{compat.tex} % Included with nameauth for compatibility. % \usepackage{makeidx} % \usepackage[altformat]{nameauth} % % \makeindex % % % Sort any names with macros in the arguments. % % \PretagName[Greta]{\noexpand\textSC{Garbo}}{Garbo, Greta} % \PretagName{\noexpand\textSC{Misora}, Hibari}{Misora Hibari} % \PretagName[Heinz]{\noexpand\textSC{R\"uhmann}}{Ruehmann, Heinz} % \PretagName[Heinrich Wilhelm]{\noexpand\textSC{R\"uhmann}} % {Ruehmann, Heinrich Wilhelm} % % % Make a cross-reference from a variant name form to the % % form of the head-words % % \IndexRef[Heinrich Wilhelm]{\noexpand\textSC{R\"uhmann}} % {\noexpand\textSC{R\"uhmann}, Heinz} % % % Define the formatting hooks. Since we use the `altformat' % % option, alternate formatting is turned off in later % % name uses. % % \renewcommand*\MainNameHook{\AltOff} % % % Typeset head-words with a slanted font. % % \newcommand{\RefArticle}[3] % {% % \def\Check{#2}% % \ifx\Check\empty % \noindent\ForgetThis\textsl{#1}\ #3 % \else % \noindent\ForgetThis\textsl{#1}\ #2\ #3 % \fi\medskip % } % % \begin{document} % % \RefArticle % {\RevComma\Name[Greta]{\noexpand\textSC{Garbo}}} % {} % {(18 September 1905\,--\,15 April 1990) was a Swedish % film actress during the 1920s and 1930s. % \Name[Greta]{\noexpand\textSC{Garbo}}\dots} % % \RefArticle % {\Name{\noexpand\textSC{Misora}, Hibari}} % {(W:\,``\RevName\Name*{\noexpand\textSC{Misora}, Hibari}'';} % {29 May 1937\,--\,24 June 1989) was a Japanese singer % and actress noted for her positive message. % \Name{\noexpand\textSC{Misora}, Hibari}\dots} % % \RefArticle % {\RevComma\Name[Heinz]{\noexpand\textSC{R\"uhmann}}} % {(\SubvertThis\ForceName % \FName[Heinrich Wilhelm]{\noexpand\textSC{R\"uhmann}};} % {7 March 1902\,--\,3 October 1994) was a German actor % in over 100 films. % \Name[Heinz]{\noexpand\textSC{R\"uhmann}}\dots} % % \printindex % \end{document} % \end{VerbatimOut} %^^A % \begin{Quote} % \VerbatimInput[gobble=0,lastline=25]{\NameauthTestFile} % % \VerbatimInput[gobble=0, firstline=26]{\NameauthTestFile} % % \IndexRef[Heinrich Wilhelm]{\noexpand\textSC{R\"uhmann}} % {\noexpand\textSC{R\"uhmann}, Heinz} % % \renewcommand*\NamesFormat{} % \renewcommand*\MainNameHook{\AltOff} % % \newcommand{\RefArticle}[3] % {^^A % \def\Check{#2}^^A % \ifx\Check\empty % \noindent\ForgetThis\textsl{#1}\ #3 % \else % \noindent\ForgetThis\textsl{#1}\ #2\ #3 % \fi\medskip % } % % \RefArticle % {\RevComma\Name[Greta]{\noexpand\textSC{Garbo}}} % {} % {(18 September 1905\,--\,15 April 1990) was a Swedish % film actress during the 1920s and 1930s. % \Name[Greta]{\noexpand\textSC{Garbo}}\dots} % % \RefArticle % {\Name{\noexpand\textSC{Misora}, Hibari}} % {(W:\,``\RevName\Name*{\noexpand\textSC{Misora}, Hibari}'';} % {29 May 1937\,--\,24 June 1989) was a Japanese singer % and actress noted for her positive message. % \Name{\noexpand\textSC{Misora}, Hibari}\dots} % % \RefArticle % {\RevComma\Name[Heinz]{\noexpand\textSC{R\"uhmann}}} % {(\SubvertThis\ForceName % \FName[Heinrich Wilhelm]{\noexpand\textSC{R\"uhmann}};} % {7 March 1902\,--\,3 October 1994) was a German actor % in over 100 films. % \Name[Heinz]{\noexpand\textSC{R\"uhmann}}\dots} % \end{Quote} % \endgroup^^A Local format hook redefinition % % We will revisit the topic of a reference work in Section~\ref{sec:RefII}, where we integrate custom formatting hooks into the concept. This puts the work into setup and automation instead of using macros with several arguments. % % \subsection{Roman Names II} % \label{sec:Romanii} % % \subsubsection[General Reference]{General Reference Works} % \label{sec:RomanStudent} % % \begingroup^^A Local format hook redefinition % \renewcommand*\NamesFormat{} % \renewcommand*\MainNameHook{} % % In this subsection and the next, we do not use the formatting conventions of this manual and we activate alternate formatting. We focus here on reference works that treat the \LA{cognomen} as a Western surname and index according to it.\footnote{See Geiss, \Title{\de{Geschichte Griffbereit}}; Kinder and Hilgemann, \Title{\de{dtv-Atlas zur Weltgeschichte}}, 2 vols., 29th printing (1964; Munich: Deutscher Taschenbuch Verlag, 1993). See also \href{https://books.infotoday.com/books/Indexing-names.shtml}{\bfseries this page}.} % % This approach corresponds roughly with the manual approach that we saw in Section~\ref{sec:RomanGeneral}, except that we will not use \meta{Affix} to drop \LA{agnomina} and we will not use \meta{Alternate} to display variants of the \la{praenomen} and \LA{nomen}. Instead, we use macros that take advantage of alternate formatting to handle name form changes. % \begin{Quote} % Index: \ShowIdxPageref*[\meta{praenomen} \meta{nomen}] % {\meta{cognomen} \meta{agnomen}}\\[1ex] % Macro: |\Name[|\meta{praenomen}| |\meta{nomen}|]{|\meta{cognomen} % \meta{agnomen}|}| % \end{Quote} % % This method increases the number of macros by \emph{two per name,} one for each individual \meta{FNN} and \meta{SNN}. That might be a deal-breaker for some. The general logic used by the respective macros used in each name component follows the plan below, with the \textsf{nameauth} logic for Western names doing the rest: % \begin{itemize} % \item Display either \LA{praenomen}, \LA{nomen}, or both in \meta{FNN}. % \item Display either \LA{cognomen}, \LA{agnomen}, or both in \meta{SNN}. % \end{itemize} % % We use alternate formatting and \cmd{\noexpand} in the macro arguments to ensure that index entries remain consistent. We define macros in both \meta{FNN} and \meta{SNN} that expand conditionally. We use the quick interface to define name shorthands, and we use \cmd{\PretagName} and \cmd{\TagName} as needed (cf. Section~\ref{sec:NameAncient}. In the preamble we define all macros and conditionals used in naming macro arguments to avoid errors. We use \texttt{\textbackslash ifNoGens} for the \LA{nomen} because \texttt{\textbackslash ifNoNomen} invites haplography. % \NameArgWarning % \begin{itemize} % \item When using Boolean flags (\texttt{\textbackslash if}\meta{flag}) in the macros that represent name elements, ensure that those flags only change their value within the local scope of the name formatting hooks (Section~\ref{sec:Formatting}). % % \item Two Boolean flags are needed for each automated variant in the name. One flag reflects the \emph{global} state and the name form in the index. The other reflects the \emph{local} state of the formatting hooks. % % \item Since we have four name \emph{components}, we need at most eight Boolean flags, two per \emph{potential change}. The logic shows longer forms when the flags are false, shorter forms when the flags are true. % \end{itemize} % % \newpage % % \ifdefined\NameauthDoTestFiles \edef\NameauthTestFile{test11_07.tex}\else % \edef\NameauthTestFile{\jobname.tmp}\fi %^^A % \begin{VerbatimOut}{\NameauthTestFile} % \documentclass{article} % \input{compat.tex} % Included with nameauth for compatibility. % \usepackage{makeidx} % \usepackage[altformat]{nameauth} % % \makeindex % % % Global Boolean flags need to be defined only once. % \newif\ifNoPraenomen % \newif\ifNoCognomen % \newif\ifNoGens % \newif\ifNoAgnomen % % % Local Boolean flags need to be defined only once. % \newif\ifXPrae % \newif\ifXCogn % \newif\ifXGens % \newif\ifXAgno % % % Name variant macros are defined uniquely for each name. % \newcommand*\SCIPi % {% % \ifXGens Publius\else % \ifXPrae Cornelius\else % Publius Cornelius% % \fi % \fi % } % % \newcommand*\SCIPii % {\ifXAgno Scipio\else Scipio Africanus\fi} % % \newcommand*\TSemp % {% % \ifXGens Tiberius\else % \ifXPrae Sempronius\else % Tiberius Sempronius% % \fi % \fi % } % % % Quick interface definitions. % \begin{nameauth} % \< Scipio & \noexpand\SCIPi & \noexpand\SCIPii & > % \< TGrac & \noexpand\TSemp & Gracchus & > % \end{nameauth} % % % We add a name tag. % \NameAddInfo[\noexpand\TSemp]{Gracchus} % { (consul, 177 \textsc{bc})} % % % Sorting and tagging the names % \PretagName[\noexpand\SCIPi]{\noexpand\SCIPii} % {Scipio Africanus} % \PretagName[\noexpand\TSemp]{Gracchus} % {Gracchus, Tiberius Sempronius} % \TagName[\noexpand\TSemp]{Gracchus}{, consul} % % % We define formatting hooks. % \renewcommand*\NamesFormat[1] % {% % \ifNoPraenomen\XPraetrue\fi% % \ifNoGens\XGenstrue\fi% % \ifNoCognomen\XCogntrue\fi% % \ifNoAgnomen\XAgnotrue\fi% % #1\NameQueryInfo{}% % \global\NoPraenomenfalse% % \global\NoGensfalse% % \global\NoCognomenfalse% % \global\NoAgnomenfalse% % } % % \renewcommand*\MainNameHook[1] % {% % \ifNoPraenomen\XPraetrue\fi% % \ifNoGens\XGenstrue\fi% % \ifNoCognomen\XCogntrue\fi% % \ifNoAgnomen\XAgnotrue\fi% % #1% % \global\NoPraenomenfalse% % \global\NoGensfalse% % \global\NoCognomenfalse% % \global\NoAgnomenfalse% % } % % \begin{document} % % \NoAgnomentrue\Scipio\ was born around 236 \textsc{bc} % into the Scipiones branch of the Cornelii clan. % \NoAgnomentrue\Scipio\ rose to military fame during the % Second Punic War. Thereafter he was known as \Scipio. % He flourished during the Egyptian reigns of % \Name{Ptolemy, IV}[IV Philopator] and % \Name{Ptolemy, V}[V Epiphanes], and the Syrian % reigns of \Name{Seleucus, III}[III Ceraunus] and % \Name{Antiochus, III}[III the Great]. % % \TGrac\ served as tribune of the plebs in 184 \textsc{bc}. % \NoGenstrue\STGrac\ was elected praetor for 180 \textsc{bc}, % after which he was appointed governor of Hispania Citerior, % serving with the rank of proconsul. In 177 \textsc{bc}, % he was elected consul, again in 163 \textsc{bc}. % % \printindex % \end{document} % \end{VerbatimOut} %^^A % \begin{Quote} % \VerbatimInput[gobble=0, lastline=19]{\NameauthTestFile} % \end{Quote} % % \JustIndex\CatoYi % For every name, one must define two macros. True, there can be multiple names that are alike and use the same macros, as with many a \CatoY, but then one must use \cmd{\TagName} and non-printing macros in name arguments to create unique names and index entries (Section~\ref{sec:Unique}). The Romans had a small set of acceptable names and often named fathers and sons alike. % \begin{Quote} % \VerbatimInput[gobble=0, firstline=20, lastline=47]{\NameauthTestFile} % \end{Quote} % % \newpage % % If one uses \cmd{\NameQueryInfo\{\}} within formatting hooks, it is best to put a space at the beginning of a tag if space is needed, instead of in the hook. % \begin{Quote} % \VerbatimInput[gobble=0, firstline=48, lastline=58]{\NameauthTestFile} % \end{Quote} % % We reset the global Boolean flags to ensure the longest name forms in the index. Local Boolean flags revert to false outside the scope of the formatting hooks. %^^A % \renewcommand*\NamesFormat[1] % {^^A % \ifNoPraenomen\XPraetrue\fi^^A % \ifNoGens\XGenstrue\fi^^A % \ifNoCognomen\XCogntrue\fi^^A % \ifNoAgnomen\XAgnotrue\fi^^A % #1\NameQueryInfo{}^^A % \global\NoPraenomenfalse^^A % \global\NoGensfalse^^A % \global\NoCognomenfalse^^A % \global\NoAgnomenfalse^^A % } % \renewcommand*\MainNameHook[1] % {^^A % \ifNoPraenomen\XPraetrue\fi^^A % \ifNoGens\XGenstrue\fi^^A % \ifNoCognomen\XCogntrue\fi^^A % \ifNoAgnomen\XAgnotrue\fi^^A % #1^^A % \global\NoPraenomenfalse^^A % \global\NoGensfalse^^A % \global\NoCognomenfalse^^A % \global\NoAgnomenfalse^^A % } % \begin{Quote} % \VerbatimInput[gobble=0, firstline=59, lastline=97]{\NameauthTestFile} % % \newpage % % \ForgetThis\NoAgnomentrue\Scipio\ was born around 236 \textsc{bc} % into the Scipiones branch of the Cornelii clan. % \NoAgnomentrue\Scipio\ rose to military fame during the % Second Punic War. Thereafter he was known as \Scipio. % He flourished during the Egyptian reigns of % \Name{Ptolemy, IV}[IV Philopator] and % \Name{Ptolemy, V}[V Epiphanes], and the Syrian % reigns of \Name{Seleucus, III}[III Ceraunus] and % \Name{Antiochus, III}[III the Great]. % \end{Quote} % % Below we show more name variations than were shown above: % % \begin{Block} % \ForgetThis\Scipio \dotfill |\ForgetThis\Scipio|\\ % \LScipio \dotfill |\LScipio|\\ % \Scipio \dotfill |\Scipio|\\ % \SScipio \dotfill |\SScipio|\\ % \NoAgnomentrue\LScipio \dotfill |\NoAgnomentrue\LScipio|\\ % \NoAgnomentrue\Scipio \dotfill |\NoAgnomentrue\Scipio|\\ % \NoGenstrue\SScipio \dotfill |\NoGenstrue\SScipio|\\ % \NoPraenomentrue\SScipio \dotfill |\NoPraenomentrue\SScipio| % \end{Block} % % In Section~\ref{sec:NameAncient}, we used name tags instead of \meta{Alternate} in the first-use formatting hook. Here we adopt a similar approach. Since formatting hooks are local by design, whatever changes inside of them does not affect the index. % \begin{Quote} % \VerbatimInput[gobble=0,firstline=98]{\NameauthTestFile} % \NameAddInfo[\noexpand\TSemp]{Gracchus} % { (consul, 177 \textsc{bc})} % % \TGrac\ served as tribune of the plebs in 184 \textsc{bc}. % \TGrac\ was elected praetor for 180 \textsc{bc}, % after which he was appointed governor of Hispania Citerior, % serving with the rank of proconsul. In 177 \textsc{bc}, % he was elected consul, again in 163 \textsc{bc}. % \end{Quote} % % Again we see more name variations: % % \begin{Block} % \ForgetThis\TGrac \dotfill |\ForgetThis\TGrac|\\ % \LTGrac \dotfill |\LTGrac|\\ % \NoGenstrue\LTGrac \dotfill |\NoGenstrue\LTGrac|\\ % \TGrac \dotfill |\TGrac|\\ % \STGrac \dotfill |\STGrac|\\ % \NoGenstrue\STGrac \dotfill |\NoGenstrue\STGrac|\\ % \NoPraenomentrue\STGrac \dotfill |\NoPraenomentrue\STGrac| % \end{Block} % % Next we see other types of names using these same formatting hooks: % % \begin{Block} % \Name*{Ptolemy, IV}[IV Philopator]\dotfill |\Name*{Ptolemy, IV}[IV Philopator]|\\ % \Name*{Ptolemy, IV}\dotfill |\Name*{Ptolemy, IV}|\\ % \Name{Ptolemy, IV}\dotfill |\Name{Ptolemy, IV}|\\ % \ForgetThis\Dem \dotfill |\ForgetThis\Dem|\\ % \LDem \dotfill |\LDem|\\ % \Dem \dotfill |\Dem| % \end{Block} % % \subsubsection[Scholarly Works]{Scholarly Reference Works} % \label{sec:RomanScholarii} % % We retain most of the code from the previous section in the example below, but we change the macros used in the name arguments, following this logic: % \begin{itemize} % \item Display the \LA{praenomen} in \meta{FNN}: % % \item Display one of the following in \meta{SNN}: % \begin{itemize} % \item Only the \LA{cognomen} % % \item Both the \LA{cognomen} and \LA{agnomina} % % \item Only the \LA{nomen} % % \item Both the \LA{nomen} and \LA{cognomen} % % \item The \LA{nomen}, \LA{cognomen}, and \LA{agnomina} % \end{itemize} % \end{itemize} %^^A % \ifdefined\NameauthDoTestFiles \edef\NameauthTestFile{test11_08.tex}\else % \edef\NameauthTestFile{\jobname.tmp}\fi %^^A % \begin{VerbatimOut}{\NameauthTestFile} % \documentclass{article} % \input{compat.tex} % Included with nameauth for compatibility. % \usepackage{makeidx} % \usepackage[altformat]{nameauth} % % \makeindex % % % Global Boolean flags need to be defined only once. % \newif\ifNoPraenomen % \newif\ifNoCognomen % \newif\ifNoGens % \newif\ifNoAgnomen % % % Local Boolean flags need to be defined only once. % \newif\ifXPrae % \newif\ifXCogn % \newif\ifXGens % \newif\ifXAgno % % % Name variant macros are defined uniquely for each name. % \newcommand*\CSB % {% % \ifXGens % \ifXAgno Scipio\else Scipio Barbatus\fi % \else % \ifXCogn Cornelius\else % \ifXAgno Cornelius Scipio\else % Cornelius Scipio Barbatus% % \fi % \fi % \fi % } % % % Quick interface definition % \begin{nameauth} % \< OScipio & Lucius & \noexpand\CSB & > % O for Oxford % \end{nameauth} % % % Sorting and tagging % \PretagName[Lucius]{\noexpand\CSB}{Cornelius Scipio Barbatus} % \TagName[Lucius]{\noexpand\CSB}{, consul} % % \renewcommand*\NamesFormat[1] % {% % \ifNoPraenomen\XPraetrue\fi% % \ifNoGens\XGenstrue\fi% % \ifNoCognomen\XCogntrue\fi% % \ifNoAgnomen\XAgnotrue\fi% % #1\NameQueryInfo{}% % \global\NoPraenomenfalse% % \global\NoGensfalse% % \global\NoCognomenfalse% % \global\NoAgnomenfalse% % } % % \begin{document} % % \OScipio\ was born around 337 \textsc{bc} into the % Scipiones branch of the Cornelii clan, one of the large % patrician clans. \NoGenstrue\NoAgnomentrue\OScipio\ was % one of the two elected consuls in 298 \textsc{bc} % and served during the Third Samnite War. % % \printindex % \end{document} % \end{VerbatimOut} %^^A % \begin{Quote} % \VerbatimInput[gobble=0,lastline=38]{\NameauthTestFile} % % \newpage % % \VerbatimInput[gobble=0,firstline=39]{\NameauthTestFile} % % \OScipio\ was born around 337 \textsc{bc} into the % Scipiones branch of the Cornelii clan, one of the large % patrician clans. \NoGenstrue\NoAgnomentrue\OScipio\ was % one of the two elected consuls in 298 \textsc{bc} % and served during the Third Samnite War. % \end{Quote} % % Instead of relying on some \textsf{nameauth} features that drop some name elements automatically, in all but \meta{FNN} we have to state explicitly what we want: % % \begin{Block} % \ForgetThis\OScipio \dotfill |\ForgetThis\OScipio|\\ % \LOScipio \dotfill |\LOScipio|\\ % \OScipio \dotfill |\OScipio|\\ % \SOScipio \dotfill |\SOScipio|\\ % \NoCognomentrue\OScipio \dotfill |\NoCognomentrue\OScipio|\\ % \NoAgnomentrue\OScipio \dotfill |\NoAgnomentrue\OScipio|\\ % \NoGenstrue\OScipio \dotfill |\NoGenstrue\OScipio|\\ % \NoGenstrue\NoAgnomentrue\OScipio \dotfill^^A % |\NoGenstrue\NoAgnomentrue\OScipio| % \end{Block} % % \endgroup^^A Local format hook redefinition % % \begin{AltFormatZone} % \renewcommand*\NamesFormat[1] % {\color{blue}\sffamily^^A % \ifGenitive\DoGenitivetrue\fi#1^^A % \global\Genitivefalse} % \renewcommand*\MainNameHook[1] % {\sffamily^^A % \ifGenitive\DoGenitivetrue\fi\AltOff#1^^A % \global\Genitivefalse} % \begin{Quotation}{\Jeff} % {letter to \Name[John]{Wyche}, 1809} % I have often thought that nothing would do more extensive good at small expense than the establishment of a small circulating library in every county, to consist of a few well-chosen books, to be lent to the people of the country under regulations as would secure their safe return in due time. % \index{politicians, quotes of\noexpand\string|hyperpage} % \end{Quotation} % \end{AltFormatZone} % % \subsection[Special Uses]{Special Name Uses} % \label{sec:SpecialUses} % % \begingroup^^A Local format hook redefinition % Previously, formatting hooks either changed typefaces or mutated their arguments. Now we move beyond parsing the argument as we have received it. % % \DescribeMacro{\NameParser} % The user-accessible parser (Section~\ref{sec:NameParser}) is distinct from the internal name parser. Yet it only can be called within the formatting hooks, the point where the internal parser generates output. Thus, the two parsers are linked. % % Capitalization and \meta{Alternate} swapping happen early in the parsing process before we know what name elements to display. \cmd{\NameParser} only sees the name elements after these actions are done. It displays a printed name based on the elements it sees and a matrix of Boolean flags: % \begin{itemize} % \item When |\if@nameauth@FullName| is true: % \begin{itemize} % \item Name forms are long. % % \item If true, |\if@nameauth@ShortSNN| causes the affix of a Western surname to not be displayed. % % \item If true, |\if@nameauth@RevThis| causes name order to be reversed, as applicable. % % \item If true, |\if@nameauth@RevThisComma| causes a Western name to be reversed, adding a comma between \meta{SNN} and \meta{FNN} only if |\if@nameauth@RevThis| is false. % \end{itemize} % % \item When |\if@nameauth@FullName| is false: % \begin{itemize} % \item Name forms are short. % % \item If true, |\if@nameauth@ForceAffix| causes only the suffix of a Western name to print. % % \item If true, |\if@nameauth@FirstName| causes only a Western forename to print. % % \item If true, |\if@nameauth@FirstName| causes an Eastern personal name or an ancient sobriquet to print, but only if |\if@nameauth@EastFN| is true. % \end{itemize} % \end{itemize} % % \Info*{\small\texttt{\textbackslash ifNameauthWestern}\\[0.4ex] \texttt{\textbackslash ifNameauthObsolete}}^^A % We provide an example that uses \cmd{\NameParser}, |\ifNameauthWestern|, and |\ifNameauthObsolete| (Section~\ref{sec:NamePatterns}) to show and evaluate name parts: %^^A % \begin{VerbatimOut}{\jobname.tmp} % \makeatletter % \renewcommand\MainNameHook[1]{% % \@nameauth@FullNamefalse% % \@nameauth@FirstNamefalse% % \@nameauth@ForceAffixfalse% % \@nameauth@EastFNtrue% % \ifNameauthWestern % Western name:\\ % \hbox to 3.5cm {Forename: \@nameauth@FirstNametrue% % \NameParser\hfill} % \hbox to 3.5cm {Surname: \@nameauth@FirstNamefalse% % \NameParser\hfill} % Affix: \@nameauth@ForceAffixtrue \NameParser\smallskip % \else % \hbox to 3.5cm{Non-Western name:\hfill} % \ifNameauthObsolete % (obsolete syntax)\\ \hbox to 3.5cm{\hfill} \fi % \hbox to 3.5cm {Name: \@nameauth@FirstNamefalse% % \NameParser\hfill} % Person/Sobriquet: \@nameauth@FirstNametrue% % \NameParser\smallskip % \fi % } % \makeatother % % \Name[Martin]{Van Buren}\\ % \Name[George S.]{Patton, Jr.}[George]\\ % \Name{Miyazaki, Hayao}\\ % \Name{Henry}[VIII]\\ % \Name{Confucius} % \end{VerbatimOut} %^^A % \begin{Quote} % \VerbatimInput[gobble=0, lastline=13]{\jobname.tmp} % % \newpage % % \VerbatimInput[gobble=0, firstline=14]{\jobname.tmp} % \makeatletter % \renewcommand\MainNameHook[1]{^^A % \@nameauth@FullNamefalse^^A % \@nameauth@FirstNamefalse^^A % \@nameauth@ForceAffixfalse^^A % \@nameauth@EastFNtrue^^A % \ifNameauthWestern % Western name:\\ % \hbox to 3.5cm {Forename: \@nameauth@FirstNametrue^^A % \NameParser\hfill} % \hbox to 3.5cm {Surname: \@nameauth@FirstNamefalse^^A % \NameParser\hfill} % Affix: \@nameauth@ForceAffixtrue \NameParser\smallskip % \else % \hbox to 3.5cm{Non-Western name:\hfill} % \ifNameauthObsolete % (obsolete syntax)\\ \hbox to 3.5cm{\hfill} \fi % \hbox to 3.5cm {Name: \@nameauth@FirstNamefalse^^A % \NameParser\hfill} % Person/Sobriquet: \@nameauth@FirstNametrue^^A % \NameParser\smallskip % \fi % } % \makeatother % % \Name[Martin]{Van Buren}\\ % \Name[George S.]{Patton, Jr.}[George]\\ % \Name{Miyazaki, Hayao}\\ % \Name{Henry}[VIII]\\ % \Name{Confucius} % \end{Quote} % % \subsubsection{Reference Work II} % \label{sec:RefII} % % Below we revisit the idea of a reference work, using the formatting hooks to automate tasks instead of populating the different arguments of \cmd{\RefArticle} in Section~\ref{sec:RefI}. We shift the work from proofreading to setup. % \ifdefined\NameauthDoTestFiles \edef\NameauthTestFile{test11_09.tex}\else % \edef\NameauthTestFile{\jobname.tmp}\fi %^^A % \begin{VerbatimOut}{\NameauthTestFile} % \documentclass{article} % \input{compat.tex} % Included with nameauth for compatibility. % \usepackage{makeidx} % \usepackage[altformat]{nameauth} % % \makeindex % % % Boolean flags; the first sets up headwords and the second % % indicates that a Non-Western form should not be reversed. % \newif\ifHeadword % \newif\ifAncientName % % % Sorting and tagging the names: % \PretagName[Charles]{\noexpand\textBF{Babbage}}{Babbage, Charles} % \PretagName{\noexpand\textUC{Kanade}, Takeo}{Kanade Takeo} % \PretagName[Ada]{\noexpand\textIT{Lovelace}}{Lovelace, Ada} % % % Adding name information: % \NameAddInfo{Aristotle}{ (384--322 \textsc{bc})} % \NameAddInfo[Charles]{\noexpand\textBF{Babbage}}{ (1791--1871)} % \NameAddInfo{\noexpand\textUC{Kanade}, Takeo}{ (1945-- )} % \NameAddInfo[Ada]{\noexpand\textIT{Lovelace}} % { (Augusta Ada King, Countess of Lovelace % [n\'ee Byron]; 1815--52)} % % % Redefining the formatting hooks: % \makeatletter % \renewcommand\NamesFormat[1] % {% % \ifHeadword % \ifNameauthWestern % \@nameauth@RevThisCommatrue% % \bfseries \NameParser% % \normalfont\NameQueryInfo{}% % \else % \begingroup% % \bfseries \NameParser% % \unless\ifAncientName % \normalfont; W:\AltOff\space % \@nameauth@RevThistrue \NameParser% % \fi % \normalfont\NameQueryInfo{}% % \endgroup% % \fi % \else % \NameParser% % \fi % \global\Headwordfalse% % \global\AncientNamefalse% % } % \makeatother % \renewcommand\MainNameHook{\AltOff} % % % Define related macros: % \newcommand\Headword{\Headwordtrue\ForgetThis} % \newcommand{\RefArticle}[2] % {\noindent\Headword #1 #2\medskip} % % \begin{document} % % \RefArticle{\AncientNametrue\Name{Aristotle}}{was the first to offer % a system of logic, most notably syllogistic logic, that would % become the basis for discrete states and circuitry of % digital computers. \Name{Aristotle}\dots} % % \RefArticle{\Name[Charles]{\noexpand\textBF{Babbage}}}{designed and % built the Difference Engine and began work on the Analytical % Engine. \Name[Charles]{\noexpand\textBF{Babbage}}\dots} % % \RefArticle{\Name{\noexpand\textUC{Kanade}, Takeo}}{is one of the % foremost pioneers in the field of computer vision. % \Name{\noexpand\textUC{Kanade}, Takeo}\dots} % % \RefArticle{\Name[Ada]{\noexpand\textIT{Lovelace}}}{collaborated with % \Name*[Charles]{\noexpand\textBF{Babbage}}* and wrote what some % consider to be the first computer program for the Analytical % Engine. \Name[Ada]{\noexpand\textIT{Lovelace}}\dots} % % \printindex % \end{document} % \end{VerbatimOut} %^^A % \begin{Quote} % \VerbatimInput[gobble=0, lastline=17]{\NameauthTestFile} % % \newpage % % \VerbatimInput[gobble=0, firstline=18, lastline=25]{\NameauthTestFile} % \end{Quote} % % The formatting hook does all the heavy lifting. If the name appears in the headword part of \cmd{\RefArticle}, the hook reverses the name with commas only if it is a Western name. Otherwise, if it is a Non-Western name, but not ancient or royal, then both the Eastern name and its Western version are displayed. Only headwords are printed in boldface. After the first name occurrence, forced by the headword part of \cmd{\RefArticle}, the name tag also is printed. % \begin{Quote} % \VerbatimInput[gobble=0, firstline=26, lastline=53]{\NameauthTestFile} % \end{Quote} % % In Section~\ref{sec:RefI} the \cmd{\RefArticle} macro took three arguments, one of which frequently was empty, and required information like dates to be put at the front of each entry. Now \cmd{\RefArticle} simply takes two arguments: a name and some information. The rest is automated. % \begin{Quote} % \VerbatimInput[gobble=0, firstline=54, lastline=58]{\NameauthTestFile} % % \newpage % % \VerbatimInput[gobble=0, firstline=59]{\NameauthTestFile} % % \NameAddInfo{Aristotle}{ (384--322 \textsc{bc})} % \NameAddInfo[Charles]{\noexpand\textBF{Babbage}}{ (1791--1871)} % \NameAddInfo{\noexpand\textUC{Kanade}, Takeo}{ (1945-- )} % \NameAddInfo[Ada]{\noexpand\textIT{Lovelace}} % { (Augusta Ada King, Countess of Lovelace % [n\'ee Byron]; 1815--52)} % % \makeatletter % \renewcommand\NamesFormat[1] % {^^A % \ifHeadword % \ifNameauthWestern % \@nameauth@RevThisCommatrue^^A % \bfseries \NameParser^^A % \normalfont\NameQueryInfo{}^^A % \else % \begingroup^^A % \bfseries \NameParser^^A % \unless\ifAncientName % \normalfont; W:\AltOff\space % \@nameauth@RevThistrue \NameParser^^A % \fi % \normalfont\NameQueryInfo{}^^A % \endgroup^^A % \fi % \else % \NameParser^^A % \fi % \global\Headwordfalse^^A % \global\AncientNamefalse^^A % } % \makeatother % \renewcommand\MainNameHook{\AltOff} % % \newcommand\Headword{\Headwordtrue\ForgetThis} % \newcommand{\RefArticle}[2] % {\noindent\Headword #1 #2\medskip} % % \RefArticle{\AncientNametrue\Name{Aristotle}}{was the first to offer % a system of logic, most notably syllogistic logic, that would % become the basis for discrete states and circuitry of % digital computers. \Name{Aristotle}\dots} % % \RefArticle{\Name[Charles]{\noexpand\textBF{Babbage}}}{designed and % built the Difference Engine and began work on the Analytical % Engine. \Name[Charles]{\noexpand\textBF{Babbage}}\dots} % % \RefArticle{\Name{\noexpand\textUC{Kanade}, Takeo}}{is one of the % foremost pioneers in the field of computer vision. % \Name{\noexpand\textUC{Kanade}, Takeo}\dots} % % \RefArticle{\Name[Ada]{\noexpand\textIT{Lovelace}}}{collaborated with % \Name*[Charles]{\noexpand\textBF{Babbage}}* and wrote what some % consider to be the first computer program for the Analytical % Engine. \Name[Ada]{\noexpand\textIT{Lovelace}}\dots} % \end{Quote} % % \begin{AltFormatZone} % \renewcommand*\NamesFormat{\color{blue}\sffamily} % \renewcommand*\MainNameHook{\sffamily} % \begin{Quotation}{\Shak} % {``Romeo and Juliet'', Act II, Scene II (published 1597)} % `Tis but thy name that is my enemy;\\ % Thou art thyself, though not a Montague.\\ % What’s Montague? It is nor hand, nor foot,\\ % Nor arm, nor face. O, be some other name\\ % Belonging to a man.\\ % What's in a name? That which we call a rose\\ % By any other name would smell as sweet;\\ % So Romeo would, were he not Romeo call'd,\\ % Retain that dear perfection which he owes\\ % Without that title. Romeo, doff thy name,\\ % And for that name which is no part of thee\\ % Take all myself. % \index{creatives, quotes of\noexpand\string|hyperpage} % \index{Rose, references to\noexpand\string|hyperpage} % \end{Quotation} % \end{AltFormatZone} % % \newpage % % \subsubsection{Marginalia} % % \ifdefined\NameauthDoTestFiles \edef\NameauthTestFile{test11_10.tex}\else % \edef\NameauthTestFile{\jobname.tmp}\fi %^^A % \begin{VerbatimOut}{\NameauthTestFile} % \documentclass{article} % \input{compat.tex} % Included with nameauth for compatibility. % \usepackage{makeidx} % \usepackage[altformat]{nameauth} % % \makeindex % % % Global Boolean flags need to be defined only once. % \newif\ifSpecialFN % \newif\ifSpecialSN % \newif\ifRevertSN % % % Name variant macros must be defined for each name. % % For a long name, we want to use ``William'' in the text % % and ``Wm.'' in the margin. % % \newcommand*\WM{\ifSpecialFN Wm.\else William\fi} % % % The first surname use will be ``Shakespeare'', but ``the % % Bard'' thereafter. We allow for alternate caps. % % We can get ``Shakespeare'' thereafter by toggling a flag. % % \newcommand*\SHK % {% % \ifRevertSN % \textSC{Shakespeare}\else % \ifSpecialSN % \noexpand\AltCaps{t}he Bard\else % \textSC{Shakespeare}% % \fi % \fi % } % % % Here is how we toggle that flag. % \newcommand*\Revert{\RevertSNtrue} % % % Quick interface name definition: % \begin{nameauth} % \< Shak & \noexpand\WM & \noexpand\SHK & > % \end{nameauth} % % % Sorting and tagging the name: % \PretagName[\noexpand\WM]{\noexpand\SHK} % {Shakespeare, William} % \PretagName[Robert]{\textSC{Burns}}{Burns, Robert} % % \makeatletter % \renewcommand*\NamesFormat[1] % {% % \RevertSNfalse\SpecialFNfalse\SpecialSNfalse% % #1% % \unless\ifinner % \marginpar % {% % \footnotesize\raggedleft% % \SpecialFNtrue\SpecialSNfalse% % \NameParser% % }% % \fi % \global\RevertSNfalse% % } % % \renewcommand*\MainNameHook[1] % {% % \AltOff\SpecialFNfalse\SpecialSNtrue% % #1% % \unless\ifinner % \unless\ifRevertSN % \marginpar % {% % \footnotesize\raggedleft% % \SpecialFNfalse\SpecialSNfalse% % \NameParser% % }% % \fi % \fi % \global\RevertSNfalse% % } % \makeatother % % \begin{document} % % \ForgetThis\Shak\ is the national poet of England % in much the same way that \Name[Robert]{\textSC{Burns}} % is that of Scotland. With the latter's rise of influence % in the 1800s, \Revert\Shak\ became known as ``\Shak''. % % \printindex % \end{document} % \end{VerbatimOut} %^^A % This example further illustrates aspects of automation be it practical or not. We begin in the document preamble by defining Boolean flags and macros. As with Roman names, their default values produce the name form in the index entry. % % The default name form aligns with the default Boolean flag setting: false. All non-default values and expansions of these macros occur only in the formatting hooks. This design helps to prevent spurious index entries. % % We must use \cmd{\PretagName} to sort the names in the index. \cmd{\Revert} is used to print a specific form of the surname (via the macros in the naming arguments) as well as suppressing the margin note (via the formatting hooks). Thus we show a complex interplay between syntactic name forms and typographic name formatting. % \begin{Quote} % \VerbatimInput[gobble=0,lastline=41]{\NameauthTestFile} % % \newpage % % \VerbatimInput[gobble=0,firstline=42, lastline=46]{\NameauthTestFile} % \end{Quote} % % Next we define the two formatting hooks that govern changes in the text. We force \cmd{\NamesFormat} to print only the default name via \cmd{\RevertSNfalse}, \cmd{\SpecialFNfalse}, and \cmd{\SpecialSNfalse}. \cmd{\MainNameHook} disables alternate formatting with \cmd{\AltOff}, but it allows variant name forms. % % Macros in the name arguments take the role usually played by internal Boolean flags. In the hooks we print the default name in the body text. If allowed, we print a margin paragraph with an alternate full name using \cmd{\NameParser}. Both hooks set \cmd{\RevertSNfalse} on exit, so that \cmd{\Revert} works on a per-name basis. %^^A % \makeatletter % \renewcommand*\NamesFormat[1] % {^^A % \RevertSNfalse\SpecialFNfalse\SpecialSNfalse^^A % #1^^A % \unless\ifinner % \marginpar % {^^A % \footnotesize\raggedleft^^A % \SpecialFNtrue\SpecialSNfalse^^A % \NameParser^^A % }^^A % \fi % \global\RevertSNfalse^^A % } % \renewcommand*\MainNameHook[1] % {^^A % \AltOff\SpecialFNfalse\SpecialSNtrue^^A % #1^^A % \unless\ifinner % \unless\ifRevertSN % \marginpar % {^^A % \footnotesize\raggedleft^^A % \SpecialFNfalse\SpecialSNfalse^^A % \NameParser^^A % }^^A % \fi % \fi % \global\RevertSNfalse^^A % } % \makeatother % \begin{Quote} % \VerbatimInput[gobble=0,firstline=47, lastline=80]{\NameauthTestFile} % % \newpage % % \VerbatimInput[gobble=0,firstline=81]{\NameauthTestFile} % % \ForgetThis\Shak\ is the national poet of England % in much the same way that \Name[Robert]{\textSC{Burns}} % is that of Scotland. With the latter's rise of influence % in the 1800s, \Revert\Shak\ became known as ``\Shak''. % \end{Quote} % \endgroup^^A Local format hook redefinition % % \subsection{Advanced Customization} % \label{sec:AdvCustomize} % % Here we discuss customization and adding features. We set aside the formatting in this manual, using alternate formatting for much of this section. % % \begingroup^^A Local format hook redefinition % % \subsubsection[Using Internals]{Using Package Internals} % % We start with alternate formatting (Section~\ref{sec:AltFormat}), changing the ``back-end'' macros to our custom code. Here, we need only check \texttt{\textbackslash if@nameauth@DoAlt}, which is toggled by \cmd{\AltOn} and \cmd{\AltOff}. % Instead of using \cmd{\textSC} and friends, we define a new macro that works in similar fashion. \cmd{\Fbox} draws a frame around the name: %^^A % \ifdefined\NameauthDoTestFiles \edef\NameauthTestFile{test13_01.tex}\else % \edef\NameauthTestFile{\jobname.tmp}\fi %^^A % \begin{VerbatimOut}{\NameauthTestFile} % \documentclass{article} % \input{compat.tex} % Included with nameauth for compatibility. % \usepackage{makeidx} % \usepackage[altformat]{nameauth} % % \makeindex % % % Alternate formatting macro definition % \makeatletter % \newcommand*\Fbox[1]{% % \if@nameauth@DoAlt\protect\fbox{#1}\else#1\fi % } % \makeatother % % % Quick interface definition % \begin{nameauth} % \< deSmet & Pierre-Jean & % \noexpand\Fbox{\noexpand\AltCaps{d}e~Smet} & > % \end{nameauth} % % % Sorting and tagging % \PretagName[Pierre-Jean]% % {\noexpand\Fbox{\noexpand\AltCaps{d}e~Smet}}% % {de~Smet, Pierre-Jean} % % \renewcommand*\MainNameHook{\AltOff} % \renewcommand*\FrontNameHook{\AltOff} % % \begin{document} % % \deSmet\ was a Jesuit missionary who arrived in North % America in 1821 at the age of twenty, after a year of seminary % education. \CapThis\deSmet\ was ordained in 1827 and worked % among American Indian nations after 1837. We can show the forms % \LdeSmet\ and \SdeSmet. % % \printindex % \end{document} % \end{VerbatimOut} %^^A % \begin{Quote} % \VerbatimInput[gobble=0,lastline=14]{\NameauthTestFile} % \end{Quote} % % Since \cmd{\AltCaps} is part of \textsf{nameauth}, one need not reinvent that wheel. Just use it in the name arguments and sorting macros: % \begin{Quote} % \VerbatimInput[gobble=0,firstline=15,lastline=25]{\NameauthTestFile} % \end{Quote} % % \makeatletter % \newcommand*\Fbox[1]{^^A % \if@nameauth@DoAlt\protect\fbox{#1}\else#1\fi % }^^A % \makeatother % \renewcommand*\MainNameHook{\AltOff} % \renewcommand*\FrontNameHook{\AltOff} % % The final step is redefining the hooks, which can be quite simple: % \begin{Quote} % \VerbatimInput[gobble=0,firstline=26]{\NameauthTestFile} % % \deSmet\ was a Jesuit missionary who arrived in North % America in 1821 at the age of twenty, after a year of seminary % education. \CapThis\deSmet\ was ordained in 1827 and worked % among American Indian nations after 1837. We can show the forms % \LdeSmet\ and \SdeSmet. % \end{Quote} % % \endgroup^^A Local format hook redefinition % % \subsubsection[Name Hooks]{Using Name Hooks} % \label{sec:FullCustomize} % % \begingroup^^A Local format hook redefinition % % One can redesign or augment the core naming macros that handle regular, long, and short names, then hook those changes into the core name engine. It should be obvious that such changes could break \textsf{nameauth} if not done carefully. These macros are set by default to \cmd{\@nameauth@Name}, the internal name parser. % \begin{itemize} % \item \DescribeMacro{\NameauthName}\cmd{\Name}, or an unmodified shorthand, calls \cmd{\NameauthName}. % % \item \DescribeMacro{\NameauthLName}\cmd{\Name*}, or an L-shorthand, sets \cmd{\@nameauth@FullNametrue}, then calls \cmd{\NameauthLName}. % % \item \DescribeMacro{\NameauthFName}\cmd{\FName}, or an S-shorthand, sets \cmd{\@nameauth@FirstNametrue}, then calls \cmd{\NameauthFName}. % \end{itemize} % % \begin{InfoBox} % One should not modify \cmd{\Name} and \cmd{\FName} directly. % \end{InfoBox} % % \subsubsection*{\hfil Names In Boxes} % % Since \textsf{nameauth} uses \textsf{xparse}, the next examples use it also. Here we look at decoration in the sense of putting a name into something around it. This could be useful if, in certain parts of a document, one wanted to turn names into hyperlinks or some other kind of feature. Here we simply put names into colored boxes.\footnote{After the parsed and formatted name is printed in the body text, the internal macros \emph{globally} set \cmd{\@nameauth@FullNamefalse} and \cmd{\@nameauth@FirstNamefalse}, as well as other flags related to the prefix macros. This prevents certain cases of undocumented behavior in versions of \textsf{nameauth} before 3.3, where resetting flags locally could cause unexpected name forms. If an existing document leverages the local resetting of flags, one can use the \texttt{oldreset} option.} % % \Global These macros can be redefined or used locally within a scope without making global changes to the document unless you specifically use \cmd{\global}. % % \newpage % % \ifdefined\NameauthDoTestFiles \edef\NameauthTestFile{test13_02.tex}\else % \edef\NameauthTestFile{\jobname.tmp}\fi %^^A % \begin{VerbatimOut}{\NameauthTestFile} % \documentclass{article} % \input{compat.tex} % Included with nameauth for compatibility. % \usepackage{makeidx} % \usepackage[altformat]{nameauth} % \usepackage{xcolor} % % \makeindex % % \makeatletter % % Change the general-case name macro to show % % a name in a framed, colored box. % % \NewDocumentCommand{\MyName}{O{} m O{}} % {\fcolorbox{black}{gray!25!white}{\@nameauth@Name[#1]{#2}[#3]}} % % % Likewise change the macro for when names are forced long. % \NewDocumentCommand{\MyLName}{O{} m O{}} % {\fcolorbox{black}{green!25!white}{\@nameauth@Name[#1]{#2}[#3]}} % % % Likewise change the macro when personal names are desired. % \NewDocumentCommand{\MyFName}{O{} m O{}} % {\fcolorbox{black}{yellow!25!white}{\@nameauth@Name[#1]{#2}[#3]}} % \makeatother % % % Change the formatting hooks, but do not use alternate. % % formatting, which is separate from the customization above. % \renewcommand*\NamesFormat{\scshape} % \renewcommand*\MainNameHook{} % % % Change the naming macro hooks. % \renewcommand*\NameauthName{\MyName} % \renewcommand*\NameauthLName{\MyLName} % \renewcommand*\NameauthFName{\MyFName} % % \begin{document} % % \ForgetThis\Name[Adolf]{Harnack} was a theologian who stressed % the Fatherhood of God and the brotherhood of man. % \Name[Adolf]{Harnack} flourished in the early twentieth % century; \Name*[Adolf]{Harnack}[Adolf von]; \FName[Adolf]{Harnack}. % % \printindex % \end{document} % \end{VerbatimOut} %^^A % \begin{Quote} % \VerbatimInput[gobble=0]{\NameauthTestFile} % % \makeatletter % \NewDocumentCommand{\MyName}{O{} m O{}} % {\fcolorbox{black}{gray!25!white}{\@nameauth@Name[#1]{#2}[#3]}} % % \NewDocumentCommand{\MyLName}{O{} m O{}} % {\fcolorbox{black}{green!25!white}{\@nameauth@Name[#1]{#2}[#3]}} % % \NewDocumentCommand{\MyFName}{O{} m O{}} % {\fcolorbox{black}{yellow!25!white}{\@nameauth@Name[#1]{#2}[#3]}} % \makeatother % % \renewcommand*\NamesFormat{\scshape} % \renewcommand*\MainNameHook{} % \renewcommand*\NameauthName{\MyName} % \renewcommand*\NameauthLName{\MyLName} % \renewcommand*\NameauthFName{\MyFName} % % \ForgetThis\Name[Adolf]{Harnack} was a theologian who stressed % the Fatherhood of God and the brotherhood of man. % \Name[Adolf]{Harnack} flourished in the early twentieth % century; \Name*[Adolf]{Harnack}[Adolf von]; \FName[Adolf]{Harnack}. % \end{Quote} % \endgroup^^A Local format hook redefinition % % \begingroup % \renewcommand*\NamesFormat{\color{blue}\sffamily} % \renewcommand*\MainNameHook{\sffamily} % \begin{Quotation}{\Name[Mark]{Twain}} % {\Title{The Innocents Abroad} (1869)} % Virtue never has been as respectable as money. % \index{creatives, quotes of\noexpand\string|hyperpage} % \end{Quotation} % \endgroup % % \newpage % % \begingroup^^A Local format hook redefinition % % \subsubsection*{\hfil Change Parsing} % % Section~\ref{sec:FinalOptargs} discussed final optional arguments. Here we use \textsf{xparse} to change the default behavior of optional arguments, but only for \TeX\ distros since May 2018. %^^A % \begin{VerbatimOut}{\jobname.tmp} % \makeatletter % \@ifl@t@r\fmtversion{2018/04/30}{\newcommand\nameauthxp{}}{} % % \ifdefined\nameauthxp % \NewDocumentCommand{\MyName}{O{} m !O{}} % {\@nameauth@Name[#1]{#2}[#3]} % \else % \NewDocumentCommand{\MyName}{O{} m O{}} % {\@nameauth@Name[#1]{#2}[#3]} % \fi % \makeatother % % \let\NameauthName\MyName % \let\NameauthLName\MyName % \let\NameauthFName\MyName % \ForgetName[Albert]{Einstein} % \ForgetName{Miyazaki, Hayao} % % We want: ``Albert Einstein [first] spoke about physics. % Miyazaki Hayao [later] spoke about animation. % Einstein [first] spoke about physics. % Miyazaki [later] spoke about animation.'' % % We get: ``\Name[Albert]{Einstein} [first] spoke about physics. % \Name{Miyazaki, Hayao} [later] spoke about animation. % \Name[Albert]{Einstein} [first] spoke about physics. % \Name{Miyazaki, Hayao} [later] spoke about animation.'' % \end{VerbatimOut} %^^A % \begin{Quote} %^^A Display the appropriate verbatim text above. % \VerbatimInput[gobble=0]{\jobname.tmp} %^^A Redefine formatting macros. % \renewcommand\NamesFormat{} % \renewcommand\MainNameHook{} % % \makeatletter % \ifdefined\nameauthxp % \NewDocumentCommand{\MyName}{O{} m !O{}} % {\@nameauth@Name[#1]{#2}[#3]} % \else % \NewDocumentCommand{\MyName}{O{} m O{}} % {\@nameauth@Name[#1]{#2}[#3]} % \fi % \makeatother % % \let\NameauthName\MyName % \let\NameauthLName\MyName % \let\NameauthFName\MyName % \ForgetName[Albert]{Einstein} % \ForgetName{Miyazaki, Hayao} % % We want: ``Albert Einstein [first] spoke about physics. % Miyazaki Hayao [later] spoke about animation. % Einstein [first] spoke about physics. % Miyazaki [later] spoke about animation.'' % % We get: ``\Name[Albert]{Einstein} [first] spoke about physics. % \Name{Miyazaki, Hayao} [later] spoke about animation. % \Name[Albert]{Einstein} [first] spoke about physics. % \Name{Miyazaki, Hayao} [later] spoke about animation.'' % \end{Quote} % % \endgroup^^A Local format hook redefinition % % \ReturnLink % % \end{AltFormatZone} % \Info{\hrule\strut We end a big region of alternate formatting\strut\hrule} % % \begingroup % \renewcommand*\NamesFormat[1]{\color{blue}\sffamily #1} % \renewcommand*\MainNameHook[1]{\sffamily #1} % \begin{Quotation}{\Name[Herbert]{Hoover}} % {\Title{American Individualism} (1922)} % \textls[-5]{Now, as the storm of war, of revolution and of emotion % subsides there is left even with us of the United States much unrest, % much discontent with the surer forces of human advancement. To all of % us, out of this crucible of actual, poignant, individual experience % has come a deal of new understanding, and it is for all of us to ponder % these new currents if we are to shape our future with intelligence.} % \index{politicians, quotes of\noexpand\string|hyperpage} % \end{Quotation} % \endgroup % % \newpage % % \section{Obsolete Features} % \label{sec:OldStuff} % % \begin{InfoBox}[General Hook Redefinition] % \VerbatimInput[gobble=0,numbers=none,fontsize=\small]{manhook.tmp} % \end{InfoBox} % % \input{manhook.tmp} % % \subsection[Pseudonyms]{Pseudonym Macros} % \label{sec:AKA} % % The macros described in this section are early features of \textsf{nameauth}. They do not work like other macros that display names. They remain only for backward compatibility, but will not be developed further. % % \subsubsection*{\hfil Special Syntax} % % To save space, we show \meta{SAFX} as the equivalent of \meta{SNN\textbf{,}Affix}. The macros in this section all take arguments of the form: % % \begin{SyntaxBoxii} % Target Name & Cross-Reference Name\\\midrule % \oarg{FNN}\marg{SAFX} & \oarg{xref FNN}\marg % {xref SAFX}\oarg{xref Alt.}\\ % \end{SyntaxBoxii} % % \begin{itemize} % \item The target name comes first, which is the \emph{opposite} of \cmd{\IndexRef}. There the target name comes last because it is text passed to the index macros. % % \item The cross-reference comes last to allow for the widest range of name forms (again, the opposite of \cmd{\IndexRef}). We avoid two optional arguments in succession by preventing the target from having a final optional argument. Neither \meta{Alt.} nor the obsolete syntax can be used with the target name. Both can be used with the cross-reference. % % \item \meta{SAFX} and \meta{xref SAFX} can have comma-delimited suffixes. % % \item One cannot use \cmd{\TagName} with a cross-reference, but one can sort a cross-reference with \cmd{\PretagName} (Section~\ref{sec:IndexSort}). % \end{itemize} % % This syntax can produce results in the text that can look legitimate, yet the index entries are wrong due to confusion. The normal name arguments make it easier to determine name forms. For example, % \IndexInactive % \begin{itemize} % \item We see \PName*{William, I}[William]{the Conqueror} in the text. % \item |\PName*{William, I}[William]{the Conqueror}| % \item The syntax obfuscates the fact that the xref has a Western form. % \item The index is wrong: ``\ShowIdxPageref*[William]{the Conqueror} \textit{see} \ShowIdxPageref*{William, I}'' % \end{itemize} % \IndexActive % % \newpage % % \subsubsection*{\hfil The Macros} % % \DescribeMacro{\AKA} % The \emph{also known as} macro and its starred form display an alias in the text and create a cross-reference in the index. % \DescribeMacro{\AKA*} % They format names differently than the naming macros because they use the name patterns for cross-references as a means to account for the name forms that they print in the test. % % \begin{SyntaxBox} % \small\cmd{\AKA\ }\oarg{FNN}\marg{SAFX}\oarg{xref FNN}\marg % {xref SAFX}\oarg{xref Alt.}\\ % \small\cmd{\AKA*}\oarg{FNN}\marg{SAFX}\oarg{xref FNN}\marg % {xref SAFX}\oarg{xref Alt.}\\ % \end{SyntaxBox} % % \begin{itemize} % \item Both macros create a cross-reference in the index to the target name. % % \item \cmd{\AKA} prints a long form of the cross-reference name in the text. \cmd{\SeeAlso} works with \cmd{\AKA}, \cmd{\AKA*}, \cmd{\PName}, and \cmd{\PName*}. % % \item If \meta{xref Alt.} is present in a Western name form, then instead of \meta{xref FNN}, \meta{xref Alt.} will be printed in the text. % % \item If \meta{xref Alt.} is present in a Non-Western name form, then instead of \meta{xref Affix} (if present), \meta{xref Alt.} will be printed in the text. % % \item If \meta{xref Alt.} is present without either \meta{xref FNN} or \meta{xref Affix}, the obsolete syntax is used only with the xref. % % \item \cmd{\AKA*} is analogous to \cmd{\FName}. \cmd{\ForceFN} works with it. The \texttt{oldAKA} option implies \cmd{\ForceFN} with every use of \cmd{\AKA*}. % % \item \cmd{\AKA}, \cmd{\AKA*}, \cmd{\PName*}, and \cmd{\PName*} do not permit the effects of \cmd{\ForgetThis} and \cmd{\SubvertThis} to ``pass through'' because they produce output in the text. The \texttt{oldreset} option negates this. % \end{itemize} % % Below we make cross-references to \Name[Bob]{Hope} \cmd{\Name[Bob]\{Hope\}}; all of the forms listed create the cross-reference ``\ShowIdxPageref*[Leslie Townes]{Hope} \textit{see} \ShowIdxPageref*[Bob]{Hope}''. % \begin{Block} % \PatInfo[3ex]{\ShowPattern[Bob]{Hope}!MN\break % \ShowPattern[Leslie Townes]{Hope}!PN} % \AKA[Bob]{Hope}[Leslie Townes]{Hope}\dotfill^^A % |\AKA[Bob]{Hope}[Leslie Townes]{Hope}|\\ % \RevComma\AKA[Bob]{Hope}[Leslie Townes]{Hope}\dotfill^^A % |\RevComma\AKA[Bob]{Hope}[Leslie Townes]{Hope}|\\ % \AKA[Bob]{Hope}[Leslie Townes]{Hope}[Lester T.]\dotfill^^A % |\AKA[Bob]{Hope}[Leslie Townes]{Hope}[Lester T.]|\\ % \AKA*[Bob]{Hope}[Leslie Townes]{Hope}\dotfill^^A % |\AKA*[Bob]{Hope}[Leslie Townes]{Hope}|\\ % \AKA*[Bob]{Hope}[Leslie Townes]{Hope}[Lester]\dotfill^^A % |\AKA*[Bob]{Hope}[Leslie Townes]{Hope}[Lester]| % \end{Block} % % Using these macros with Roman names and other specialized names likely will produce unsatisfactory results. Below we display other name forms after referring to some names to ensure that they have sensible page entries: % \PatInfo[4ex]{\ShowPattern{Louis, XIV}!MN\break % \ShowPattern{Lao-tzu}!MN\break % \ShowPattern[Lafcadio]{Hearn}!MN\break % \ShowPattern[Charles]{du~Fresne}!MN\break % \ShowPattern{Sun King}!PN\break % \ShowPattern{Li, Er}!PN\break % \ShowPattern{du~Cange}!PN\break % \ShowPattern{Koizumi, Yakumo}!PN} % \begin{Quote} % \begin{tabular}{@{}ll} % \ForgetThis\Name{Louis, XIV}& % |\ForgetThis\Name{Louis, XIV}|\\ % \Name{Lao-tzu} & |\Name{Lao-tzu}|\\ % \Name[Lafcadio]{Hearn} & |\Name[Lafcadio]{Hearn}|\\ % \Name[Charles]{du~Fresne}& % |\Name[Charles]{du~Fresne}|\\ % \end{tabular} % \end{Quote} % Caps and reversing macros work on the arguments that are printed % in the text. % \begin{Block} % \AKA{Louis, XIV}{Sun King}\dotfill^^A % |\AKA{Louis, XIV}{Sun King}|\\ % \AKA{Lao-tzu}{Li, Er}\dotfill^^A % |\AKA{Lao-tzu}{Li, Er}|\\ % \AKA[Charles]{du~Fresne}{du~Cange}\dotfill^^A % |\AKA[Charles]{du~Fresne}{du~Cange}|\\ % \CapThis\AKA[Charles]{du~Fresne}{du~Cange}\dotfill^^A % |\CapThis\AKA[Charles]{du~Fresne}{du~Cange}|\\ % \CapName\AKA[Lafcadio]{Hearn}{Koizumi, Yakumo}\dotfill^^A % |\CapName\AKA[Lafcadio]{Hearn}{Koizumi, Yakumo}|\\ % \RevName\AKA[Lafcadio]{Hearn}{Koizumi, Yakumo}\dotfill^^A % |\RevName\AKA[Lafcadio]{Hearn}{Koizumi, Yakumo}|\\ % \ForceFN\AKA[Lafcadio]{Hearn}{Koizumi, Yakumo}\dotfill^^A % |\ForceFN\AKA[Lafcadio]{Hearn}{Koizumi, Yakumo}| % \end{Block} % % \DescribeMacro{\PName} % These convenience macros were an early feature of \textsf{nameauth}. They print a main name followed by a cross-reference in parentheses. % \DescribeMacro{\PName*} % If one is inclined to view \cmd{\AKA} as quirky rubbish, these two macros are a dumpster fire. % \begin{SyntaxBox} % \small\cmd{\PName\ }\oarg{FNN}\marg{SAFX}\oarg{xref\,FNN}\marg % {xref\,SAFX}\oarg{xref\,Alt.}\\ % \small\cmd{\PName*}\oarg{FNN}\marg{SAFX}\oarg{xref\,FNN}\marg % {xref\,SAFX}\oarg{xref\,Alt.}\\ % \end{SyntaxBox} % % \cmd{\PName*} is like \cmd{\Name*} to the extent that it prints a long form of \meta{FNN}\meta{SAFX}. It does not affect the cross-reference \meta{xref FNN}\meta{xref SAFX}\meta{xref Alt.}. % \begin{itemize} % \item Most prefix macros only affect \meta{FNN}\meta{SAFX}, not the cross-reference. % % \item The cross-reference always has a long form. % % \item \cmd{\SkipIndex} keeps both names out of the index. % % \item \meta{Alt.} and the obsolete syntax work only with the cross-reference. % \end{itemize} % \ForgetName[Mark]{Twain} % \ForgetName{William, I} % \ForgetName{Lao-tzu} % \begin{Block} % \FUse \PName[Mark]{Twain}[Samuel L.]{Clemens}\\ % \LUse \PName[Mark]{Twain}[Samuel L.]{Clemens}\\ % \UseB |\PName[Mark]{Twain}[Samuel L.]{Clemens}|\\ % \UseL \PName*[Mark]{Twain}[Samuel L.]{Clemens}\\ % \UseB |\PName*[Mark]{Twain}[Samuel L.]{Clemens}| % % \UseI \ShowIdxPageref*[Samuel L.]{Clemens} \textit{see} % \ShowIdxPageref*[Mark]{Twain}\medskip % % \FUse \ForgetThis\PName{Voltaire}[François-Marie]{Arouet}\\ % \LUse \PName{Voltaire}[François-Marie]{Arouet}\\ % \UseB |\PName{Voltaire}[François-Marie]{Arouet}| % % \UseI \ShowIdxPageref*[François-Marie]{Arouet} \textit{see} % \ShowIdxPageref*{Voltaire}\medskip % % \FUse \PName{William, I}{William, the Conqueror}\\ % \LUse \PName{William, I}{William, the Conqueror}\\ % \UseB |\PName{William, I}{William, the Conqueror}|\\ % \UseL \PName*{William, I}{William, the Conqueror}\\ % \UseB |\PName*{William, I}{William, the Conqueror}| % % \UseI \ShowIdxPageref*{William, the Conqueror} \textit{see} % \ShowIdxPageref*{William, I}\medskip % % \FUse \PName{Bernard, of Clairvaux} % {\textit{Doctor mellifluus}}\\ % \LUse \PName{Bernard, of Clairvaux} % {\textit{Doctor mellifluus}}\\ % \UseB |\PName{Bernard, of Clairvaux}|\\ % \UseB | {\textit{Doctor mellifluus}}|\\ % \UseL \PName*{Bernard, of Clairvaux} % {\textit{Doctor mellifluus}}\\ % \UseB |\PName*{Bernard, of Clairvaux}|\\ % \UseB | {\textit{Doctor mellifluus}}| % % \UseI \ShowIdxPageref*{\textit{Doctor mellifluus}} \textit{see} % \ShowIdxPageref*{Bernard, of Clairvaux}\medskip % % \FUse \PName{Lao-tzu}{Li, Er}\\ % \LUse \PName{Lao-tzu}{Li, Er}\\ % \UseB |\PName{Lao-tzu}{Li, Er}| % % \UseI \ShowIdxPageref*{Li, Er} \textit{see} \ShowIdxPageref*{Lao-tzu} % \end{Block} % % \subsubsection*{\hfil Formatting Workarounds} % % These macros only use subsequent-use formatting hooks (Section~\ref{sec:Formatting}). When \cmd{\NamesFormat} was the only formatting hook, cross-references printed in the text were not formatted. % % \Info*{\small\texttt{formatAKA}}The \texttt{formatAKA} option permits \cmd{\ForceName} to force ``first-use'' formatting hooks, but under different conditions because the name patterns are in the cross-reference system (Section~\ref{sec:NamePatterns}). When using \texttt{formatAKA} we get: % % \begingroup % \makeatletter\@nameauth@AKAFormattrue\makeatother % \begin{itemize} % \global\NamesInactive % \item Front Matter % \PatInfo{\ShowPattern[Good Queen]{Bess}!PN} % \begin{itemize}\footnotesize % \item \AKA{Elizabeth,I}[Good Queen]{Bess}%^^A % \dotfill |\AKA{Elizabeth,I}[Good Queen]{Bess}| % \item \AKA{Elizabeth,I}[Good Queen]{Bess}%^^A % \dotfill |\AKA{Elizabeth,I}[Good Queen]{Bess}| % \end{itemize} % % \global\NamesActive % \item Main Matter % \begin{itemize}\footnotesize % \item \AKA{Elizabeth,I}[Good Queen]{Bess}%^^A % \dotfill |\AKA{Elizabeth,I}[Good Queen]{Bess}| % \item \ForceName%^^A % \AKA{Elizabeth,I}[Good Queen]{Bess}^^A % \dotfill |\ForceName\AKA{Elizabeth,I}[Good Queen]{Bess}| % \end{itemize} % \end{itemize} % \endgroup % % The first appearance of \AKA{Elizabeth,I}[Good Queen]{Bess} above uses \cmd{\FrontNamesFormat} as its formatting hook because it is the first occurrence of the alternate name in the front matter. After that, even though \AKA{Elizabeth,I}[Good Queen]{Bess} occurs for the first time in the main matter, it uses the subsequent-use \cmd{\MainNameHook} because we are using the cross-reference name patterns. We need to use \cmd{\ForceName}, which triggers the expected use of \cmd{\NamesFormat}, the first-use main-matter hook. % % \Info*{\small\texttt{alwaysformat}}We can use the \texttt{alwaysformat} option to force only the use of \cmd{\NamesFormat} and \cmd{\FrontNamesFormat}, but that can look like rubbish: % \begin{Quote} % \makeatletter\@nameauth@AlwaysFormattrue\makeatother % \ForgetThis\LEliz\ was known as ``\AKA{Elizabeth,I}[Good Queen]{Bess}''. % Again we mention Queen \Eliz, ``\AKA{Elizabeth, I}[Good Queen]{Bess}''. % Using \cmd{\ForceName}: \ForceName\AKA{Elizabeth, I}[Good Queen]{Bess}. % \end{Quote} % % \subsection{Obsolete Syntax} % \label{sec:Obsolete} % % This older version of the Non-Western syntax limits the use of alternate names and cross-references, prevents the use of comma-delimited names, and complicates indexing. It remains for backward compatibility. % % \begin{SyntaxBox} % \cmd{\Name}\marg{SNN}\oarg{Alternate} % \end{SyntaxBox} % % Unlike the comma-delimited \meta{SNN\textbf{,}Affix} pair, it was easy to implement the older syntax with \meta{Alternate}. This syntax created an unacceptable second-tier status, thus, the current syntax replaced it. We show this syntax only for the sake of completeness; we advise not to use it. % \begin{itemize} % \item One must \emph{leave empty} the first optional \meta{FNN} argument. % % \item One must \emph{never use} the comma-delimited argument \meta{Affix}. % % \item These names \emph{always use} \meta{Alternate}. % % \item \meta{Alternate} acts like \meta{Affix}. This is the only time that the \meta{Alternate} argument affects both name and index patterns (Section~\ref{sec:NamePatterns}). % % \item These names take the form \meta{SNN Alternate} in the index. % \end{itemize} % \begin{Quote} % \begin{Verbatim} % \Name{Henry}[VIII] % Ancient % \Name{Chiang}[Kai-shek] % Eastern % \begin{nameauth} % \< Dagb & & Dagobert & I > % Ancient % \< Yosh & & Yoshida & Shigeru > % Eastern % \< Fukuyama & & % \noexpand\textUC{Fukuyama} & Takeshi > % Alt. format % \end{nameauth} % \end{Verbatim} % \end{Quote} % \AltFormatActive % \begin{Quote} % After studying in the US during the 1930s, in 1954 Rev. % \Fukuyama\ddag\ \cmd{\Fukuyama}\cmd{\ddag} published % \Title{Nihon Fukuin R\=uteru Ky\=okai Shi} (History % of the Evangelical Lutheran Church in Japan). % \end{Quote} % \AltFormatInactive % \begin{Center} % \begin{tabular}{ll}\toprule % \rowcolor{nagrey}^^A % \ForgetThis\Name{Henry}[VIII]\ddag & % |\ForgetThis\Name{Henry}[VIII]\ddag|\\ % \rowcolor{nagrey}^^A % \Name{Henry}[VIII]\ddag & % |\Name{Henry}[VIII]\ddag|\\ % % \ForgetThis\Name{Chiang}[Kai-shek]\ddag & % |\ForgetThis\Name{Chiang}[Kai-shek]\ddag|\\ % \Name{Chiang}[Kai-shek]\ddag & % |\Name{Chiang}[Kai-shek]\ddag|\\ % % \rowcolor{nagrey}^^A % \Dagb\ddag & |\Dagb\ddag|\\ % \rowcolor{nagrey}^^A % \Dagb\ddag & |\Dagb\ddag|\\ % % \CapName\Yosh\ddag & |\CapName\Yosh\ddag|\\ % \CapName\RevName\LYosh\ddag & |\CapName\RevName\LYosh\ddag|\\ % % \rowcolor{nagrey}^^A % & |\AltFormatActive| \AltFormatActive\\ % \rowcolor{nagrey}^^A % \ForgetThis\Fukuyama\ddag & |\ForgetThis\Fukuyama\ddag|\\ % \rowcolor{nagrey}^^A % \Fukuyama\ddag & |\Fukuyama\ddag|\\ % \rowcolor{nagrey}^^A % & |\AltFormatInactive| \AltFormatInactive\\\bottomrule % \end{tabular} % \end{Center} % % Regardless of its flaws, the obsolete syntax shares name patterns, index tags, name tags, and index entries with the current syntax: % \begin{Quote} % \begin{tabular}{@{}lll} % Obsolete syntax: & \ForgetThis\Name{Henry}[VIII]\ddag & % \cmd{\ForgetThis}\cmd{\Name\{Henry\}[VIII]}\cmd{\ddag}\\[1ex] % & \ShowPattern{Henry}[VIII] & \cmd{\ShowPattern\{Henry\}[VIII]}\\[1ex] % Current syntax: & \Name{Henry, VIII} & \cmd{\Name\{Henry, VIII\}}\\[1ex] % & \ShowPattern{Henry, VIII} & \cmd{\ShowPattern\{Henry, VIII\}}\\ % \end{tabular} % \end{Quote} % % We do not expect people to use the obsolete syntax much anymore. Here we list more advantages to using the current syntax and avoiding the old. % \begin{itemize} % \item Only the newer syntax permits such variants: % \item[] \Name*{Henry, VIII}[Tudor]\dotfill \cmd{\Name*\{Henry, VIII\}[Tudor]} % % \item The proper form for the old syntax is, e.g.: % \item[] \Name*{Henry}[VIII]\dotfill \cmd{\Name*\{Henry\}[VIII]} % % \IndexInactive % \item Next we see malformed Western names: % \item[] \Name[Henry]{VIII}, \Name[Henry]{VIII}\dotfill \cmd{\Name[Henry]\{VIII\}}\\ % \Name*[Henry]{VIII}[Tudor], \Name[Henry]{VIII}[Tudor]\dotfill^^A % \cmd{\Name*[Henry]\{VIII\}[Tudor]} % \item[] These malformed names have the same index entry\dotfill^^A % \ShowIdxPageref*[Henry]{VIII} % \IndexActive % \end{itemize} % If users want to receive warnings about this syntax, use the \emph{strictsyntax} option. % % \ReturnLink % % \newpage % % \StopEventually{^^A % \let\emph\oldemph % \newgeometry{textheight=239mm,left=20mm,right=20mm,nohead} % \IndexProtect % \GlossaryPrologue{\section{Change History}^^A % Minor changes, such as only to documentation and example files, are not shown.} % \PrintChanges % \newpage % \IndexPrologue{\section{Index}^^A % Page numbers in \emph{italic} refer to the page where the corresponding entry is \textbf{described.} Page numbers that are underlined refer to the \textbf{code line} of the definition. Unmodified roman page numbers are used by names and other entries in the documentation.} % \PrintIndex % } % \iffalse %<*package> % \fi % %^^A ----- Paragraph Skip Reset ----- % \setlength{\parskip}{0pt plus 1pt} % % \section{Implementation} % % Both the manual and the package code follow a similar organization. % % \subsection{Boolean Flags} % % The \textsf{nameauth} package is a name parser and indexer. These flags % reflect its states. % % \subsubsection{Flow Control} % % \subsubsection*{\hfil Who Called Me?} % % Let name formatting macros in the core name engine know if they were % called by the naming macros or by the pseudonym macros. % % \begin{macrocode} \newif\if@nameauth@InAKA \newif\if@nameauth@InName % \end{macrocode} % % \subsubsection*{\hfil Core Macro Locks} % % \cmd{\@nameauth@Name}, \cmd{\AKA}, and macros that call them use % \texttt{\textbackslash if@nameauth@Lock} to avoid a stack overflow. % Setting \texttt{\textbackslash if@nameauth@BigLock} true will prevent % the core name engine from executing until the ``big lock'' is set false. % % \begin{macrocode} \newif\if@nameauth@Lock \newif\if@nameauth@BigLock % \end{macrocode} % % \subsubsection*{\hfil Formatting Hook Indicator} % % Tell alternate formatting control macros that they are in % a formatting hook. % % \begin{macrocode} \newif\if@nameauth@InHook % \end{macrocode} % % \subsubsection*{\hfil Core Name Engine Choices} % % \cmd{\JustIndex} toggles this flag, which makes the core name engine % act like \cmd{\IndexName}. % % \begin{macrocode} \newif\if@nameauth@JustIndex % \end{macrocode} % These two flags trigger \cmd{\ForgetName} and \cmd{\SubvertName} % within \cmd{\@nameauth@Name}. % % \begin{macrocode} \newif\if@nameauth@Forget \newif\if@nameauth@Subvert % \end{macrocode} % % \subsubsection[Syntax]{Name Grammar and Syntax} % % \subsubsection*{\hfil Strict Syntax} % % If this flag is true, one will get warnings when using the obsolete syntax. % % \begin{macrocode} \newif\if@nameauth@StrictSyntax % \end{macrocode} % % \subsubsection*{\hfil Name Types} % % These flags reflect the last name type evaluated by any macro that % takes name arguments. The first shows whether or not we have a Western % or Non-Western name. The second shows the kind of Non-Western % syntax used. They are not reset. % % \begin{macrocode} \newif\ifNameauthWestern \newif\ifNameauthObsolete % \end{macrocode} % % \subsubsection*{\hfil Show/Hide Affix Commas} % % The \texttt{comma} and \texttt{nocomma} options toggle the first % flag below. \cmd{\ShowComma} and \cmd{\NoComma} respectively toggle % the second and third. % % \begin{macrocode} \newif\if@nameauth@AlwaysComma \newif\if@nameauth@ShowComma \newif\if@nameauth@NoComma % \end{macrocode} % % \subsubsection*{\hfil Capitalize Entire Surnames} % % The first flag is global. The second is for individual names. % % \begin{macrocode} \newif\if@nameauth@AllCaps \newif\if@nameauth@AllThis % \end{macrocode} % % \subsubsection*{\hfil Reverse Name Order} % % These flags govern name reversing, first global, then for individual names. % % \begin{macrocode} \newif\if@nameauth@RevAll \newif\if@nameauth@RevThis % \end{macrocode} % These flags deals with Western names ordered % in a list according to surname. % % \begin{macrocode} \newif\if@nameauth@RevAllComma \newif\if@nameauth@RevThisComma % \end{macrocode} % % \subsubsection*{\hfil Full Stop Detection} % % This flag is used to prevent double full stops after a name % is displayed. % % \begin{macrocode} \newif\if@nameauth@Punct % \end{macrocode} % % \subsubsection*{\hfil Name Breaking} % % \cmd{\KeepAffix} toggles the first flag below, while \cmd{\KeepName} % toggles the second. Both affect the use of non-breaking spaces % in the text. % % \begin{macrocode} \newif\if@nameauth@NBSP \newif\if@nameauth@NBSPX % \end{macrocode} % % \subsubsection*{\hfil Long and Short Names} % % \texttt{\textbackslash if@nameauth@FullName} is true for a long % name form. \texttt{\textbackslash if@nameauth@FirstName} causes only % Western forenames or (potentially) Non-Western surnames to be displayed % when a shorter form is used. % % \texttt{\textbackslash if@nameauth@ShortSNN} works with % \cmd{\DropAffix} to suppress the affix of a Western name. % \texttt{\textbackslash if@nameauth@ForceAffix} toggles the display of % only the Western affix. % \texttt{\textbackslash if@nameauth@EastFN} forces the printing % of Eastern forenames via \cmd{\ForceFN}. % % \begin{macrocode} \newif\if@nameauth@FullName \newif\if@nameauth@FirstName \newif\if@nameauth@AltAKA \newif\if@nameauth@ShortSNN \newif\if@nameauth@ForceAffix \newif\if@nameauth@EastFN % \end{macrocode} % % \subsubsection{Debugging} % % When used with the index debugging macros, show complete index entries % in the text if true, otherwise show simple entries. % % \begin{macrocode} \newif\if@nameauth@LongIdxDebug % \end{macrocode} % % \subsubsection{Indexing} % % \subsubsection*{\hfil Toggle Indexing} % % The indexing flags permit or prevent name indexing and tags. % \cmd{\IndexActive} and \cmd{\IndexInctive} or the \texttt{index} and % \texttt{noindex} options toggle the first flag and \cmd{\SkipIndex} % toggles the second. % % \begin{macrocode} \newif\if@nameauth@DoIndex \newif\if@nameauth@SkipIndex % \end{macrocode} % % \subsubsection*{\hfil Toggle Index Sorting} % % Allow or prevent the insertion of index sort keys. % % \begin{macrocode} \newif\if@nameauth@Pretag % \end{macrocode} % % \subsubsection*{\hfil Verbose Index Warnings} % % Control the number of warnings concerning the index; default is terse. % % \begin{macrocode} \newif\if@nameauth@Verbose % \end{macrocode} % % \subsubsection*{\hfil Index Cross-References} % % Determine whether \cmd{\IndexRef} creates a \textit{see} reference % or a \textit{see also} reference. % % \begin{macrocode} \newif\if@nameauth@SeeAlso % \end{macrocode} % % \subsubsection[Formatting]{Formatting and Name Patterns} % % \subsubsection*{\hfil Choose Formatting System} % % \cmd{\NamesActive} and \cmd{\NamesInactive}, with the % \texttt{mainmatter} and \texttt{frontmatter} options, toggle % formatting hooks via \texttt{\textbackslash if@nameauth@MainFormat}. % % \begin{macrocode} \newif\if@nameauth@MainFormat % \end{macrocode} % % \subsubsection*{\hfil Modify Pseudonym Formatting} % % Permit \cmd{\AKA} and related macros to call the first-use formatting % hooks once. % % \begin{macrocode} \newif\if@nameauth@AKAFormat % \end{macrocode} % % \subsubsection*{\hfil Select Formatting Hooks} % % \texttt{\textbackslash if@nameauth@FirstFormat} triggers the first-use % hooks to be called; otherwise the second-use hooks are called. % Additionally, \texttt{\textbackslash if@nameauth@AlwaysFormat} forces % this true, except when \texttt{\textbackslash if@nameauth@AKAFormat} % is false. % % \begin{macrocode} \newif\if@nameauth@FirstFormat \newif\if@nameauth@AlwaysFormat % \end{macrocode} % % \subsubsection*{\hfil Caps and Alternate Formatting} % % The next flags deal with first-letter capitalization. \cmd{\CapThis} % sets the first Boolean value. The second is triggered by % \cmd{\@nameauth@UTFtest} when it encounters an active Unicode character. % The third is a fallback triggered by \cmd{\AccentCapThis}. The fourth % disables \cmd{\CapThis} for alternate formatting. The fifth toggles % alternate formatting within formatting hooks. % % \begin{macrocode} \newif\if@nameauth@DoCaps \newif\if@nameauth@UTF \newif\if@nameauth@Accent \newif\if@nameauth@AltFormat \newif\if@nameauth@DoAlt % \end{macrocode} % % \subsubsection{Name Decisions} % % \subsubsection*{\hfil Creating and Destroying Name Patterns} % % Restrict creation and destruction of name patters to the current % name system if true. Otherwise, work with both systems. % % \begin{macrocode} \newif\if@nameauth@LocalNames % \end{macrocode} % % \subsubsection*{\hfil Scope of Name Decision Macros} % % \cmd{\IfMainName}, \cmd{\IfFrontName}, and \cmd{\IfAKA} use % locally-scoped paths by default. When true, this flag causes these % macros to have global scope. % % \begin{macrocode} \newif\if@nameauth@GlobalScope % \end{macrocode} % % \subsubsection[Compatibility]{Version Compatibility} % % \texttt{\textbackslash if@nameauth@AltAKA} is toggled respectively % by \cmd{\AKA} and \cmd{\AKA*} to print a longer or shorter name. % \texttt{\textbackslash if@nameauth@OldAKA} forces the pre-3.0 behavior % of \cmd{\AKA*}. % % \begin{macrocode} \newif\if@nameauth@OldAKA % \end{macrocode} % Determine how strict to be with \textit{see} references. % % \begin{macrocode} \newif\if@nameauth@OldSee % \end{macrocode} % These flags are used only for backward compatibility. The first % determines how per-name flags are reset. The second affects the % behavior of \cmd{\JustIndex}. The third toggles whether or not the % name argument token registers are set globally. The fourth toggles the % inclusion of \textsf{xargs} and \textsf{suffix} for legacy cases. % % \begin{macrocode} \newif\if@nameauth@OldReset \newif\if@nameauth@OldPass \newif\if@nameauth@OldToks \newif\if@nameauth@OldArgs % \end{macrocode} % % \subsection[Registers, Hooks, Values] % {Token Registers, Hooks, and Internal Values} % % \subsubsection[Token Registers]{Name Argument Token Registers} % % These three token registers contain the current values of the name % arguments passed to macros that accept naming arguments. % % \begin{macrocode} \newtoks\@nameauth@toksa \newtoks\@nameauth@toksb \newtoks\@nameauth@toksc % \end{macrocode} % These three token registers contain the current values of the name % arguments in each line of the \texttt{nameauth} environment, thus, \texttt{@nameauth@e} for that environment. % % \begin{macrocode} \newtoks\@nameauth@etoksb \newtoks\@nameauth@etoksc \newtoks\@nameauth@etoksd % \end{macrocode} % % \subsubsection{Hooks} % % \begin{macro}{\NamesFormat} % Used for ``first'' instances of names in main-matter text. % See Sections~\ref{sec:Formatting} and~\ref{sec:ComplexHooks}. Called when % both |\@nameauth@MainFormat| and |\@nameauth@FirstFormat| are true. % % \begin{macrocode} \newcommand*\NamesFormat{} % \end{macrocode} % \end{macro} % % \begin{macro}{\MainNameHook} % \changes{2.4}{2016/03/15}{Added} % Used for later instances of names in main-matter text. See Sections~\ref{sec:Formatting} % and~\ref{sec:ComplexHooks}f. Called when |\@nameauth@MainFormat| is true % and |\@nameauth@FirstFormat| is false. % % \begin{macrocode} \newcommand*\MainNameHook{} % \end{macrocode} % \end{macro} % % \begin{macro}{\FrontNamesFormat} % \changes{2.5}{2016/04/06}{Added} % Used for ``first'' instances of names in front-matter text. This % formatting hook is called when |\@nameauth@MainFormat| is false % and |\@nameauth@FirstFormat| is true. % % \begin{macrocode} \newcommand*\FrontNamesFormat{} % \end{macrocode} % \end{macro} % % \begin{macro}{\FrontNameHook} % \changes{2.4}{2016/03/15}{Added} % Used for subsequent instances of names in front-matter text. % This hook is called when |\@nameauth@MainFormat| is false % and |\@nameauth@FirstFormat| is false. % % \begin{macrocode} \newcommand*\FrontNameHook{} % \end{macrocode} % \end{macro} % % \noindent The following are customization points for % the core name engine (Section~\ref{sec:FullCustomize}). % % \begin{macro}{\NameauthName} % \changes{2.2}{2015/12/01}{Added} % Hook called when no special name modification is made. % % \begin{macrocode} \newcommand*\NameauthName{\@nameauth@Name} % \end{macrocode} % \end{macro} % % \begin{macro}{\NameauthLName} % \changes{2.3}{2016/01/05}{Added} % Hook called after a name is forced long via % \texttt{\textbackslash if@nameauth@name} being set to true. % % \begin{macrocode} \newcommand*\NameauthLName{\@nameauth@Name} % \end{macrocode} % \end{macro} % % \begin{macro}{\NameauthFName} % \changes{2.2}{2015/12/01}{Added} % Hook called after \texttt{\textbackslash if@nameauth@FirstName} % is set true. % % \begin{macrocode} \newcommand*\NameauthFName{\@nameauth@Name} % \end{macrocode} % \end{macro} % % \begin{macro}{\NameauthIndex} % \changes{3.5}{2020/11/23}{Added} % This hook allows one to redefine what happens when any naming macro % or indexing macro calls the equivalent of \cmd{\index}. See % Section~\ref{sec:GeneralIndex}. % % \begin{macrocode} \newcommand*\NameauthIndex{\index} % \end{macrocode} % \end{macro} % % \begin{macro}{\NameauthPattern} % \changes{3.7}{2023/02/03}{Added} % The current name pattern is stored here. With % every call to a macro that takes name arguments % (Section~\ref{sec:NameArgMacros}), this hook is updated. % % \begin{macrocode} \let\NameauthPattern\@empty % \end{macrocode} % \end{macro} % % \subsubsection{Internal Values} % % \begin{macro}{\@nameauth@Actual} % \changes{2.0}{2015/11/11}{Added} % \changes{3.5}{2020/11/23}{Use \cmd{\def}} % This sets the ``actual'' character used by \textsf{nameauth} for % index sorting. % % \begin{macrocode} \def\@nameauth@Actual{@} % \end{macrocode} % \end{macro} % % \begin{macro}{\@nameauth@Exclude} % \changes{3.5}{2020/11/23}{Added} % This makes an index xref into an ``exclusion'': any name pattern % ending in \texttt{!PN} that expands to this value. % See \cmd{\ExcludeName} below. % % \begin{macrocode} \newcommand*\@nameauth@Exclude{!} % \end{macrocode} % \end{macro} % % \begin{macro}{\@nameauth@space} % \changes{3.7}{2023/02/03}{Made global} % This macro provides a consistent space character for index entries. % % \begin{macrocode} \def\@nameauth@space{ } % \end{macrocode} % \end{macro} % % \subsection{Package Options} % % \subsubsection[Syntax]{Name Grammar and Syntax} % % Show warnings when using the obsolete syntax. % % \begin{macrocode} \DeclareOption{strictsyntax}{\@nameauth@StrictSyntaxtrue} % \end{macrocode} % Change the way that names are displayed with respect to their syntactic forms. % % \begin{macrocode} \DeclareOption{nocomma}{\@nameauth@AlwaysCommafalse} \DeclareOption{comma}{\@nameauth@AlwaysCommatrue} \DeclareOption{normalcaps}{\@nameauth@AllCapsfalse} \DeclareOption{allcaps}{\@nameauth@AllCapstrue} \DeclareOption{notreversed}% {\@nameauth@RevAllfalse\@nameauth@RevAllCommafalse} \DeclareOption{allreversed}% {\@nameauth@RevAlltrue\@nameauth@RevAllCommafalse} \DeclareOption{allrevcomma}% {\@nameauth@RevAllfalse\@nameauth@RevAllCommatrue} % \end{macrocode} % % \subsubsection{Indexing} % % Global setting for enabling indexing, sort tags, and verbose warnings. % % \begin{macrocode} \DeclareOption{index}{\@nameauth@DoIndextrue} \DeclareOption{noindex}{\@nameauth@DoIndexfalse} \DeclareOption{pretag}{\@nameauth@Pretagtrue} \DeclareOption{nopretag}{\@nameauth@Pretagfalse} \DeclareOption{verbose}{\@nameauth@Verbosetrue} % \end{macrocode} % % \subsubsection{Formatting} % % Determine the name system or change formatting behavior. % % \begin{macrocode} \DeclareOption{mainmatter}{\@nameauth@MainFormattrue} \DeclareOption{frontmatter}{\@nameauth@MainFormatfalse} \DeclareOption{alwaysformat}{\@nameauth@AlwaysFormattrue} \DeclareOption{formatAKA}{\@nameauth@AKAFormattrue} % \end{macrocode} % % \subsubsection[Predefined Hooks]{Predefined Formatting Hooks} % % \begin{macrocode} \DeclareOption{noformat}{\providecommand*\NamesFormat{}} \DeclareOption{smallcaps}{\providecommand*\NamesFormat{\scshape}} \DeclareOption{italic}{\providecommand*\NamesFormat{\itshape}} \DeclareOption{boldface}{\providecommand*\NamesFormat{\bfseries}} % \end{macrocode} % % \subsubsection[Alternate Format]{Alternate Formatting} % % Enable alternate formatting. % % \begin{macrocode} \DeclareOption{altformat}{% \@nameauth@AltFormattrue\@nameauth@DoAlttrue} % \end{macrocode} % % \subsubsection{Scope} % % Name test paths are either local or the same scope in which they are called. % % \begin{macrocode} \DeclareOption{globaltest}{\@nameauth@GlobalScopetrue} % \end{macrocode} % % \subsubsection[Compatibility]{Version Compatibility} % % Revert package behavior to mimic older versions. % % \begin{macrocode} \DeclareOption{oldAKA}{\@nameauth@OldAKAtrue} \DeclareOption{oldreset}{\@nameauth@OldResettrue} \DeclareOption{oldpass}{\@nameauth@OldPasstrue} \DeclareOption{oldtoks}{\@nameauth@OldTokstrue} \DeclareOption{oldsee}{\@nameauth@OldSeetrue} \DeclareOption{oldargs}{\@nameauth@OldArgstrue} % \end{macrocode} % % \subsection{Package Initialization} % % Execute default options and process options passed by the user. % Load required packages for $\epsilon$-\TeX\ features, trimming % spaces from arguments, starred commands, and optional arguments. % % \begin{macrocode} \ExecuteOptions {nocomma,mainmatter,index,pretag, normalcaps,notreversed,noformat} \ProcessOptions\relax \RequirePackage{etoolbox} \RequirePackage{trimspaces} \RequirePackage{xparse} % \end{macrocode} % Test for the OldArgs flag and include legacy packages % if the flag is true. % % \begin{macrocode} \if@nameauth@OldArgs \RequirePackage{xargs} \RequirePackage{suffix} \fi % \end{macrocode} % % \newpage % % \subsection{Internal Macros} % \label{sec:InternalMacros} % % \subsubsection{Fundamental Macros} % % The following macros are the most essential to the concept of names. % % \subsubsection*{\hfil Name Patterns: Who Am I?} % % \begin{macro}{\@nameauth@Clean} % Thanks to \Name*[Heiko]{Oberdiek}, this macro produces a ``sanitized'' % string to make a control sequence for a name. Testing for the existence % and providing for macros based on that control sequence is the core of % \textsf{nameauth}. % % \begin{macrocode} \newcommand*\@nameauth@Clean[1] {\expandafter\zap@space\detokenize{#1} \@empty} % \end{macrocode} % \end{macro} % % \begin{macro}{\@nameauth@MakeCS} % \changes{3.5}{2020/11/23}{Added} % Unless we are in \cmd{\AKA}, create a name pattern % in the core name engine. % % \begin{macrocode} \newcommand*\@nameauth@MakeCS[1] {% \unless\ifcsname#1\endcsname \unless\if@nameauth@InAKA\csgdef{#1}{}\fi \fi } % \end{macrocode} % \end{macro} % % \subsubsection*{\hfil Parsing: Root and Suffix} % % \begin{macro}{\@nameauth@Root} % Return everything before a comma in \meta{SNN}, using the helper macro below. % % \begin{macrocode} \newcommand*\@nameauth@Root[1]{\@nameauth@@Root#1,\\} % \end{macrocode} % \end{macro} % % \begin{macro}{\@nameauth@@Root} % \changes{2.0}{2015/11/11}{Trim spaces} % \changes{3.0}{2016/10/26}{Redesigned} % \changes{3.2}{2017/03/22}{Renamed} % Throw out the comma and suffix, return the radix. % % \begin{macrocode} \def\@nameauth@@Root#1,#2\\{\trim@spaces{#1}} % \end{macrocode} % \end{macro} % % \begin{macro}{\@nameauth@TrimTag} % \changes{3.0}{2016/10/26}{Added} % \changes{3.2}{2017/03/22}{Renamed} % Return everything before a vertical bar (\texttt{\textbar}) % in an index tag, using the helper below. % % \begin{macrocode} \newcommand*\@nameauth@TrimTag[1]{\@nameauth@@TrimTag#1|\\} % \end{macrocode} % \end{macro} % % \begin{macro}{\@nameauth@@TrimTag} % \changes{3.0}{2016/10/26}{Added} % Throw out the bar and suffix, return the radix. % % \begin{macrocode} \def\@nameauth@@TrimTag#1|#2\\{#1} % \end{macrocode} % \end{macro} % % \begin{macro}{\@nameauth@Suffix} % \changes{0.9}{2012/02/10}{Added} % Return only the affix in an \meta{SNN\textbf{,}Affix} pair, % using the helper macro below. % % \begin{macrocode} \newcommand*\@nameauth@Suffix[1]{\@nameauth@@Suffix#1,,\\} % \end{macrocode} % \end{macro} % % \begin{macro}{\@nameauth@@Suffix} % \changes{0.9}{2012/02/10}{Added} % \changes{1.5}{2013/02/22}{Trim spaces} % \changes{3.0}{2016/10/26}{New test} % \changes{3.2}{2017/03/22}{Renamed} % Throw out the radix; return the suffix with no leading spaces. % % \begin{macrocode} \def\@nameauth@@Suffix#1,#2,#3\\{% \ifx\\#2\\\@empty\else\trim@spaces{#2}\fi } % \end{macrocode} % \end{macro} % % \begin{macro}{\@nameauth@GetSuff} % \changes{3.2}{2017/03/22}{Added} % Test the suffix for a leading active Unicode character. % % \begin{macrocode} \newcommand*\@nameauth@GetSuff[1]{\@nameauth@@GetSuff#1,,\\} % \end{macrocode} % \end{macro} % % \begin{macro}{\@nameauth@@GetSuff} % \changes{3.2}{2017/03/22}{Added} % Throw out the radix; return the suffix. % % \begin{macrocode} \def\@nameauth@@GetSuff#1,#2,#3\\{#2} % \end{macrocode} % \end{macro} % % \subsubsection*{\hfil Parsing: Capitalization} % \label{page:Caps} % % \begin{macro}{\@nameauth@TestToks} % \changes{3.2}{2017/03/22}{Added} % \changes{3.5}{2020/11/23} {Fix namespace} % Test if the leading token is the same as the leading token of an % active Unicode character, using an \DE{Esszett} (\texttt{ß}) % as the control. Used only with \textsf{inputenc}\,/\,\textsf{fontenc} in the next two macros below. % % \begin{macrocode} \newcommand*\@nameauth@TestToks[1] {% \toks@\expandafter{\@car#1\@nil}% \edef\@nameauth@one{\the\toks@}% \toks@\expandafter{\@carß\@nil}% \edef\@nameauth@two{\the\toks@}% \ifx\@nameauth@one\@nameauth@two \@nameauth@UTFtrue% \else \@nameauth@UTFfalse% \fi } % \end{macrocode} % \end{macro} % % \begin{macro}{\@nameauth@UTFtest} % \changes{3.0}{2016/10/26}{Added} % \changes{3.1}{2017/01/13}{Can skip test} % \changes{3.2}{2017/03/22}{Non-suffix only} % \changes{3.5}{2020/11/23}{Fix namespace} % Fully test what method to use when capitalizing a letter, whether % native Unicode (\texttt{xelatex} or \texttt{lualatex} via % \cmd{\Umathchar}) or \textsf{inputenc}\,/\,\textsf{fontenc}. % % \begin{macrocode} \newcommand*\@nameauth@UTFtest[1] {% \def\@nameauth@testarg{#1}% \ifdefined\Umathchar \@nameauth@UTFfalse% \else \ifdefined\UTFviii@two@octets \if@nameauth@Accent \@nameauth@UTFtrue\@nameauth@Accentfalse% \else \expandafter\@nameauth@TestToks \expandafter{\@nameauth@testarg}% \fi \else \@nameauth@UTFfalse% \fi \fi } % \end{macrocode} % \end{macro} % % \begin{macro}{\@nameauth@UTFtestS} % \changes{3.2}{2017/03/22}{Added} % \changes{3.5}{2020/11/23}{Fix namespace} % This test is like the one above, but for a suffix, which requires % more work to function properly. Moreover, we only use this when % the regular suffix macro is not \cmd{\@empty}. % % \begin{macrocode} \newcommand*\@nameauth@UTFtestS[1] {% \expandafter\def\expandafter\@nameauth@testarg% \expandafter{\@nameauth@GetSuff{#1}}% % \end{macrocode} % This token register assignment looks weird, but it works. % % \begin{macrocode} \expandafter\toks@% \expandafter\expandafter\expandafter{\@nameauth@testarg}% % \end{macrocode} % \newpage % \noindent Assign the token register value to a macro to do the test. % % \begin{macrocode} \expandafter\def\expandafter\@nameauth@test@rg% \expandafter{\the\toks@}% \ifdefined\Umathchar \@nameauth@UTFfalse% \else \ifdefined\UTFviii@two@octets \if@nameauth@Accent \@nameauth@UTFtrue\@nameauth@Accentfalse% \else \expandafter\@nameauth@TestToks% \expandafter{\@nameauth@test@rg}% \fi \else \@nameauth@UTFfalse% \fi \fi } % \end{macrocode} % \end{macro} % % \begin{macro}{\@nameauth@Cap} % \changes{3.1}{2017/01/13}{Redesigned} % \changes{3.2}{2017/03/22}{Not for UTF in \textsf{inputenc}} % Capitalize the first letter of the argument, using the helper below. % % \begin{macrocode} \newcommand*\@nameauth@Cap[1]{\@nameauth@C@p#1\\} % \end{macrocode} % \end{macro} % % \begin{macro}{\@nameauth@C@p} % \changes{3.1}{2017/01/13}{Added} % \changes{3.2}{2017/03/22}{Renamed, use \cmd{\MakeUppercase}} % Helper macro for the one above. % % \begin{macrocode} \def\@nameauth@C@p#1#2\\{% \expandafter\trim@spaces\expandafter{\MakeUppercase{#1}#2}% } % \end{macrocode} % \end{macro} % % \begin{macro}{\@nameauth@CapUTF} % \changes{3.2}{2017/03/22}{Added} % Capitalize the first active Unicode letter when using \textsf{inputenc}. % % \begin{macrocode} \newcommand*\@nameauth@CapUTF[1]{\@nameauth@C@pUTF#1\\} % \end{macrocode} % \end{macro} % % \begin{macro}{\@nameauth@C@pUTF} % \changes{3.1}{2017/01/13}{Added} % \changes{3.2}{2017/03/22}{Use \cmd{\MakeUppercase}} % Helper macro for the one above. % % \begin{macrocode} \def\@nameauth@C@pUTF#1#2#3\\{% \expandafter\trim@spaces\expandafter{\MakeUppercase{#1#2}#3}% } % \end{macrocode} % \end{macro} % % \begin{macro}{\@nameauth@CapArgs} % \changes{3.5}{2020/11/23}{Added} % Capitalize the first letter of all name arguments, when not % in alternate formatting. We only use this macro in the local scope % of \cmd{\@nameauth@Parse}. % % \begin{macrocode} \newcommand*\@nameauth@CapArgs[3] {% \ifdefined\@nameauth@InParser \unless\if@nameauth@AltFormat \let\carga\arga% \let\crootb\rootb% \let\csuffb\suffb% \let\cargc\argc% % \end{macrocode} % We test \meta{FNN} for active Unicode % characters, then cap the first letter. % % \begin{macrocode} \unless\ifx\arga\@empty \def\test{#1}% \expandafter\@nameauth@UTFtest\expandafter{\test}% % \end{macrocode} % Capitalize the first active Unicode character % when using \textsf{inputenc}. % % \begin{macrocode} \if@nameauth@UTF \expandafter\def\expandafter\carga\expandafter{% \expandafter\@nameauth@CapUTF\expandafter{\test}}% % \end{macrocode} % Capitalize the first native Unicode character. % % \begin{macrocode} \else \expandafter\def\expandafter\carga\expandafter{% \expandafter\@nameauth@Cap\expandafter{\test}}% \fi \fi % \end{macrocode} % We test \meta{SNN} for active Unicode, % characters, then cap the first letter. % % \begin{macrocode} \def\test{#2}% \expandafter\@nameauth@UTFtest\expandafter{\test}% % \end{macrocode} % Capitalize the first active Unicode character. % % \begin{macrocode} \if@nameauth@UTF \expandafter\def\expandafter\crootb\expandafter{% \expandafter\@nameauth@CapUTF\expandafter{\rootb}}% % \end{macrocode} % Capitalize the first native Unicode character. % % \begin{macrocode} \else \expandafter\def\expandafter\crootb\expandafter{% \expandafter\@nameauth@Cap\expandafter{\rootb}}% \fi % \end{macrocode} % We test \meta{Affix} for active Unicode % characters, then cap the first letter. % % \begin{macrocode} \unless\ifx\suffb\@empty \def\test{#2}% \expandafter\@nameauth@UTFtestS\expandafter{\test}% \protected@edef\test{\@nameauth@GetSuff{#2}}% % \end{macrocode} % Capitalize the first active Unicode character. % % \begin{macrocode} \if@nameauth@UTF \protected@edef\test{\@nameauth@Suffix{#2}}% \expandafter\def\expandafter\csuffb\expandafter{% \expandafter\@nameauth@CapUTF\expandafter{\test}}% % \end{macrocode} % Capitalize the first native Unicode character. % % \begin{macrocode} \else \edef\@nameauth@test{\@nameauth@Suffix{#2}}% \expandafter\def\expandafter\csuffb\expandafter{% \expandafter\@nameauth@Cap\expandafter{\test}}% \fi \fi % \end{macrocode} % We test \meta{Alternate} for active Unicode % characters, then cap the first letter. % % \begin{macrocode} \unless\ifx\argc\@empty \def\test{#3}% \expandafter\@nameauth@UTFtest\expandafter{\test}% % \end{macrocode} % Capitalize the first active Unicode character. % % \begin{macrocode} \if@nameauth@UTF \expandafter\def\expandafter\cargc\expandafter{% \expandafter\@nameauth@CapUTF\expandafter{\test}}% % \end{macrocode} % \newpage % \noindent Capitalize the first native Unicode character. % % \begin{macrocode} \else \expandafter\def\expandafter\cargc\expandafter{% \expandafter\@nameauth@Cap\expandafter{\test}}% \fi \fi % \end{macrocode} % Let all the local name elements have caps. % We do not know which ones will be used. % % \begin{macrocode} \let\arga\carga% \let\rootb\crootb% \let\suffb\csuffb% \let\argc\cargc% \fi \fi } % \end{macrocode} % \end{macro} % % \subsubsection*{\hfil Parsing: Full Stops} % % \begin{macro}{\@nameauth@TestDot} % \changes{3.5}{2020/11/23}{Redesigned} % This macro, based on a snippet by \Name*[Uwe]{Lueck}, checks for % a full stop at the end of its argument using the two internal helper % macros below. % % \begin{macrocode} \newcommand*\@nameauth@TestDot[1] {% % \end{macrocode} % If no full stop is present, \texttt{\#\#1} is associated with the first % \cmd{\@End.} The second \cmd{\@End} gets absorbed, leaving % \texttt{\#\#2} empty. If a full stop is present, \texttt{\#\#2} % will contain it. % % \begin{macrocode} \def\@nameauth@TestD@t##1.\@End##2\\{\@nameauth@TestPunct{##2}}% % \end{macrocode} % The two control sequences are equal if \texttt{\#\#1} is empty % (no full stop). If \texttt{\#\#1} is not empty, it sets % \cmd{\@nameauth@Puncttrue}, which triggers the call to % \cmd{\@nameauth@CheckDot}. % % \begin{macrocode} \def\@nameauth@TestPunct##1% {% \ifx\@nameauth@TestPunct##1\@nameauth@TestPunct \else \global\@nameauth@Puncttrue% \fi }% \global\@nameauth@Punctfalse% \@nameauth@TestD@t#1\@End.\@End\\% } % \end{macrocode} % \end{macro} % % \begin{macro}{\@nameauth@CheckDot} % We assume that \cmd{\expandafter} precedes the invocation of % \cmd{\@nameauth@CheckDot}, which only is called if the terminal % character of the input is a full stop. We evaluate the lookahead % \cmd{\@nameauth@token} while keeping it on the list of input tokens. % % \begin{macrocode} \newcommand*\@nameauth@CheckDot {\futurelet\@nameauth@token\@nameauth@EvalDot} % \end{macrocode} % \end{macro} % % \begin{macro}{\@nameauth@EvalDot} % If \cmd{\@nameauth@token}, the lookahead, is a full stop, we gobble it. % % \begin{macrocode} \newcommand*\@nameauth@EvalDot {% \let\@nameauth@stop=.% \ifx\@nameauth@token\@nameauth@stop \expandafter\@gobble \fi } % \end{macrocode} % \end{macro} % % \subsubsection*{\hfil Parsing: Breaking, Spaces, and Commas} % % \begin{macro}{\@nameauth@AddPunct} % \changes{3.5}{2020/11/23}{Added} % Here we make spaces between name elements in the text break or not, % and decide whether to add commas or not, depending on the name type. % We only use this macro in \cmd{\@nameauth@Parse}. % % \begin{macrocode} \newcommand*\@nameauth@AddPunct {% \ifdefined\@nameauth@InParser \def\Space{ }% \def\SpaceW{ }% % \end{macrocode} % \cmd{\SpaceW} is used for the space between a Western name and an affix, % specifically tied to \cmd{\KeepAffix}. \cmd{\Space} is used for all % other spaces between name elements. % % \begin{macrocode} \if@nameauth@NBSP \edef\Space{\nobreakspace}\fi \if@nameauth@NBSPX \edef\SpaceW{\nobreakspace}\fi % \end{macrocode} % Western names use commas differently from all other names, % so we only use the following logic if \meta{FNN} is not empty. % % \begin{macrocode} \unless\ifx\arga\@empty \if@nameauth@AlwaysComma\@nameauth@ShowCommatrue\fi \if@nameauth@ShowComma \def\Space{, }% \if@nameauth@NBSP\edef\Space{,\nobreakspace}\fi \fi \if@nameauth@NoComma \def\Space{ }% \if@nameauth@NBSP\edef\Space{\nobreakspace}\fi \fi \fi \fi } % \end{macrocode} % \end{macro} % % \subsubsection*{\hfil Parsing: Name Argument Loading} % \label{page:NameauthLoadArgs} % % \begin{macro}{\@nameauth@LoadArgs} % \changes{3.5}{2020/11/23}{Added} % \changes{4.1}{2025/02/04}{Clean name patterns via \cmd{\xdef}, name arg tokens saved here} % Assign name arguments to internal macros to determine name syntax. % This is used in all macros that take name arguments. % % \begin{macrocode} \newcommand*\@nameauth@LoadArgs[3] {% % \end{macrocode} % We want these arguments to expand to \cmd{\@empty} (or not) % when we test them. % % \begin{macrocode} \protected@edef\@nameauth@A{\trim@spaces{#1}}% \protected@edef\@nameauth@B{\@nameauth@Root{#2}}% \protected@edef\@nameauth@SB{\@nameauth@Suffix{#2}}% \protected@edef\@nameauth@C{\trim@spaces{#3}}% % \end{macrocode} % Make (usually) unique control sequence values from the name arguments % for all possible name forms. We use \cmd{\@nameauth@Choice} to pick % the name pattern that we want. Using \cmd{\edef} ensures that these % macros are just the detokenized arguments. % % \begin{macrocode} \xdef\@nameauth@csb{\@nameauth@Clean{#2}}% \xdef\@nameauth@csbc{\@nameauth@Clean{#2,#3}}% \xdef\@nameauth@csab{\@nameauth@Clean{#1!#2}}% % \end{macrocode} % \newpage % \noindent Make token register copies of the current name arguments. % % \begin{macrocode} \if@nameauth@OldToks \@nameauth@toksa\expandafter{#1}% \@nameauth@toksb\expandafter{#2}% \@nameauth@toksc\expandafter{#3}% \else \global\@nameauth@toksa\expandafter{#1}% \global\@nameauth@toksb\expandafter{#2}% \global\@nameauth@toksc\expandafter{#3}% \fi } % \end{macrocode} % \end{macro} % % \subsubsection*{\hfil Parsing: Standard Parsing Logic} % % \begin{macro}{\@nameauth@Choice} % \changes{3.5}{2020/11/23}{Added} % \changes{3.7}{2023/02/03}{Redesigned to optimize many macros} % \changes{4.1}{2025/02/04}{Globally update name pattern and name type info} % This standard logic applies to all macros that take name arguments. Here % we update \cmd{\NameauthPattern}, % \texttt{\textbackslash ifNameauthWestern}, and % \texttt{\textbackslash ifNameauthObsolete} to show the resulting name % pattern and type of name. % % \begin{macrocode} \newcommand\@nameauth@Choice[3] {% \ifx\@nameauth@A\@empty \ifx\@nameauth@C\@empty % \end{macrocode} % This path is for Non-Western names. The \texttt{\#1} argument is % used both here and below when \cmd{\@nameauth@SB} is present. The % \texttt{\#1} path always corresponds to the present syntax. % Thus, when printing names in the text, the \texttt{\#1} argument % must test both \cmd{\@nameauth@C} and \cmd{\@nameauth@SB}, replacing % the latter with former if it exists. With indexing and other macros, % one ignores \cmd{\@nameauth@C}. % % \begin{macrocode} \global\let\NameauthPattern\@nameauth@csb% \global\NameauthWesternfalse% \global\NameauthObsoletefalse% #1% \else \ifx\@nameauth@SB\@empty % \end{macrocode} % The \texttt{\#2} argument is only for Non-Western names that use % the obsolete syntax. Here \cmd{\@nameauth@SB} % never occurs. For indexing and control sequences, one cannot ignore % the use of \cmd{\@nameauth@C} in this path. % % \begin{macrocode} \if@nameauth@StrictSyntax \PackageWarning{nameauth}{Use of obsolete syntax}\fi \global\let\NameauthPattern\@nameauth@csbc% \global\NameauthWesternfalse% \global\NameauthObsoletetrue% #2% \else % \end{macrocode} % But if both \cmd{\@nameauth@SB} and \cmd{\@nameauth@C} are present, % we invoke the \texttt{\#1} argument instead and let it do any further % testing and processing. That shows we are again using the current % syntax with a potential name swap. % % \begin{macrocode} \global\let\NameauthPattern\@nameauth@csb% \global\NameauthWesternfalse% \global\NameauthObsoletefalse% #1% \fi \fi \else % \end{macrocode} % This path is for Western names. When printing % names in the text, somewhere in the \texttt{\#3} % argument one must test for \cmd{\@nameauth@C} and swap it for % \cmd{\@nameauth@A}. Also check for and handle % \cmd{\@nameauth@SB}. Otherwise, for indexing and patterns, % ignore \cmd{\@nameauth@C} in this path and handle % \cmd{\@nameauth@SB} appropriately. % % \begin{macrocode} \global\let\NameauthPattern\@nameauth@csab% \global\NameauthWesterntrue% \global\NameauthObsoletefalse% #3% \fi } % \end{macrocode} % \end{macro} % % \begin{macro}{\@nameauth@Flags} % \changes{3.5}{2020/09/25}{Added} % \changes{4.1}{2025/02/04}{Add global \cmd{\ForceAffix} flag reset} % Reset flags after the naming macros and \cmd{\AKA} and friends create % output in the text. Other places where flags are reset are for % special cases. % % \begin{macrocode} \newcommand*\@nameauth@Flags {% \global\@nameauth@ForceAffixfalse% \if@nameauth@OldReset % \end{macrocode} % The \texttt{oldreset} option implies not only a difference % in scope regarding how flags are reset, but it also lets the effects % of \cmd{\ForgetThis} and \cmd{\SubvertThis} pass through \cmd{\AKA} % and \cmd{\AKA*}. We reset \texttt{\textbackslash % if@nameauth@AltAKA} here due to macros like \cmd{\PName}. % % \begin{macrocode} \if@nameauth@InAKA\@nameauth@AltAKAfalse\fi \@nameauth@SkipIndexfalse% \if@nameauth@InName \@nameauth@Forgetfalse \@nameauth@Subvertfalse% \fi \@nameauth@NBSPfalse \@nameauth@NBSPXfalse% \@nameauth@DoCapsfalse \@nameauth@Accentfalse% \@nameauth@AllThisfalse \@nameauth@ShowCommafalse% \@nameauth@NoCommafalse \@nameauth@RevThisfalse% \@nameauth@RevThisCommafalse% \@nameauth@ShortSNNfalse \@nameauth@EastFNfalse% \else % \end{macrocode} % The current way that the flags are reset makes them both global % and more uniform, hopefully eliminating a few chances for errors % that might be quite difficult to debug. % % \begin{macrocode} \if@nameauth@InAKA\global\@nameauth@AltAKAfalse\fi \global\@nameauth@SkipIndexfalse% \global\@nameauth@Forgetfalse \global\@nameauth@Subvertfalse% \global\@nameauth@NBSPfalse \global\@nameauth@NBSPXfalse% \global\@nameauth@DoCapsfalse \global\@nameauth@Accentfalse% \global\@nameauth@AllThisfalse \global\@nameauth@ShowCommafalse% \global\@nameauth@NoCommafalse \global\@nameauth@RevThisfalse% \global\@nameauth@RevThisCommafalse% \global\@nameauth@ShortSNNfalse \global\@nameauth@EastFNfalse% \fi } % \end{macrocode} % \end{macro} % % \newpage % % \subsubsection[Errors/Debugging]{Error Detection and Debugging} % % \begin{macro}{\@nameauth@Error} % \changes{3.0}{2016/10/26}{Added} % \changes{3.01}{2016/10/27}{Fixed} % \changes{3.5}{2020/11/23}{Fix namespace} % The \textsf{nameauth} package will halt with a meaningful error % when a required name argument is empty, expands to empty, or % has an empty root in a root/suffix pair. % % \begin{macrocode} \newcommand*\@nameauth@Error[2] {% \edef\@nameauth@msga{#2 SNN arg empty}% \edef\@nameauth@msgb{#2 SNN arg malformed}% \protected@edef\@nameauth@testname{\trim@spaces{#1}}% \protected@edef\@nameauth@testroot{\@nameauth@Root{#1}}% \ifx\@nameauth@testname\@empty \PackageError{nameauth}{\@nameauth@msga}% \fi \ifx\@nameauth@testroot\@empty \PackageError{nameauth}{\@nameauth@msgb}% \fi } % \end{macrocode} % \end{macro} % % \begin{macro}{\@nameauth@IdxPageref} % \changes{3.3}{2020/02/20}{Added} % \changes{3.5}{2020/11/23}{Fix name space, redefine hook % to print in text} % \changes{3.7}{2023/02/03}{Renamed; only show index entries; % add warning; optimized} % Here we set up a local scope because we make changes that would % otherwise affect normal \textsf{nameauth} output. We redefine % \cmd{\NameauthIndex} to print an argument in the text instead of % the index, and we force indexing to occur. % % \begin{macrocode} \newcommand*\@nameauth@IdxPageref[3] {% % \end{macrocode} % Warn if \cmd{\SkipIndex} was called before \cmd{\ShowIdxPageref}, % and reset it. % % \begin{macrocode} \if@nameauth@SkipIndex \PackageWarning{nameauth} {\string\SkipIndex precedes \string\ShowIdxPageref; check}% \unless\if@nameauth@OldReset \@nameauth@SkipIndexfalse% \fi \fi % \end{macrocode} % Start a local scope to isolate any changes and redefine % \cmd{\NameauthIndex} (the index macro hook) to print % an entry in the text. % % \begin{macrocode} \begingroup% \def\NameauthIndex##1{##1}% \@nameauth@DoIndextrue% % \end{macrocode} % We locally delete any tag and xref control sequences as needed. % They will be restored when the scope ends. If \cmd{\ShowIdxPageref} % set \cmd{\@nameauth@LongIdxDebugtrue} we produce a full index entry % that shows all the tags and the ``actual'' character as well as the % name. Otherwise we produce a short index entry that shows only the name. % % \begin{macrocode} \@nameauth@Choice{}{}{}% \csundef{\NameauthPattern!PN}% \unless\if@nameauth@LongIdxDebug \csundef{\NameauthPattern!PRE}% \csundef{\NameauthPattern!TAG}% \fi \IndexName[#1]{#2}[#3]% % \end{macrocode} % We close the scope and reset the flags. % % \begin{macrocode} \endgroup% \global\@nameauth@LongIdxDebugfalse% } % \end{macrocode} % \end{macro} % % \subsubsection{Core Name Engine} % \label{sec:CoreName} % % \subsubsection*{\hfil Argument Processing Layer} % % \begin{macro}{\@nameauth@Name} % \changes{1.5}{2013/02/22}{Reversing/caps} % \changes{2.0}{2015/11/11}{Trim spaces; fix tags} % \changes{2.1}{2015/11/24}{Fix Unicode} % \changes{2.3}{2016/01/05}{Now internal} % \changes{2.4}{2016/03/15}{Set token regs} % \changes{2.41}{2016/03/17}{Fix token regs} % \changes{2.5}{2016/04/06}{Fix old syntax} % \changes{2.6}{2016/09/19}{Better indexing} % \changes{3.0}{2016/10/26}{Redesigned} % \changes{3.1}{2017/01/13}{New workflow} % \changes{3.3}{2020/02/20}{Global flag reset} % \changes{4.0}{2024/02/09}{Use \textsf{xparse}} % \Name*[Marc van]{Dongen} provided the original basic structure. % Parsing, indexing, and formatting are more modularized than % in earlier versions. % % \begin{macrocode} \NewDocumentCommand{\@nameauth@Name}{O{} m O{}} {% % \end{macrocode} % Both \cmd{\@nameauth@Name} and \cmd{\AKA} engage the % lock below, preventing a stack overflow. Tell the formatting % mechanism that it is being called from \cmd{\@nameauth@Name}. % % \begin{macrocode} \if@nameauth@BigLock \@nameauth@Locktrue\fi \unless\if@nameauth@Lock \@nameauth@Locktrue% \@nameauth@InNametrue% % \end{macrocode} % Test for malformed input. % % \begin{macrocode} \@nameauth@Error{#2}{macro \string\@nameauth@name}% % \end{macrocode} % If we use \cmd{\JustIndex} then skip everything else. % The \texttt{oldpass} option restores what we did before % version 3.3, where we locally reset \cmd{\@nameauth@JustIndexfalse} % and were done. Now, however, the default is a global reset to avoid % undocumented behavior. % % \begin{macrocode} \if@nameauth@JustIndex \IndexName[#1]{#2}[#3]% \if@nameauth@OldPass \@nameauth@JustIndexfalse% \else \if@nameauth@OldReset \@nameauth@FullNamefalse% \@nameauth@FirstNamefalse% \@nameauth@JustIndexfalse% \else \global\@nameauth@FullNamefalse% \global\@nameauth@FirstNamefalse% \global\@nameauth@JustIndexfalse% \fi \fi \else % \end{macrocode} % Create or delete name pattern if directed. Deletion has priority % because it occurs after creation. Ensure that names are printed % in horizontal mode. Wrap the name with two index entries in case % a page break occurs between them. % % \begin{macrocode} \if@nameauth@Subvert \SubvertName[#1]{#2}[#3]\fi \if@nameauth@Forget \ForgetName[#1]{#2}[#3]\fi \leavevmode\hbox{}% \unless\if@nameauth@SkipIndex \IndexName[#1]{#2}[#3]\fi \if@nameauth@MainFormat \@nameauth@Parse{#1}{#2}{#3}{!MN}% \else \@nameauth@Parse{#1}{#2}{#3}{!NF}% \fi \unless\if@nameauth@SkipIndex \IndexName[#1]{#2}[#3]\fi % \end{macrocode} % \newpage % \noindent Reset all the ``per name'' Boolean values after printing a name. % The default is global. % % \begin{macrocode} \@nameauth@Flags% \fi \@nameauth@Lockfalse% \@nameauth@InNamefalse% % \end{macrocode} % Close the ``locked'' branch and complete the full stop detection % and removal. % % \begin{macrocode} \fi \if@nameauth@Punct\expandafter\@nameauth@CheckDot\fi } % \end{macrocode} % \end{macro} % % \subsubsection*{\hfil Syntactic Element Layer} % % \begin{macro}{\@nameauth@Parse} % \changes{3.0}{2016/10/26}{Added} % \changes{3.1}{2017/01/13}{New workflow, caps} % \changes{3.2}{2017/03/22}{Fix alt. format, affixes, % use \cmd{\MakeUppercase}} % \changes{3.5}{2020/11/23}{Global token regs, optimize logic, % fix namespace} % \changes{4.1}{2025/02/04}{Name arg tokens saved elsewhere for consistency} % Parse and print a name in the text. The final required argument tells % us which name system we are in (Section~\ref{sec:NamePatterns}). % Both \cmd{\@nameauth@Name} and \cmd{\AKA} call this parser, which only % works in a locked state. % % \begin{macrocode} \newcommand\@nameauth@Parse[4] {% \if@nameauth@BigLock \@nameauth@Lockfalse\fi \if@nameauth@Lock % \end{macrocode} % If global caps. reversing, and commas are true, % set the per-name flags true. % % \begin{macrocode} \if@nameauth@AllCaps \@nameauth@AllThistrue\fi \if@nameauth@RevAll \@nameauth@RevThistrue\fi \if@nameauth@RevAllComma \@nameauth@RevThisCommatrue\fi % \end{macrocode} % Enter a local scope where we can use simple macros % without worry about name space collisions. We process % and load the arguments into the appropriate macros. % % \begin{macrocode} \begingroup% \def\@nameauth@InParser{}% \@nameauth@LoadArgs{#1}{#2}{#3}% % \end{macrocode} % Let the protected control sequences to local ones. % % \begin{macrocode} \let\arga\@nameauth@A% \let\rootb\@nameauth@B% \let\suffb\@nameauth@SB% \let\argc\@nameauth@C% % \end{macrocode} % Capitalization on demand in the body text % if not in alternate formatting. % % \begin{macrocode} \if@nameauth@DoCaps \@nameauth@CapArgs{#1}{#2}{#3}% \fi % \end{macrocode} % We capitalize the entire surname when desired; % different from above and overrides it. % % \begin{macrocode} \if@nameauth@AllThis \protected@edef\rootb% {\MakeUppercase{\@nameauth@Root{#2}}}% \fi % \end{macrocode} % Use non-breaking spaces and commas as desired. % % \begin{macrocode} \@nameauth@AddPunct% % \end{macrocode} % We attach ``meaning'' to patterns of macro arguments primarily via % \cmd{\FNN} and \cmd{\SNN}. Then we call the name printing macros % based on optional arguments. % % \begin{macrocode} \let\SNN\rootb% \@nameauth@Choice % \end{macrocode} % Non-Western names, current syntax. % We test \cmd{\argc} and \cmd{\suffb} as needed. % % \begin{macrocode} {% \ifx\argc\@empty \let\FNN\suffb% \else \let\FNN\argc% \fi \@nameauth@NonWest{\@nameauth@csb#4}% \@nameauth@MakeCS{\@nameauth@csb#4}% }% % \end{macrocode} % Non-Western names, obsolete syntax. Here \cmd{\argc} is significant. % % \begin{macrocode} {% \let\FNN\argc% \@nameauth@NonWest{\@nameauth@csbc#4}% \@nameauth@MakeCS{\@nameauth@csbc#4}% }% % \end{macrocode} % Western names. % We test for \cmd{\argc} and swap it for \cmd{\arga} and % account for \cmd{\suffb}. We allow \cmd{\ForceAffix} to % work only if if no affix exists % % \begin{macrocode} {% \ifx\argc\@empty \let\FNN\arga% \else \let\FNN\argc% \fi \ifx\suffb\@empty \@nameauth@ForceAffixfalse% \else \def\SNN{\rootb\Space\suffb}% \if@nameauth@ShortSNN \let\SNN\rootb% \fi \fi \@nameauth@West{\@nameauth@csab#4}% \@nameauth@MakeCS{\@nameauth@csab#4}% }% % \end{macrocode} % We end the local group and reset the flags for name forms here. % % \begin{macrocode} \endgroup% \if@nameauth@OldReset \@nameauth@FullNamefalse% \@nameauth@FirstNamefalse% \@nameauth@FirstFormatfalse% \else \global\@nameauth@FullNamefalse% \global\@nameauth@FirstNamefalse% \global\@nameauth@FirstFormatfalse% \fi \fi } % \end{macrocode} % \end{macro} % % \subsubsection*{\hfil Name Display Layer} % % \begin{macro}{\@nameauth@NonWest} % \changes{3.0}{2016/10/26}{Added} % \changes{3.02}{2016/11/01}{Restrict \cmd{\ForceFN}} % \changes{3.3}{2020/02/20}{global flag reset} % Arrange forms of Non-Western names. We inherit macros from % the parser and only use this macro in the local scope of the parser. % % \begin{macrocode} \newcommand*\@nameauth@NonWest[1] {% \ifdefined\@nameauth@InParser % \end{macrocode} % Toggle flags based on the name arguments. % % \begin{macrocode} \@nameauth@Form{#1}% % \end{macrocode} % Send a mononym to the hook dispatcher. % % \begin{macrocode} \ifx\FNN\@empty \@nameauth@Hook{\SNN}% \else % \end{macrocode} % Send a full name or reversed full name to the hook dispatcher. % % \begin{macrocode} \if@nameauth@FullName \if@nameauth@RevThis \@nameauth@Hook{\FNN\Space\SNN}% \else \@nameauth@Hook{\SNN\Space\FNN}% \fi \else % \end{macrocode} % Send a partial name to the hook dispatcher. % % \begin{macrocode} \if@nameauth@FirstName \if@nameauth@EastFN \@nameauth@Hook{\FNN}% \else \@nameauth@Hook{\SNN}% \fi \else \@nameauth@Hook{\SNN}% \fi \fi \fi \fi } % \end{macrocode} % \end{macro} % % \begin{macro}{\@nameauth@West} % \changes{3.0}{2016/10/26}{Added} % \changes{3.3}{2020/02/20}{global flag reset} % \changes{3.7}{2023/02/03}{always define local macros} % \changes{4.1}{2025/02/04}{Support affix-only output} % Arrange forms of Western names and ``non-native'' Eastern names. % We inherit macros from the parser and only use this macro in the % local scope of the parser. % % \begin{macrocode} \newcommand*\@nameauth@West[1] {% \ifdefined\@nameauth@InParser % \end{macrocode} % Toggle flags based on the name arguments. % % \begin{macrocode} \@nameauth@Form{#1}% \edef\RevSpace{,\SpaceW}% % \end{macrocode} % \newpage % \noindent Send a reversed full name, reversed full name with commas, % or a full name to the hook dispatcher. % % \begin{macrocode} \if@nameauth@FullName \if@nameauth@RevThis \@nameauth@Hook{\SNN\SpaceW\FNN}% \else \if@nameauth@RevThisComma \@nameauth@Hook{\SNN\RevSpace\FNN}% \else \@nameauth@Hook{\FNN\SpaceW\SNN}% \fi \fi \else % \end{macrocode} % Send only an affix to the hook dispatcher. % % \begin{macrocode} \if@nameauth@ForceAffix \@nameauth@Hook{\suffb}% \else % \end{macrocode} % Send a partial name to the hook dispatcher. % % \begin{macrocode} \if@nameauth@FirstName \@nameauth@Hook{\FNN}% \else \@nameauth@Hook{\rootb}% \fi \fi \fi \fi } % \end{macrocode} % \end{macro} % % \begin{macro}{\@nameauth@Form} % \changes{3.5}{2020/11/23}{Added} % Set up the flags per the formatting rules for first, subsequent, long, % and short uses. We only use this macro in the local scope of the parser. % % \begin{macrocode} \newcommand*\@nameauth@Form[1] {% \ifdefined\@nameauth@InParser % \end{macrocode} % If the name does not exist yet or if the \texttt{alwaysformat} option % is used, force first-use formatting, force a long name, % and inhibit a short name. % % \begin{macrocode} \unless\ifcsname#1\endcsname \@nameauth@FirstFormattrue% \@nameauth@FullNametrue% \@nameauth@FirstNamefalse% \else \if@nameauth@AlwaysFormat\@nameauth@FirstFormattrue\fi \fi % \end{macrocode} % If we are not in \cmd{\AKA}, if a short name form is desired, % inhibit a long form. % % \begin{macrocode} \unless\if@nameauth@InAKA \if@nameauth@FirstName\@nameauth@FullNamefalse\fi \else % \end{macrocode} % If we are in \cmd{\AKA} use special formatting rules. \cmd{\AKA*} % acts like \cmd{\FName}, while \cmd{\AKA} acts like \cmd{\Name*}. % Both prefer using the subsequent-use hooks unless the \texttt{formatAKA} % option or the \texttt{alwaysformat} option are used. % % \begin{macrocode} \if@nameauth@AltAKA \if@nameauth@OldAKA\@nameauth@EastFNtrue\fi \@nameauth@FullNamefalse% \@nameauth@FirstNametrue% \else \@nameauth@FullNametrue% \@nameauth@FirstNamefalse% \fi \unless\if@nameauth@AlwaysFormat \unless\if@nameauth@AKAFormat \@nameauth@FirstFormatfalse% \fi \fi \fi \fi } % \end{macrocode} % \end{macro} % % \subsubsection*{\hfil Format Hook Dispatcher} % % \begin{macro}{\@nameauth@Hook} % \changes{2.4}{2016/03/15}{Current form} % \changes{2.5}{2016/04/06}{Improve hooks} % \changes{3.0}{2016/10/26}{Fix punct. detection} % \changes{3.5}{2020/11/23}{Fix namespace} % \changes{4.1}{2025/02/04}{Ensure localized hook flag} % Boolean flags control which hook is called (first/subsequent use, % name type). We only use this macro in the local scope of the parser. % % \begin{macrocode} \newcommand*\@nameauth@Hook[1] {% \ifdefined\@nameauth@InParser % \end{macrocode} % We tell the formatting hooks that they are in the hook dispatcher % to enable alternate formatting. We test the printed name form to see % if it has a trailing full stop. The flag \texttt{\textbackslash^^A % if@nameauth@InHook} will reset outside of the local scope in % \cmd{\@nameauth@Parse}. % \begin{macrocode} \protected@edef\test{#1}% \expandafter\@nameauth@TestDot\expandafter{\test}% \if@nameauth@MainFormat % \end{macrocode} % We use the formatting hooks for the main-matter system. % % \begin{macrocode} \if@nameauth@FirstFormat \bgroup\@nameauth@InHooktrue\NamesFormat{#1}\egroup% \else \bgroup\@nameauth@InHooktrue\MainNameHook{#1}\egroup% \fi \else % \end{macrocode} % We use the formatting hooks for the front-matter system. % % \begin{macrocode} \if@nameauth@FirstFormat \bgroup\@nameauth@InHooktrue\FrontNamesFormat{#1}\egroup% \else \bgroup\@nameauth@InHooktrue\FrontNameHook{#1}\egroup% \fi \fi \fi } % \end{macrocode} % \end{macro} % % \newpage % % \subsubsection{Indexing} % % \begin{macro}{\@nameauth@Index} % \changes{0.94}{2012/02/15}{Added} % \changes{2.0}{2015/11/11}{New tagging} % \changes{3.3}{2020/02/20}{Support hyperref} % \changes{3.5}{2020/11/23}{Fix namespace} % \changes{4.1}{2025/02/04}{Fix sub-entry xrefs} % This is the core index mechanism. If the indexing flag is true, % create an index entry, otherwise do nothing. Add any tags % automatically if they exist. % % \begin{macrocode} \newcommand*\@nameauth@Index[4][\@empty] {% \if@nameauth@DoIndex \edef\@nameauth@XrefType{#1}% % \end{macrocode} % If a cross-reference will be created, its type is in the first % argument. We put that argument into a macro to evaluate it. % If an index tag exists for the entry, get it. Also create % a short version of the tag without any vertical bar or trailing macro. % If we are creating a cross-reference, use the short tag, otherwise % use the long tag. % % \begin{macrocode} \ifcsname#2!TAG\endcsname \protected@edef\@nameauth@Tag{\csname#2!TAG\endcsname}% \expandafter\def\expandafter\@nameauth@ShortTag\expandafter{% \expandafter\@nameauth@TrimTag\expandafter{\@nameauth@Tag}}% % \end{macrocode} % Set up either a page entry or an xref with both a sorting % tag and an info tag. % % \begin{macrocode} \ifcsname#2!PRE\endcsname \protected@edef\@nameauth@Pre{\csname#2!PRE\endcsname}% \ifx\@nameauth@XrefType\@empty \protected@edef\@nameauth@IdxEntry {\@nameauth@Pre#3\@nameauth@Tag}% \else \protected@edef\@nameauth@IdxEntry {\@nameauth@Pre#3\@nameauth@ShortTag|#1{#4}}% \fi \else % \end{macrocode} % Set up either a page entry or a cross-reference with an info tag. % % \begin{macrocode} \ifx\@nameauth@XrefType\@empty \protected@edef\@nameauth@IdxEntry {#3\@nameauth@Tag}% \else \protected@edef\@nameauth@IdxEntry {#3\@nameauth@ShortTag|#1{#4}}% \fi \fi \else % \end{macrocode} % Set up either a page entry or a cross-reference with a sorting tag. % % \begin{macrocode} \ifcsname#2!PRE\endcsname \protected@edef\@nameauth@Pre{\csname#2!PRE\endcsname}% \ifx\@nameauth@XrefType\@empty \protected@edef\@nameauth@IdxEntry{\@nameauth@Pre#3}% \else \protected@edef\@nameauth@IdxEntry{\@nameauth@Pre#3|#1{#4}}% \fi \else % \end{macrocode} % \newpage % \noindent Set up either a page entry or a cross-reference with no tag. % % \begin{macrocode} \ifx\@nameauth@XrefType\@empty \protected@edef\@nameauth@IdxEntry{#3}% \else \protected@edef\@nameauth@IdxEntry{#3|#1{#4}}% \fi \fi \fi % \end{macrocode} % Create the index entry. % % \begin{macrocode} \expandafter\NameauthIndex\expandafter{\@nameauth@IdxEntry}% \fi } % \end{macrocode} % \end{macro} % % \subsection[User Macros: Prefix]{For Users: Prefix Macros} % \label{sec:PrefixMacs} % % Prefix macros precede a particular name (or xref) to affect % only that name. % % \subsubsection[Syntax]{Name Syntax} % % \subsubsection*{\hfil Commas Before Affixes} % % \begin{macro}{\ShowComma} % \changes{1.4}{2012/07/24}{Added} % Put comma between name and suffix one time. % % \begin{macrocode} \newcommand*\ShowComma{\@nameauth@ShowCommatrue} % \end{macrocode} % \end{macro} % % \begin{macro}{\NoComma} % \changes{2.6}{2016/09/19}{Added} % Remove comma between name and suffix one time % (with \texttt{comma} option). % % \begin{macrocode} \newcommand*\NoComma{\@nameauth@NoCommatrue} % \end{macrocode} % \end{macro} % % \subsubsection*{\hfil Capitalization} % % \begin{macro}{\CapThis} % \changes{0.94}{2012/02/15}{Added} % Tells the root capping macro to cap the first character % of all name elements. % % \begin{macrocode} \newcommand*\CapThis{\@nameauth@DoCapstrue} % \end{macrocode} % \end{macro} % % \begin{macro}{\AccentCapThis} % \changes{2.1}{2015/11/24}{Added} % Overrides the automatic test for active Unicode characters; a fallback. % % \begin{macrocode} \newcommand*\AccentCapThis {\@nameauth@Accenttrue\@nameauth@DoCapstrue} % \end{macrocode} % \end{macro} % % \begin{macro}{\CapName} % \changes{1.5}{2013/02/22}{Added} % Capitalize entire \meta{SNN}. Overrides \cmd{\CapThis} for surnames. % % \begin{macrocode} \newcommand*\CapName{\@nameauth@AllThistrue} % \end{macrocode} % \end{macro} % % \subsubsection*{\hfil Reversing and Name Parts} % % \begin{macro}{\RevName} % \changes{1.5}{2013/02/22}{Added} % Reverse name order. % % \begin{macrocode} \newcommand*\RevName{\@nameauth@RevThistrue} % \end{macrocode} % \end{macro} % % \begin{macro}{\ForceFN} % \changes{3.0}{2016/10/26}{Added} % Force the printing of an Eastern forename or ancient affix % in the text, but only when using the ``short name'' macro % \cmd{\FName} and the \cmd{\S}\meta{macro}. % % \begin{macrocode} \newcommand*\ForceFN{\@nameauth@EastFNtrue} % \end{macrocode} % \end{macro} % % \subsubsection*{\hfil Reversing with Commas} % % \begin{macro}{\RevComma} % \changes{1.5}{2013/02/22}{Added} % Last name, comma, first name. % % \begin{macrocode} \newcommand*\RevComma{\@nameauth@RevThisCommatrue} % \end{macrocode} % \end{macro} % % \subsubsection*{\hfil Affixes and Breaking} % % \begin{macro}{\ForceAffix} % \changes{4.1}{2025/02/04}{Added} % Force the printing of just the affix of a short Western name % in the text. % % \begin{macrocode} \newcommand*\ForceAffix{\@nameauth@ForceAffixtrue} % \end{macrocode} % \end{macro} % % \begin{macro}{\DropAffix} % \changes{3.0}{2016/10/26}{Added} % Suppress printing the affix of a long Western name. % % \begin{macrocode} \newcommand*\DropAffix{\@nameauth@ShortSNNtrue} % \end{macrocode} % \end{macro} % % \begin{macro}{\KeepAffix} % \changes{1.9}{2015/07/09}{Added} % Bind a name-affix pair with a non-breaking space. % % \begin{macrocode} \newcommand*\KeepAffix{\@nameauth@NBSPtrue} % \end{macrocode} % \end{macro} % % \begin{macro}{\KeepName} % \changes{3.1}{2017/01/13}{Added} % Use non-breaking spaces between name syntactic forms. % % \begin{macrocode} \newcommand*\KeepName {\@nameauth@NBSPtrue\@nameauth@NBSPXtrue} % \end{macrocode} % \end{macro} % % \subsubsection{Indexing} % % \begin{macro}{\SkipIndex} % \changes{3.1}{2017/01/13}{Added} % Turn off the next instance of indexing in \cmd{\Name}, % \cmd{\FName}, and starred forms. % % \begin{macrocode} \newcommand*\SkipIndex{\@nameauth@SkipIndextrue} % \end{macrocode} % \end{macro} % % \begin{macro}{\JustIndex} % \changes{3.1}{2017/01/13}{Added} % Makes the next call to \cmd{\Name}, \cmd{\FName}, % and starred forms act like \cmd{\IndexName}. % Overrides \cmd{\SkipIndex}. % % \begin{macrocode} \newcommand*\JustIndex{\@nameauth@JustIndextrue} % \end{macrocode} % \end{macro} % % \begin{macro}{\SeeAlso} % \changes{3.0}{2016/10/26}{Added} % Change the type of cross-reference from a \textit{see} % reference to a \textit{see also} reference. Works once % per xref, unless one uses \cmd{\Include*}. % % \begin{macrocode} \newcommand*\SeeAlso{\@nameauth@SeeAlsotrue} % \end{macrocode} % \end{macro} % % \subsubsection[Format/Decisions]{Formatting and Name Decisions} % % \begin{macro}{\ForceName} % \changes{3.1}{2017/01/13}{Added} % Set \cmd{\@nameauth@FirstFormat} to be true even for % subsequent name uses. Makes the core name engine use % \cmd{\NamesFormat}. Works for one name only. % % \begin{macrocode} \newcommand*\ForceName{\@nameauth@FirstFormattrue} % \end{macrocode} % \end{macro} % % \begin{macro}{\ForgetThis} % \changes{3.1}{2017/01/13}{Added} % Have the naming engine \cmd{\@nameauth@Name} % call \cmd{\ForgetName} internally. % % \begin{macrocode} \newcommand*\ForgetThis{\@nameauth@Forgettrue} % \end{macrocode} % \end{macro} % % \begin{macro}{\SubvertThis} % \changes{3.1}{2017/01/13}{Added} % Have the naming engine \cmd{\@nameauth@Name} % call \cmd{\SubvertName} internally. % % \begin{macrocode} \newcommand*\SubvertThis{\@nameauth@Subverttrue} % \end{macrocode} % \end{macro} % % \TOCbreak % \subsection[User Macros: Helpers]{For Users: Helper Macros} % \label{sec:Helpers} % % Helper macros do not need to precede a particular name and their effects % endure for multiple names. They tend to affect an entire scope % and usually come in pairs. % % \subsubsection[Syntax]{Name Syntax} % % \subsubsection*{\hfil Capitalization} % % \begin{macro}{\AllCapsInactive} % Turn off global surname capitalization. % \changes{1.5}{2013/02/22}{Added} % % \begin{macrocode} \newcommand*\AllCapsInactive{\@nameauth@AllCapsfalse} % \end{macrocode} % \end{macro} % % \begin{macro}{\AllCapsActive} % \changes{1.5}{2013/02/22}{Added} % Turn on global surname capitalization. % Activates \cmd{\CapName} for every name. % % \begin{macrocode} \newcommand*\AllCapsActive{\@nameauth@AllCapstrue} % \end{macrocode} % \end{macro} % % \subsubsection*{\hfil Reversing} % % \begin{macro}{\ReverseInactive} % Turn off global name reversing. % \changes{1.5}{2013/02/22}{Added} % % \begin{macrocode} \newcommand*\ReverseInactive{\@nameauth@RevAllfalse} % \end{macrocode} % \end{macro} % % \begin{macro}{\ReverseActive} % \changes{1.5}{2013/02/22}{Added} % Turn on global name reversing. % Activates \cmd{\RevName} for every name. % % \begin{macrocode} \newcommand*\ReverseActive{\@nameauth@RevAlltrue} % \end{macrocode} % \end{macro} % % \subsubsection*{\hfil Reversing with Commas} % % \begin{macro}{\ReverseCommaInactive} % \changes{1.5}{2013/02/22}{Added} % Turn off global ``last-name-comma-first''. % % \begin{macrocode} \newcommand*\ReverseCommaInactive{\@nameauth@RevAllCommafalse} % \end{macrocode} % \end{macro} % % \begin{macro}{\ReverseCommaActive} % \changes{1.5}{2013/02/22}{Added} % Turn on global ``last-name-comma-first''. % Activates \cmd{\RevComma} for every name. The macro % \cmd{\ReverseActive} takes priority over this macro. % % \begin{macrocode} \newcommand*\ReverseCommaActive{\@nameauth@RevAllCommatrue} % \end{macrocode} % \end{macro} % % \subsubsection{Indexing} % % \begin{macro}{\IndexActual} % \changes{2.0}{2015/11/11}{Added} % \changes{3.5}{2020/11/23}{Use \cmd{\def}} % Change the ``actual'' character from the default. % This allows one to use, for example, % |\global\IndexActual{=}| in \texttt{dtx} files. % % \begin{macrocode} \newcommand*\IndexActual[1]{\def\@nameauth@Actual{#1}} % \end{macrocode} % \end{macro} % % \begin{macro}{\IndexInactive} % \changes{0.94}{2012/02/15}{Added} % Turn off global indexing of names. % % \begin{macrocode} \newcommand*\IndexInactive{\@nameauth@DoIndexfalse} % \end{macrocode} % \end{macro} % % \begin{macro}{\IndexActive} % \changes{0.94}{2012/02/15}{Added} % Turn on global indexing of names. % % \begin{macrocode} \newcommand*\IndexActive{\@nameauth@DoIndextrue} % \end{macrocode} % \end{macro} % % \begin{macro}{\IndexWarnVerbose} % \changes{3.7}{2023/02/03}{Added} % Turn on verbose warnings for indexing. % % \begin{macrocode} \newcommand*\IndexWarnVerbose{\@nameauth@Verbosetrue} % \end{macrocode} % \end{macro} % % \begin{macro}{\IndexWarnTerse} % \changes{3.7}{2023/02/03}{Added} % Turn off verbose warnings for indexing. % % \begin{macrocode} \newcommand*\IndexWarnTerse{\@nameauth@Verbosefalse} % \end{macrocode} % \end{macro} % % \begin{macro}{\IndexProtect} % \changes{3.3}{2020/02/20}{Added} % We shut down all output from the naming and indexing macros % to protect against problems in the index in case a macro in the % index contains one of the naming macros. This macro is deliberately % local, so one can use scoping to isolate its effects. % % \begin{macrocode} \newcommand*\IndexProtect {\@nameauth@DoIndexfalse\@nameauth@BigLocktrue} % \end{macrocode} % \end{macro} % % \subsubsection{Formatting} % % \begin{macro}{\NamesInactive} % Switch to the front-matter name system. % % \begin{macrocode} \newcommand*\NamesInactive{\@nameauth@MainFormatfalse} % \end{macrocode} % \end{macro} % % \begin{macro}{\NamesActive} % Switch to the main-matter name system. % % \begin{macrocode} \newcommand*\NamesActive{\@nameauth@MainFormattrue} % \end{macrocode} % \end{macro} % % \subsubsection[Alternate Format]{Alternate Formatting} % \label{sec:AltFmtMacros} % % \begin{macro}{\AltFormatActive} % \changes{3.1}{2017/01/13}{Added} % \changes{4.0}{2024/02/09}{Combine starred, un-starred macros} % \begin{macro}{\AltFormatActive*}\end{macro}\vspace{-2.7ex} % \noindent Turn on alternate formatting and % disengage the formatting macros if using the starred form or % engage the formatting macros if using the un-starred form. % % \begin{macrocode} \NewDocumentCommand{\AltFormatActive}{s} {% \global\@nameauth@AltFormattrue% \IfBooleanTF{#1} {\global\@nameauth@DoAltfalse} {\global\@nameauth@DoAlttrue}% } % \end{macrocode} % \end{macro} % % \begin{macro}{\AltFormatInactive} % \changes{3.1}{2017/01/13}{Added} % Turn off alternate formatting altogether. % % \begin{macrocode} \newcommand*\AltFormatInactive {\global\@nameauth@AltFormatfalse\global\@nameauth@DoAltfalse} % \end{macrocode} % \end{macro} % % \begin{environment}{AltFormatZone} % \changes{4.1}{2025/02/04}{Added} % We enable alternate formatting in its active (on) state. % % \begin{macrocode} \newenvironment{AltFormatZone} {\AltFormatActive\begingroup\def\@nameauth@InZone{}\ignorespaces} {\endgroup\AltFormatInactive\ignorespacesafterend} % \end{macrocode} % \end{environment} % % \begin{environment}{AltFormatZone*} % \changes{4.1}{2025/02/04}{Added} % We enable alternate formatting in its inactive (off) state. % % \begin{macrocode} \newenvironment{AltFormatZone*} {\AltFormatActive*\begingroup\def\@nameauth@InZone{}\ignorespaces} {\endgroup\AltFormatInactive\ignorespacesafterend} % \end{macrocode} % \end{environment} % % \begin{macro}{\FixateFormat} % \changes{4.1}{2025/02/04}{Added} % Redefine alternate formatting switches to do nothing only within % the environments above. The user must choose to invoke this macro. % % \begin{macrocode} \newcommand{\FixateFormat} {% \ifdefined\@nameauth@InZone \RenewDocumentCommand{\AltFormatActive}{s}{}% \renewcommand\AltFormatInactive{}% \fi } % \end{macrocode} % \end{macro} % % \begin{macro}{\AltOn} % Locally turn on alternate formatting. % \changes{3.1}{2017/01/13}{Added} % % \begin{macrocode} \newcommand*\AltOn {% \if@nameauth@InHook \if@nameauth@AltFormat\@nameauth@DoAlttrue\fi \fi } % \end{macrocode} % \end{macro} % % \begin{macro}{\AltOff} % Locally turn off alternate formatting. % \changes{3.1}{2017/01/13}{Added} % % \begin{macrocode} \newcommand*\AltOff {% \if@nameauth@InHook \if@nameauth@AltFormat\@nameauth@DoAltfalse\fi \fi } % \end{macrocode} % \end{macro} % % \begin{macro}{\AltCaps} % \changes{3.1}{2017/01/13}{Added} % \changes{3.2}{2017/03/22}{Use \cmd{\MakeUppercase}} % Alternate discretionary capping macro triggered by \cmd{\CapThis}. % % \begin{macrocode} \newcommand*\AltCaps[1] {% \if@nameauth@InHook \if@nameauth@DoCaps\MakeUppercase{#1}\else#1\fi \else #1% \fi } % \end{macrocode} % \end{macro} % % \begin{macro}{\textSC} % \changes{3.1}{2017/01/13}{Added} % \changes{4.1}{2025/02/04}{Two font switches avoid warnings} % Alternate formatting macro: small caps when active. Change % first to roman, then small caps, to avoid font warning. % % \begin{macrocode} \newcommand*\textSC[1] {\if@nameauth@DoAlt{\rmfamily\textsc{#1}}\else#1\fi} % \end{macrocode} % \end{macro} % % \begin{macro}{\textUC} % \changes{3.1}{2017/01/13}{Added} % \changes{3.2}{2017/03/22}{Use \cmd{\MakeUppercase}} % Alternate formatting macro: uppercase when active. % % \begin{macrocode} \newcommand*\textUC[1] {\if@nameauth@DoAlt\MakeUppercase{#1}\else#1\fi} % \end{macrocode} % \end{macro} % % \begin{macro}{\textIT} % \changes{3.1}{2017/01/13}{Added} % Alternate formatting macro: italic when active. % % \begin{macrocode} \newcommand*\textIT[1] {\if@nameauth@DoAlt\textit{#1}\else#1\fi} % \end{macrocode} % \end{macro} % % \begin{macro}{\textBF} % \changes{3.1}{2017/01/13}{Added} % Alternate formatting macro: boldface when active. % % \begin{macrocode} \newcommand*\textBF[1] {\if@nameauth@DoAlt\textbf{#1}\else#1\fi} % \end{macrocode} % \end{macro} % % \subsubsection{Name Decisions} % % \begin{macro}{\LocalNameTest} % \changes{3.5}{2020/11/23}{Added} % Causes decision paths in the name decision macros to be in a local scope. % % \begin{macrocode} \newcommand*\LocalNameTest{\global\@nameauth@GlobalScopefalse} % \end{macrocode} % \end{macro} % % \begin{macro}{\GlobalNameTest} % \changes{3.5}{2020/11/23}{Added} % Causes decision paths in the name decision macros to have no scoping. % % \begin{macrocode} \newcommand*\GlobalNameTest{\global\@nameauth@GlobalScopetrue} % \end{macrocode} % \end{macro} % % \begin{macro}{\LocalNames} % \changes{2.3}{2016/01/05}{Added} % \changes{2.4}{2016/03/15}{Ensure global} % \cmd{\LocalNames} sets |@nameauth@LocalNames| true so \cmd{\ForgetName} % and \cmd{\SubvertName} do not affect both main and front matter % name systems, only the current one. % % \begin{macrocode} \newcommand*\LocalNames{\global\@nameauth@LocalNamestrue} % \end{macrocode} % \end{macro} % % \begin{macro}{\GlobalNames} % \changes{2.3}{2016/01/05}{Added} % \changes{2.4}{2016/03/15}{Ensure global} % \cmd{\GlobalNames} restores the default behavior of \cmd{\ForgetName} % and \cmd{\SubvertName}, which affects both name systems at once. % % \begin{macrocode} \newcommand*\GlobalNames{\global\@nameauth@LocalNamesfalse} % \end{macrocode} % \end{macro} % % \subsubsection[Name Parser]{User-Accessible Name Parser} % \label{sec:NameParser} % % \begin{macro}{\NameParser} % \changes{3.0}{2016/10/26}{Added} % \changes{3.03}{2016/11/01}{Restrict first names} % \changes{3.1}{2017/01/13}{Fix old syntax; add NBSP} % \changes{3.2}{2017/03/22}{Fix alt. format, affixes} % \changes{3.5}{2020/11/23}{Optimize logic} % \changes{4.1}{2025/02/04}{Support affix-only output; allow empty output} % Print a name form based on the current state of the % \textsf{nameauth} flags in the locked path. Used only % in the hook macros, within the local scope of \cmd{\@nameauth@Parse}. % We \cmd{\let} values to \cmd{\FNN} and \cmd{\SNN} not to % be efficient but to be pedantic. Sometimes, the attempt to % short-circuit parser logic will seem to work, only for a case % to emerge that breaks things. Being pedantic reduces that risk, % even if it is slower at times. % % \begin{macrocode} \newcommand*\NameParser {% \if@nameauth@InHook \let\SNN\rootb% \@nameauth@Choice % \end{macrocode} % Non-Western names. % We test both \cmd{\argc} and \cmd{\suffb} as needed. % % \begin{macrocode} {% \ifx\argc\@empty \let\FNN\suffb \else \let\FNN\argc \fi \ifx\FNN\@empty \unless\if@nameauth@FirstName \SNN \fi \else \if@nameauth@FullName \if@nameauth@RevThis \FNN\Space\SNN \else \SNN\Space\FNN \fi \else \if@nameauth@FirstName \if@nameauth@EastFN \FNN \else \SNN \fi \else \SNN% \fi \fi \fi }% % \end{macrocode} % Non-Western names, obsolete syntax. % Using \cmd{\argc} in this path affects indexing. % % \begin{macrocode} {% \let\FNN\argc% \if@nameauth@FullName% \if@nameauth@RevThis \FNN\Space\SNN \else \SNN\Space\FNN \fi \else \if@nameauth@FirstName \if@nameauth@EastFN \FNN \else \SNN \fi \else \SNN% \fi \fi }% % \end{macrocode} % Western names. % We test for \cmd{\argc} and swap it for \cmd{\arga}, % and account for \cmd{\suffb}. % % \begin{macrocode} {% \ifx\argc\@empty \let\FNN\arga \else \let\FNN\argc \fi \unless\ifx\suffb\@empty \def\SNN{\rootb\Space\suffb}% \if@nameauth@ShortSNN \let\SNN\rootb \fi \fi \if@nameauth@FullName \if@nameauth@RevThis \SNN\SpaceW\FNN% \else \if@nameauth@RevThisComma \SNN\RevSpace\FNN% \else \FNN\SpaceW\SNN% \fi \fi \else \if@nameauth@ForceAffix \let\SNN\suffb \SNN% \else \if@nameauth@FirstName \FNN% \else \let\SNN\rootb \SNN% \fi \fi \fi }% \fi } % \end{macrocode} % \end{macro} % % \subsection[User Macros: Name Args]{For Users: Macros That Take Name Arguments} % \label{sec:UserInterface} % % The rest of the \textsf{nameauth} macros all take name arguments. They all % update \cmd{\NameauthPattern}, \texttt{\textbackslash ifNameauthWestern}, % and \texttt{\textbackslash ifNameauthObsolete} when called. The file % \texttt{examples.tex} iterates through all possible argument variations of % these macros except the debugging macros, the non-printing arguments of % \cmd{\AKA}, and \cmd{\PName}. It thus tests for spurious spaces and % bad output. % % \subsubsection{Basic Interface} % % \begin{macro}{\Name} % \changes{4.0}{2024/02/09}{Combine starred, un-starred macros} % \begin{macro}{\Name*}\end{macro}\vspace{-2.7ex} % \noindent \cmd{\Name} calls \cmd{\NameauthName}, the interface hook, printing % a long name and calling \cmd{\NameauthLName} when using the starred form. % % \begin{macrocode} \NewDocumentCommand{\Name}{s} {% \IfBooleanTF{#1} {\@nameauth@FullNametrue\NameauthLName} {\NameauthName}% } % \end{macrocode} % \end{macro} % % \begin{macro}{\FName} % \changes{0.9}{2012/02/10}{Added} % \changes{4.0}{2024/02/09}{Combine starred, un-starred macros} % \begin{macro}{\FName*}\end{macro}\vspace{-2.7ex} % \noindent \cmd{\FName} sets up a short name instance and calls \cmd{\NameauthFName}, % the interface hook. Its starred form is identical in function. % % \begin{macrocode} \NewDocumentCommand{\FName}{s} {\@nameauth@FirstNametrue\NameauthFName} % \end{macrocode} % \end{macro} % % \subsubsection{Quick Interface} % % \begin{environment}{nameauth} % \changes{1.6}{2013/03/10}{Environment added} % \changes{2.0}{2015/11/11}{Better arg handling} % \changes{2.41}{2016/03/17}{No local \cmd{\newtoks}} % \changes{3.5}{2020/11/23}{Fix namespace} % \changes{3.7}{2023/02/03}{Improve warnings} % \changes{4.1}{2025/02/04}{Better at ignoring spaces} % % Here we create macro shorthands. First we define a macro \cmd{\<} that % takes four arguments, delimited by three ampersands and \texttt{>}. % This macro is local to the \texttt{nameauth} environment, % but the shorthand macros that it creates are global. % % \begin{macrocode} \newenvironment{nameauth} {% \begingroup% \let\ex\expandafter% \csdef{<}##1&##2&##3&##4>% {% \protected@edef\@arga@{\trim@spaces{##1}}% \protected@edef\@larga@{L\trim@spaces{##1}}% \protected@edef\@sarga@{S\trim@spaces{##1}}% \protected@edef\@testb@{\trim@spaces{##2}}% \protected@edef\@testd@{\trim@spaces{##4}}% \@nameauth@etoksb\ex{##2}% \@nameauth@etoksc\ex{##3}% \@nameauth@etoksd\ex{##4}% % \end{macrocode} % The first argument must have some text to create a set of control % sequences with it. The third argument is the required name argument. % Lacking either will produce an error. % Redefining a shorthand only creates a warning. % % \begin{macrocode} \ifx\@arga@\@empty \PackageError{nameauth}% {environment nameauth: Macro name missing; \expandafter\detokenize\expandafter{##3}}% \fi \@nameauth@Error{##3}{macro \ex\zap@space\string\ \@empty##1}% \ifcsname\@arga@\endcsname \PackageWarning{nameauth} {Environment nameauth: shorthand macro already exists}% \fi % \end{macrocode} % Set up shorthands according to name form. We use \cmd{\expandafter} % due to \cmd{\protected@edef} in the naming macros. We begin with % Non-Western names that use the new syntax. % % \begin{macrocode} \ifx\@testd@\@empty \ifx\@testb@\@empty % \end{macrocode} % Standard name: % % \begin{macrocode} \ex\csgdef\ex{\ex\@arga@\ex}% \ex{\ex\NameauthName\ex{\the\@nameauth@etoksc}}% % \end{macrocode} % Long name: % % \begin{macrocode} \ex\csgdef\ex{\ex\@larga@\ex}% \ex{\ex\@nameauth@FullNametrue% \ex\NameauthLName\ex{\the\@nameauth@etoksc}}% % \end{macrocode} % Short name: % % \begin{macrocode} \ex\csgdef\ex{\ex\@sarga@\ex}% \ex{\ex\@nameauth@FirstNametrue% \ex\NameauthFName\ex{\the\@nameauth@etoksc}}% \else % \end{macrocode} % Next we have Western names with no alternate names. % Here we have two arguments to expand in reverse order, % so we need three uses, then one use of \cmd{\ex} per token. % \medskip % % \noindent Standard name: % \begin{macrocode} \ex\ex\ex\csgdef\ex\ex\ex{\ex\ex\ex\@arga@\ex\ex\ex}% \ex\ex\ex{\ex\ex\ex\NameauthName% \ex\ex\ex[\ex\the\ex\@nameauth@etoksb\ex]% \ex{\the\@nameauth@etoksc}}% % \end{macrocode} % Long name: % % \begin{macrocode} \ex\ex\ex\csgdef\ex\ex\ex{\ex\ex\ex\@larga@\ex\ex\ex}% \ex\ex\ex{\ex\ex\ex\@nameauth@FullNametrue% \ex\ex\ex\NameauthLName% \ex\ex\ex[\ex\the\ex\@nameauth@etoksb\ex]% \ex{\the\@nameauth@etoksc}}% % \end{macrocode} % Short name: % % \begin{macrocode} \ex\ex\ex\csgdef\ex\ex\ex{\ex\ex\ex\@sarga@\ex\ex\ex}% \ex\ex\ex{\ex\ex\ex\@nameauth@FirstNametrue% \ex\ex\ex\NameauthFName% \ex\ex\ex[\ex\the\ex\@nameauth@etoksb\ex]% \ex{\the\@nameauth@etoksc}}% \fi \else % \end{macrocode} % Below are ``native'' Eastern names with alternates or % the older syntax. We again have two arguments to expand first. % % \medskip % % \noindent Standard name: % \begin{macrocode} \ifx\@testb@\@empty \ex\ex\ex\csgdef\ex\ex\ex{\ex\ex\ex\@arga@\ex\ex\ex}% \ex\ex\ex{\ex\ex\ex\NameauthName% \ex\ex\ex{\ex\the\ex\@nameauth@etoksc\ex}% \ex[\the\@nameauth@etoksd]}% % \end{macrocode} % Long name: % % \begin{macrocode} \ex\ex\ex\csgdef\ex\ex\ex{\ex\ex\ex\@larga@\ex\ex\ex}% \ex\ex\ex{\ex\ex\ex\@nameauth@FullNametrue% \ex\ex\ex\NameauthLName% \ex\ex\ex{\ex\the\ex\@nameauth@etoksc\ex}% \ex[\the\@nameauth@etoksd]}% % \end{macrocode} % Short name: % % \begin{macrocode} \ex\ex\ex\csgdef\ex\ex\ex{\ex\ex\ex\@sarga@\ex\ex\ex}% \ex\ex\ex{\ex\ex\ex\@nameauth@FirstNametrue% \ex\ex\ex\NameauthFName% \ex\ex\ex{\ex\the\ex\@nameauth@etoksc\ex}% \ex[\the\@nameauth@etoksd]}% \else % \end{macrocode} % Here are Western names with alternates. We have three arguments % to expand, so we have seven uses, three uses, and one use of \cmd{\ex}. % % \medskip % % \noindent Standard name: % \begin{macrocode} \ex\ex\ex\ex\ex\ex\ex\csgdef\ex\ex\ex\ex\ex\ex\ex{% \ex\ex\ex\ex\ex\ex\ex\@arga@\ex\ex\ex\ex\ex\ex\ex}% \ex\ex\ex\ex\ex\ex\ex{\ex\ex\ex\ex\ex\ex\ex\NameauthName% \ex\ex\ex\ex\ex\ex\ex[\ex\ex\ex\the% \ex\ex\ex\@nameauth@etoksb\ex\ex\ex]% \ex\ex\ex{\ex\the\ex\@nameauth@etoksc\ex}% \ex[\the\@nameauth@etoksd]}% % \end{macrocode} % Long name: % % \begin{macrocode} \ex\ex\ex\ex\ex\ex\ex\csgdef\ex\ex\ex\ex\ex\ex\ex{% \ex\ex\ex\ex\ex\ex\ex\@larga@\ex\ex\ex\ex\ex\ex\ex}% \ex\ex\ex\ex\ex\ex\ex{% \ex\ex\ex\ex\ex\ex\ex\@nameauth@FullNametrue% \ex\ex\ex\ex\ex\ex\ex\NameauthLName% \ex\ex\ex\ex\ex\ex\ex[\ex\ex\ex\the\ex\ex\ex% \@nameauth@etoksb\ex\ex\ex]% \ex\ex\ex{\ex\the\ex\@nameauth@etoksc\ex}% \ex[\the\@nameauth@etoksd]}% % \end{macrocode} % Short name: % % \begin{macrocode} \ex\ex\ex\ex\ex\ex\ex\csgdef\ex\ex\ex\ex\ex\ex\ex{% \ex\ex\ex\ex\ex\ex\ex\@sarga@\ex\ex\ex\ex\ex\ex\ex}% \ex\ex\ex\ex\ex\ex\ex{% \ex\ex\ex\ex\ex\ex\ex\@nameauth@FirstNametrue% \ex\ex\ex\ex\ex\ex\ex\NameauthFName% \ex\ex\ex\ex\ex\ex\ex[\ex\ex\ex\the\ex\ex\ex% \@nameauth@etoksb\ex\ex\ex]% \ex\ex\ex{\ex\the\ex\@nameauth@etoksc\ex}% \ex[\the\@nameauth@etoksd]}% \fi \fi\ignorespaces% }\ignorespaces% } {\endgroup\ignorespacesafterend} % \end{macrocode} % \end{environment} % % \subsubsection{Debugging Macros} % % \begin{macro}{\ShowPattern} % \changes{3.3}{2020/02/20}{Added} % \changes{3.7}{2023/02/03}{Redesigned} % \changes{4.0}{2024/02/09}{Use \textsf{xparse}} % \changes{4.1}{2025/02/04}{Allow null args} % This macro shows a name pattern created by its arguments, unless % invoked with an empty argument. Then it returns \cmd{\NameauthPattern} % from the last name arguments that were evaluated. % % \begin{macrocode} \NewDocumentCommand{\ShowPattern}{O{} m O{}} {% \protected@edef\@nameauth@testname{\trim@spaces{#2}}% \unless\ifx\@nameauth@testname\@empty \@nameauth@Error{#2}{macro \string\ShowPattern}% \@nameauth@LoadArgs{#1}{#2}{#3}% \@nameauth@Choice{}{}{}\NameauthPattern% \else\NameauthPattern\fi } % \end{macrocode} % \end{macro} % % \begin{macro}{\ShowIdxPageref} % \changes{3.3}{2020/02/20}{Added} % \changes{3.5}{2020/11/23}{Fix name space, use Boolean flags} % \changes{3.7}{2023/02/03}{Use common back-end} % \changes{4.0}{2024/02/09}{Combine starred, un-starred macros} % \changes{4.1}{2025/02/04}{Allow null args} % \begin{macro}{\ShowIdxPageref*}\end{macro}\vspace{-2.7ex} % \noindent Show an index page entry appearance for the given % name arguments or, if a null argument is given, show an entry % for the name arguments in the token registers. % \begin{macrocode} \NewDocumentCommand{\ShowIdxPageref}{s O{} m O{}} {% \begingroup% \let\ex\expandafter% \IfBooleanTF {#1}% % \end{macrocode} % The starred form displays a basic index entry with no tag. % % \begin{macrocode} {% \protected@edef\@nameauth@testname{\trim@spaces{#3}}% \unless\ifx\@nameauth@testname\@empty \@nameauth@Error{#3}{macro \string\ShowIdxPageref*}% \@nameauth@LoadArgs{#2}{#3}{#4}% \@nameauth@IdxPageref{#2}{#3}{#4}% \else % \end{macrocode} % Pull name arguments from the token regs. % % \begin{macrocode} \ex\ex\ex\ex\ex\ex\ex\@nameauth@LoadArgs% \ex\ex\ex\ex\ex\ex\ex{% \ex\ex\ex\the\ex\ex\ex\@nameauth@toksa\ex\ex\ex}% \ex\ex\ex{\ex\the\ex\@nameauth@toksb\ex}% \ex{\the\@nameauth@toksc}% \ex\ex\ex\ex\ex\ex\ex\@nameauth@IdxPageref% \ex\ex\ex\ex\ex\ex\ex{% \ex\ex\ex\the\ex\ex\ex\@nameauth@toksa\ex\ex\ex}% \ex\ex\ex{\ex\the\ex\@nameauth@toksb\ex}% \ex{\the\@nameauth@toksc}% \fi }% % \end{macrocode} % The un-starred form displays (expanded, as printed) the index % entry that will be generated, but not exactly what is in the % \texttt{idx} file. % % \begin{macrocode} {% \global\@nameauth@LongIdxDebugtrue% \protected@edef\@nameauth@testname{\trim@spaces{#3}}% \unless\ifx\@nameauth@testname\@empty \@nameauth@Error{#3}{macro \string\ShowIdxPageref}% \@nameauth@LoadArgs{#2}{#3}{#4}% \@nameauth@IdxPageref{#2}{#3}{#4}% \else % \end{macrocode} % Pull name arguments from the token regs. % % \begin{macrocode} \ex\ex\ex\ex\ex\ex\ex\@nameauth@LoadArgs% \ex\ex\ex\ex\ex\ex\ex{% \ex\ex\ex\the\ex\ex\ex\@nameauth@toksa\ex\ex\ex}% \ex\ex\ex{\ex\the\ex\@nameauth@toksb\ex}% \ex{\the\@nameauth@toksc}% \ex\ex\ex\ex\ex\ex\ex\@nameauth@IdxPageref% \ex\ex\ex\ex\ex\ex\ex{% \ex\ex\ex\the\ex\ex\ex\@nameauth@toksa\ex\ex\ex}% \ex\ex\ex{\ex\the\ex\@nameauth@toksb\ex}% \ex{\the\@nameauth@toksc}% \fi }% \endgroup% } % \end{macrocode} % \end{macro} % % \begin{macro}{\ShowNameInfo} % \changes{3.7}{2023/02/03}{Added} % \changes{4.0}{2024/02/09}{Use \textsf{xparse}} % \changes{4.1}{2025/02/04}{Allow null args} % Show how the name arguments are interpreted by the \textsf{nameauth} % macros, but as detokenized text. If a null argument is given, use the % arguments in the token regs, left from the last name evaluated. % The starred form puts the separate data on different lines. % % \begin{macrocode} \NewDocumentCommand{\ShowNameInfo}{O{} m O{}} {% \begingroup% \let\ex\expandafter% % \end{macrocode} % Test for bad input, then load the argument values into % the appropriate macros. % % \begin{macrocode} \protected@edef\@nameauth@testname{\trim@spaces{#2}}% \unless\ifx\@nameauth@testname\@empty \@nameauth@Error{#2}{macro \string\ShowNameInfo}% \@nameauth@LoadArgs{#1}{#2}{#3}% \else % \end{macrocode} % In the case of a null argument, % load name arguments from the token regs. % % \begin{macrocode} \ex\ex\ex\ex\ex\ex\ex\@nameauth@LoadArgs% \ex\ex\ex\ex\ex\ex\ex{% \ex\ex\ex\the\ex\ex\ex\@nameauth@toksa\ex\ex\ex}% \ex\ex\ex{\ex\the\ex\@nameauth@toksb\ex}% \ex{\the\@nameauth@toksc}% \fi \protected@edef\@nameauth@cleanA {\expandafter\detokenize\expandafter{\@nameauth@A}}% \protected@edef\@nameauth@cleanB {\expandafter\detokenize\expandafter{\@nameauth@B}}% \protected@edef\@nameauth@cleanSB {\expandafter\detokenize\expandafter{\@nameauth@SB}}% \protected@edef\@nameauth@cleanC {\expandafter\detokenize\expandafter{\@nameauth@C}}% % \end{macrocode} % First we have Non-Western names using the current syntax. % % \begin{macrocode} \@nameauth@Choice {% (SNN: \@nameauth@cleanB)% \unless\ifx\@nameauth@SB\@empty \ (Affix*: \@nameauth@cleanSB)% \fi \unless\ifx\@nameauth@C\@empty \ (Alt: \@nameauth@cleanC)% \fi }% % \end{macrocode} % Next is Non-Western names using the obsolete syntax. % % \begin{macrocode} {% (SNN: \@nameauth@cleanB)% \unless\ifx\@nameauth@C\@empty \ (Alt*: \@nameauth@cleanC)% \fi }% % \end{macrocode} % Finally we have Western names. % % \begin{macrocode} {% (FNN: \@nameauth@cleanA) (SNN: \@nameauth@cleanB)% \unless\ifx\@nameauth@SB\@empty \ (Affix: \@nameauth@cleanSB)% \fi \unless\ifx\@nameauth@C\@empty \ (Alt: \@nameauth@cleanC)% \fi }% \endgroup% } % \end{macrocode} % \end{macro} % % \begin{macro}{\ShowNameState} % \changes{3.7}{2023/02/03}{Added} % \changes{4.0}{2024/02/09}{Use \textsf{xparse}} % \changes{4.1}{2025/02/04}{Allow null args, add starred form, improve output} % \begin{macro}{\ShowNameState*}\end{macro}\vspace{-2.7ex} % These macros show the user the name pattern, name type, index state, % and name systems of a given name. The un-starred form prints on one % line; the starred form, multiple lines. If a null argument % is given, they use the arguments from the last printed name. % % \begin{macrocode} \NewDocumentCommand{\ShowNameState}{s O{} m O{}} {% % \end{macrocode} % Create a local scope to kill any local definitions on exit. % Test for bad input, then load the argument values into % the appropriate macros. Test for a star and set the break % to |\par| or a space. % % \begin{macrocode} \begingroup% \IfBooleanTF{#1} {\def\@nameauth@break{\par}} {\def\@nameauth@break{ }} \let\ex\expandafter% \protected@edef\@nameauth@testname{\trim@spaces{#3}}% \unless\ifx\@nameauth@testname\@empty \@nameauth@Error{#3}{macro \string\ShowNameState}% \@nameauth@LoadArgs{#2}{#3}{#4}% \else % \end{macrocode} % Pull name arguments from the token regs. % % \begin{macrocode} \ex\ex\ex\ex\ex\ex\ex\@nameauth@LoadArgs% \ex\ex\ex\ex\ex\ex\ex{% \ex\ex\ex\the\ex\ex\ex\@nameauth@toksa\ex\ex\ex}% \ex\ex\ex{\ex\the\ex\@nameauth@toksb\ex}% \ex{\the\@nameauth@toksc}% \fi % \end{macrocode} % Parse the name arguments and determine name type. We use this method % instead of examining the Boolean flags because it is more efficient here. % % \begin{macrocode} \@nameauth@Choice {\def\@nameauth@nametype{nw}} {\def\@nameauth@nametype{nw,os}} {\def\@nameauth@nametype{w}} % \end{macrocode} % Check to see what control sequences exist and collect the information. % % \begin{macrocode} \ifcsname\NameauthPattern!MN\endcsname \def\@nameauth@mainname{main}% \fi \ifcsname\NameauthPattern!NF\endcsname \def\@nameauth@frontname{front}% \fi \ifcsname\NameauthPattern!PN\endcsname \edef\@nameauth@testex {\csname\NameauthPattern!PN\endcsname}% \ifx\@nameauth@testex\@nameauth@Exclude \def\@nameauth@excl{excl}% \else \def\@nameauth@xref{xref}% \fi \fi \ifcsname\NameauthPattern!PRE\endcsname \def\@nameauth@pre{pretag}% \fi \ifcsname\NameauthPattern!TAG\endcsname \def\@nameauth@tag{idxtag}% \fi \ifcsname\NameauthPattern!DB\endcsname \def\@nameauth@db{namedb}% \fi % \end{macrocode} % If either a main name or a front name exist, create a macro % that reflects this condition. % % \begin{macrocode} \ifdefined \@nameauth@mainname \def\@nameauth@namecs{}\fi \ifdefined \@nameauth@frontname \def\@nameauth@namecs{}\fi % \end{macrocode} % If an xref and an exclusion exist for a name, something went wrong. % % \begin{macrocode} \ifdefined \@nameauth@xref \ifdefined \@nameauth@excl \PackageWarning{nameauth} {Both xref and exclusion exist for \NameauthPattern}% \fi \fi % \end{macrocode} % Determine the state of the ``index finite state machine''. % % \begin{macrocode} \ifdefined \@nameauth@namecs \def\@nameauth@idxstate{2}% \ifdefined \@nameauth@xref \def\@nameauth@idxstate{4}% \fi \ifdefined \@nameauth@excl \def\@nameauth@idxstate{6}% \fi \else \ifdefined \@nameauth@xref \def\@nameauth@idxstate{3}% \ifdefined \@nameauth@excl \def\@nameauth@idxstate{5}% \fi \else \def\@nameauth@idxstate{1}% \def\@nameauth@nosystem{none}% \fi \fi % \end{macrocode} % Display the output. % % \begin{macrocode} Pattern: \NameauthPattern\@nameauth@break Type: \@nameauth@nametype\@nameauth@break State: \@nameauth@idxstate\@nameauth@break Systems:% \ifdefined \@nameauth@nosystem\ \@nameauth@nosystem \fi \ifdefined \@nameauth@mainname\ \@nameauth@mainname \fi \ifdefined \@nameauth@frontname\ \@nameauth@frontname \fi \ifdefined \@nameauth@xref\ \@nameauth@xref \fi \ifdefined \@nameauth@excl\ \@nameauth@excl \fi \ifdefined \@nameauth@pre\ \@nameauth@pre \fi \ifdefined \@nameauth@tag\ \@nameauth@tag \fi \ifdefined \@nameauth@db\ \@nameauth@db \fi \endgroup% } % \end{macrocode} % \end{macro} % % \newpage % % \subsubsection{Indexing} % % \begin{macro}{\IndexName} % \changes{1.26}{2012/04/24}{Fix affixes} % \changes{2.0}{2015/11/11}{Fix spaces, tagging} % \changes{2.6}{2016/09/19}{Fix commas} % \changes{3.0}{2016/10/26}{Redesigned} % \changes{3.1}{2017/01/13}{Better tests} % \changes{3.5}{2020/11/23}{New warnings, new exclusion test, % improve logic, fix namespace} % \changes{3.7}{2023/02/03}{Fix warnings} % \changes{4.0}{2024/02/09}{Use \textsf{xparse}} % \changes{4.1}{2025/02/04}{Use updated \cmd{\@nameauth@Index}} % This creates an index entry with page entries. It warns if % the \cmd{\SkipIndex} prefix macro was used before it was called. % It issues additional warnings if the \texttt{verbose} option is selected. % It prints nothing. % % \begin{macrocode} \NewDocumentCommand{\IndexName}{O{} m O{}} {% % \end{macrocode} % Process and load the arguments; test for malformed input. % % \begin{macrocode} \@nameauth@LoadArgs{#1}{#2}{#3}% \@nameauth@Error{#2}{macro \string\IndexName}% % \end{macrocode} % Warn if \cmd{\SkipIndex} was called before \cmd{\IndexName} and reset % it unless the \texttt{oldreset} option was used. % % \begin{macrocode} \if@nameauth@SkipIndex \PackageWarning{nameauth} {\string\SkipIndex precedes \string\IndexName; check for issues}% \unless\if@nameauth@OldReset \@nameauth@SkipIndexfalse% \fi \fi % \end{macrocode} % Warn if \cmd{\SeeAlso} was called before \cmd{\IndexName} and reset it. % % \begin{macrocode} \unless\if@nameauth@OldReset \if@nameauth@SeeAlso \global\@nameauth@SeeAlsofalse% \PackageWarning{nameauth}{\string\SeeAlso was reset}% \fi \fi % \end{macrocode} % Enter a local scope, and if so forced, enable indexing only % within that scope. % Create the appropriate index entries, calling \cmd{\@nameauth@Index} % to handle sorting and tagging. We do not create an index entry for a % cross-reference or exclusion. % % Non-Western names. We ignore \cmd{\@nameauth@C}. % % \begin{macrocode} \@nameauth@Choice {% \def\@nameauth@Temp{\expandafter\detokenize\expandafter{#2}}% \ifcsname\@nameauth@csb!PN\endcsname % \end{macrocode} % Verbose warnings: Does an exclusion or cross-reference exist? % % \begin{macrocode} \if@nameauth@Verbose \edef\@nameauth@testex {\csname\@nameauth@csb!PN\endcsname}% \ifx\@nameauth@testex\@nameauth@Exclude \PackageWarning{nameauth} {\string\IndexName: exclusion exists \@nameauth@Temp}% \else \PackageWarning{nameauth} {\string\IndexName: xref exists \@nameauth@Temp}% \fi \fi \else % \end{macrocode} % \newpage % \noindent Mononym entry % % \begin{macrocode} \ifx\@nameauth@SB\@empty \@nameauth@Index{\@nameauth@csb}{\@nameauth@B}{}% \else % \end{macrocode} % Non-Western entry % % \begin{macrocode} \@nameauth@Index{\@nameauth@csb} {\@nameauth@B\@nameauth@space\@nameauth@SB}{}% \fi \fi }% % \end{macrocode} % Non-Western names, obsolete syntax. % Using \cmd{\@nameauth@C} affects indexing here. % % \begin{macrocode} {% \def\@nameauth@Temp{\expandafter\detokenize\expandafter{#2 #3}}% \ifcsname\@nameauth@csbc!PN\endcsname % \end{macrocode} % Verbose warnings: Does an exclusion or cross-reference exist? % % \begin{macrocode} \if@nameauth@Verbose \edef\@nameauth@testex {\csname\@nameauth@csbc!PN\endcsname}% \ifx\@nameauth@testex\@nameauth@Exclude \PackageWarning{nameauth} {\string\IndexName: exclusion exists \@nameauth@Temp}% \else \PackageWarning{nameauth} {\string\IndexName: xref exists \@nameauth@Temp}% \fi \fi \else % \end{macrocode} % Non-Western entry % % \begin{macrocode} \@nameauth@Index{\@nameauth@csbc} {\@nameauth@B\@nameauth@space\@nameauth@C}{}% \fi }% % \end{macrocode} % Western names. % We ignore \cmd{\@nameauth@C} and handle \cmd{\@nameauth@SB}. % % \begin{macrocode} {% \def\@nameauth@Temp{\expandafter\detokenize\expandafter{#1 #2}}% \ifcsname\@nameauth@csab!PN\endcsname % \end{macrocode} % Verbose warnings: Does an exclusion or cross-reference exist? % % \begin{macrocode} \if@nameauth@Verbose \edef\@nameauth@testex {\csname\@nameauth@csab!PN\endcsname}% \ifx\@nameauth@testex\@nameauth@Exclude \PackageWarning{nameauth} {\string\IndexName: exclusion exists \@nameauth@Temp}% \else \PackageWarning{nameauth} {\string\IndexName: xref exists \@nameauth@Temp}% \fi \fi \else % \end{macrocode} % Western entry, no affix % % \begin{macrocode} \ifx\@nameauth@SB\@empty \@nameauth@Index{\@nameauth@csab} {\@nameauth@B,\@nameauth@space\@nameauth@A}{}% \else % \end{macrocode} % Western entry, with affix % % \begin{macrocode} \@nameauth@Index{\@nameauth@csab} {\@nameauth@B,\@nameauth@space% \@nameauth@A,\@nameauth@space\@nameauth@SB}{}% \fi \fi }% } % \end{macrocode} % \end{macro} % % \begin{macro}{\IndexRef} % \changes{3.0}{2016/10/26}{Added} % \changes{3.1}{2017/01/13}{Better tests} % \changes{3.3}{2020/02/20}{Global flag reset} % \changes{3.5}{2020/11/23}{Strict \textit{see} refs, new warnings, % new exclusion test, improve logic, fix namespace} % \changes{3.7}{2023/02/03}{Fix warnings} % \changes{4.0}{2024/02/09}{Use \textsf{xparse}} % \changes{4.1}{2025/02/04}{Use updated \cmd{\@nameauth@Index}} % Create a cross-reference that is not already an exclusion or % a cross-reference. % % \begin{macrocode} \NewDocumentCommand{\IndexRef}{O{} m O{} m} {% % \end{macrocode} % Process and load the arguments into the appropriate macros. % % \begin{macrocode} \@nameauth@LoadArgs{#1}{#2}{#3}% \protected@edef\@nameauth@Target{#4}% % \end{macrocode} % Test for malformed input. % % \begin{macrocode} \@nameauth@Error{#2}{macro \string\IndexRef}% % \end{macrocode} % Warn if \cmd{\SkipIndex} was called before \cmd{\IndexName}, % and reset it unless the \texttt{oldreset} option was used. % % \begin{macrocode} \if@nameauth@SkipIndex \PackageWarning{nameauth} {\string\SkipIndex preceded \string\IndexRef; check for issues}% \unless\if@nameauth@OldReset \@nameauth@SkipIndexfalse% \fi \fi \@nameauth@Choice % \end{macrocode} % Non-Western name, new syntax, no \meta{Affix} % % \begin{macrocode} {% \def\@nameauth@Temp{\expandafter\detokenize\expandafter{#2}}% \ifcsname\@nameauth@csb!PN\endcsname % \end{macrocode} % Verbose warnings: Does an exclusion or cross-reference exist? % % \begin{macrocode} \if@nameauth@Verbose \edef\@nameauth@testex {\csname\@nameauth@csb!PN\endcsname}% \ifx\@nameauth@testex\@nameauth@Exclude \PackageWarning{nameauth} {\string\IndexRef: exclusion exists \@nameauth@Temp}% \else \PackageWarning{nameauth} {\string\IndexRef: xref exists \@nameauth@Temp}% \fi \fi \else % \end{macrocode} % If no xref or exclusion exists, proceed. If creating % a \textit{see also} reference, just do it. % % \begin{macrocode} \ifx\@nameauth@SB\@empty \if@nameauth@SeeAlso \@nameauth@Index[seealso]{\@nameauth@csb} {\@nameauth@B}{\@nameauth@Target}% \csgdef{\@nameauth@csb!PN}{}% \else % \end{macrocode} % When creating a \textit{see} reference, check if a name % already exists. If so, skip and warn. % % \begin{macrocode} \unless\if@nameauth@OldSee \unless\ifcsname\@nameauth@csb!MN\endcsname \unless\ifcsname\@nameauth@csb!NF\endcsname \@nameauth@Index[see]{\@nameauth@csb} {\@nameauth@B}{\@nameauth@Target}% \csgdef{\@nameauth@csb!PN}{}% \else \PackageWarning{nameauth} {\string\IndexRef: extant name; no xref \@nameauth@Temp}% \fi \else \PackageWarning{nameauth} {\string\IndexRef: extant name; no xref \@nameauth@Temp}% \fi \else % \end{macrocode} % Extra verbose warnings and old behavior % % \begin{macrocode} \if@nameauth@Verbose \PackageWarning{nameauth} {\string\IndexRef: non-strict xref \@nameauth@Temp}% \fi \@nameauth@Index[see]{\@nameauth@csb} {\@nameauth@B}{\@nameauth@Target}% \csgdef{\@nameauth@csb!PN}{}% \fi \fi \else % \end{macrocode} % Non-Western name, new syntax, \meta{Affix} exists; create % a \textit{see also} reference if needed. % % \begin{macrocode} \if@nameauth@SeeAlso \@nameauth@Index[seealso]{\@nameauth@csb} {\@nameauth@B\@nameauth@space% \@nameauth@SB}{\@nameauth@Target}% \csgdef{\@nameauth@csb!PN}{}% \else % \end{macrocode} % \newpage % \noindent When creating a \textit{see} reference, check if a name % already exists. If so, skip and warn. % % \begin{macrocode} \unless\if@nameauth@OldSee \unless\ifcsname\@nameauth@csb!MN\endcsname \unless\ifcsname\@nameauth@csb!NF\endcsname \@nameauth@Index[see]{\@nameauth@csb} {\@nameauth@B\@nameauth@space% \@nameauth@SB}{\@nameauth@Target}% \csgdef{\@nameauth@csb!PN}{}% \else \PackageWarning{nameauth} {\string\IndexRef: extant name; no xref \@nameauth@Temp}% \fi \else \PackageWarning{nameauth} {\string\IndexRef: extant name; no xref \@nameauth@Temp}% \fi \else % \end{macrocode} % Extra verbose warnings and old behavior % % \begin{macrocode} \if@nameauth@Verbose \PackageWarning{nameauth} {\string\IndexRef: non-strict xref \@nameauth@Temp}% \fi \@nameauth@Index[see]{\@nameauth@csb} {\@nameauth@B\@nameauth@space% \@nameauth@SB}{\@nameauth@Target}% \csgdef{\@nameauth@csb!PN}{}% \fi \fi \fi \fi }% % \end{macrocode} % Eastern or ancient name, obsolete syntax % % \begin{macrocode} {% \def\@nameauth@Temp{\expandafter\detokenize\expandafter{#2 #3}}% \ifcsname\@nameauth@csbc!PN\endcsname % \end{macrocode} % Verbose warnings: Does an exclusion or cross-reference exist? % % \begin{macrocode} \if@nameauth@Verbose \edef\@nameauth@testex {\csname\@nameauth@csbc!PN\endcsname}% \ifx\@nameauth@testex\@nameauth@Exclude \PackageWarning{nameauth} {\string\IndexRef: exclusion exists \@nameauth@Temp}% \else \PackageWarning{nameauth} {\string\IndexRef: xref exists \@nameauth@Temp}% \fi \fi \else % \end{macrocode} % \newpage % \noindent If no xref or exclusion exists, proceed. If creating % a \textit{see also} reference, just do it. % % \begin{macrocode} \if@nameauth@SeeAlso \@nameauth@Index[seealso]{\@nameauth@csbc} {\@nameauth@B\@nameauth@space\@nameauth@C} {\@nameauth@Target}% \csgdef{\@nameauth@csbc!PN}{}% \else % \end{macrocode} % When creating a \textit{see} reference, check if a name % already exists. If so, skip and warn. % % \begin{macrocode} \unless\if@nameauth@OldSee \unless\ifcsname\@nameauth@csbc!MN\endcsname \unless\ifcsname\@nameauth@csbc!NF\endcsname \@nameauth@Index[see]{\@nameauth@csbc} {\@nameauth@B\@nameauth@space\@nameauth@C} {\@nameauth@Target}% \csgdef{\@nameauth@csbc!PN}{}% \else \PackageWarning{nameauth} {\string\IndexRef: extant name; no xref \@nameauth@Temp}% \fi \else \PackageWarning{nameauth} {\string\IndexRef: extant name; no xref \@nameauth@Temp}% \fi \else % \end{macrocode} % Extra verbose warnings and old behavior % % \begin{macrocode} \if@nameauth@Verbose \PackageWarning{nameauth} {\string\IndexRef: non-strict xref \@nameauth@Temp}% \fi \@nameauth@Index[see]{\@nameauth@csbc} {\@nameauth@B\@nameauth@space\@nameauth@C} {\@nameauth@Target}% \csgdef{\@nameauth@csbc!PN}{}% \fi \fi \fi }% % \end{macrocode} % Western name % % \begin{macrocode} {% \def\@nameauth@Temp{\expandafter\detokenize\expandafter{#1 #2}}% \ifcsname\@nameauth@csab!PN\endcsname % \end{macrocode} % \newpage % \noindent Verbose warnings: Does an exclusion or cross-reference exist? % % \begin{macrocode} \if@nameauth@Verbose \edef\@nameauth@testex {\csname\@nameauth@csab!PN\endcsname}% \ifx\@nameauth@testex\@nameauth@Exclude \PackageWarning{nameauth} {\string\IndexRef: exclusion exists \@nameauth@Temp}% \else \PackageWarning{nameauth} {\string\IndexRef: xref exists \@nameauth@Temp}% \fi \fi \else % \end{macrocode} % If no xref or exclusion exists, proceed. % Process names without an affix. % If creating a \textit{see also} reference, just do it. % % \begin{macrocode} \ifx\@nameauth@SB\@empty \if@nameauth@SeeAlso \@nameauth@Index[seealso]{\@nameauth@csab} {\@nameauth@B,\@nameauth@space\@nameauth@A} {\@nameauth@Target}% \csgdef{\@nameauth@csab!PN}{}% \else % \end{macrocode} % When creating a \textit{see} reference, check if a name % already exists. If so, skip and warn. % % \begin{macrocode} \unless\if@nameauth@OldSee \unless\ifcsname\@nameauth@csab!MN\endcsname \unless\ifcsname\@nameauth@csab!NF\endcsname \@nameauth@Index[see]{\@nameauth@csab} {\@nameauth@B,\@nameauth@space\@nameauth@A} {\@nameauth@Target}% \csgdef{\@nameauth@csab!PN}{}% \else \PackageWarning{nameauth} {\string\IndexRef: extant name; no xref \@nameauth@Temp}% \fi \else \PackageWarning{nameauth} {\string\IndexRef: extant name; no xref \@nameauth@Temp}% \fi \else % \end{macrocode} % Extra verbose warnings and old behavior % % \begin{macrocode} \if@nameauth@Verbose \PackageWarning{nameauth} {\string\IndexRef: non-strict xref \@nameauth@Temp}% \fi \@nameauth@Index[see]{\@nameauth@csab} {\@nameauth@B,\@nameauth@space\@nameauth@A} {\@nameauth@Target}% \csgdef{\@nameauth@csab!PN}{}% \fi \fi \else % \end{macrocode} % Process names with an affix. % If creating a \textit{see also} reference, just do it. % % \begin{macrocode} \if@nameauth@SeeAlso \@nameauth@Index[seealso]{\@nameauth@csab} {\@nameauth@B,\@nameauth@space% \@nameauth@A,\@nameauth@space\@nameauth@SB} {\@nameauth@Target}% \csgdef{\@nameauth@csab!PN}{}% \else % \end{macrocode} % When creating a \textit{see} reference, check if a name % already exists. If so, skip and warn. % % \begin{macrocode} \unless\if@nameauth@OldSee \unless\ifcsname\@nameauth@csab!MN\endcsname \unless\ifcsname\@nameauth@csab!NF\endcsname \@nameauth@Index[see]{\@nameauth@csab} {\@nameauth@B,\@nameauth@space% \@nameauth@A,\@nameauth@space\@nameauth@SB} {\@nameauth@Target}% \csgdef{\@nameauth@csab!PN}{}% \else \PackageWarning{nameauth} {\string\IndexRef: extant name; no xref \@nameauth@Temp}% \fi \else \PackageWarning{nameauth} {\string\IndexRef: extant name; no xref \@nameauth@Temp}% \fi \else % \end{macrocode} % Extra verbose warnings and old behavior % % \begin{macrocode} \if@nameauth@Verbose \PackageWarning{nameauth} {\string\IndexRef: non-strict xref \@nameauth@Temp}% \fi \@nameauth@Index[see]{\@nameauth@csab} {\@nameauth@B,\@nameauth@space% \@nameauth@A,\@nameauth@space\@nameauth@SB} {\@nameauth@Target}% \csgdef{\@nameauth@csab!PN}{}% \fi \fi \fi \fi }% % \end{macrocode} % Reset the \textit{see also} flag to false. % % \begin{macrocode} \if@nameauth@OldReset \@nameauth@SeeAlsofalse% \else \global\@nameauth@SeeAlsofalse% \fi } % \end{macrocode} % \end{macro} % \newpage % % \begin{macro}{\ExcludeName} % \changes{0.94}{2012/02/15}{Added} % \changes{2.3}{2016/01/05}{New xref test} % \changes{3.0}{2016/10/26}{Redesigned} % \changes{3.3}{2020/02/20}{Better warnings} % \changes{3.5}{2020/11/23}{New warnings, new exclusion test, % fix bug in old syntax, new logic, fix namespace} % \changes{3.7}{2023/02/03}{Fix warnings, optimized} % \changes{4.0}{2024/02/09}{Use \textsf{xparse}} % Prevent a name from being indexed by initializing a regular % cross-reference control sequence with the value of % \cmd{\@nameauth@Exclude}. % % \begin{macrocode} \NewDocumentCommand{\ExcludeName}{O{} m O{}} {% % \end{macrocode} % Process and load the arguments into the appropriate macros. % % \begin{macrocode} \@nameauth@LoadArgs{#1}{#2}{#3}% \@nameauth@Error{#2}{macro \string\ExcludeName}% % \end{macrocode} % Parse the name arguments and create an excluded xref, % unless one already exists. % % \begin{macrocode} \@nameauth@Choice {\def\@nameauth@Temp{\expandafter\detokenize\expandafter{#2}}} {\def\@nameauth@Temp{\expandafter\detokenize\expandafter{#2 #3}}} {\def\@nameauth@Temp{\expandafter\detokenize\expandafter{#1 #2}}}% % \end{macrocode} % Verbose warnings say that an extant name is being excluded; % the operation is allowed. % % \begin{macrocode} \if@nameauth@Verbose \ifcsname\NameauthPattern!MN\endcsname \PackageWarning{nameauth} {\string\ExcludeName: extant name \@nameauth@Temp}% \fi \ifcsname\NameauthPattern!NF\endcsname \PackageWarning{nameauth} {\string\ExcludeName: extant name \@nameauth@Temp}% \fi \fi % \end{macrocode} % One cannot exclude an extant cross-reference or exclusion. % Verbose warnings only. % % \begin{macrocode} \ifcsname\NameauthPattern!PN\endcsname \if@nameauth@Verbose \edef\@nameauth@testex {\csname\NameauthPattern!PN\endcsname}% \ifx\@nameauth@testex\@nameauth@Exclude \PackageWarning{nameauth} {\string\ExcludeName: exclusion exists \@nameauth@Temp}% \else \PackageWarning{nameauth} {\string\ExcludeName: xref exists \@nameauth@Temp}% \fi \fi \else \csxdef{\NameauthPattern!PN}{\@nameauth@Exclude}% \fi } % \end{macrocode} % \end{macro} % % \begin{macro}{\IncludeName} % \changes{3.0}{2016/10/26}{Added} % \changes{3.3}{2020/02/20}{Added warnings} % \changes{3.5}{2020/11/23}{New exclusion test, optimize logic, % fix namespace} % \changes{3.7}{2023/02/03}{Fix warnings, optimized} % \changes{4.0}{2024/02/09}{Combine starred, un-starred macros} % \begin{macro}{\IncludeName*}\end{macro}\vspace{-2.7ex} % \noindent Allow names to be included as page entries, even if they have been % used as cross-references. % \begin{macrocode} \NewDocumentCommand{\IncludeName}{s O{} m O{}} {% \IfBooleanTF {#1}% % \end{macrocode} % The starred form allows any name to be indexed by voiding any % exclusion or cross-reference. % Process and load the arguments into the appropriate macros. % Check for errors, get the current name pattern, then nuke it. % % \begin{macrocode} {% \@nameauth@LoadArgs{#2}{#3}{#4}% \@nameauth@Error{#3}{macro \string\IncludeName*}% \@nameauth@Choice{}{}{}% \global\csundef{\NameauthPattern!PN}% }% % \end{macrocode} % The un-starred form allows a name to be indexed once again only if % it had been excluded. % Process and load the arguments into the appropriate macros. % Get the current name type, pattern, and contents if a warning % is needed. % % \begin{macrocode} {% \@nameauth@LoadArgs{#2}{#3}{#4}% \@nameauth@Error{#3}{macro \string\IncludeName}% \@nameauth@Choice {\def\@nameauth@Temp {\expandafter\detokenize\expandafter{#3}}} {\def\@nameauth@Temp {\expandafter\detokenize\expandafter{#3 #4}}} {\def\@nameauth@Temp {\expandafter\detokenize\expandafter{#2 #3}}}% % \end{macrocode} % Test whether the name is an exclusion or a regular xref. % If the former, delete its control sequence. If the latter, % do nothing and issue a warning. % % \begin{macrocode} \ifcsname\NameauthPattern!PN\endcsname \edef\@nameauth@testex {\csname\NameauthPattern!PN\endcsname}% \ifx\@nameauth@testex\@nameauth@Exclude \global\csundef{\NameauthPattern!PN}% \else \if@nameauth@Verbose \PackageWarning{nameauth} {\string\IncludeName: extant xref \@nameauth@Temp}% \fi \fi \fi }% } % \end{macrocode} % \end{macro} % % \begin{macro}{\PretagName} % \changes{2.0}{2015/11/11}{Added} % \changes{3.5}{2020/11/23}{New warnings, new exclusion test, % improve logic, fix namespace} % \changes{3.7}{2023/02/03}{Fix warnings, optimized} % \changes{4.0}{2024/02/09}{Use \textsf{xparse}} % This creates an index sort tag that is applied before a name. % % \begin{macrocode} \NewDocumentCommand{\PretagName}{O{} m O{} m} {% % \end{macrocode} % Process and load the arguments into the appropriate macros. % % \begin{macrocode} \@nameauth@LoadArgs{#1}{#2}{#3}% \@nameauth@Error{#2}{macro \string\PretagName}% % \end{macrocode} % Sort only when permitted. % Get the current name type, pattern, and contents if a warning % is needed. % % \begin{macrocode} \if@nameauth@Pretag \@nameauth@Choice {\def\@nameauth@Temp{\expandafter\detokenize\expandafter{#2}}} {\def\@nameauth@Temp{\expandafter\detokenize\expandafter{#2 #3}}} {\def\@nameauth@Temp{\expandafter\detokenize\expandafter{#1 #2}}}% % \end{macrocode} % Create the sort tag. Verbose warnings let us know if we are % sorting either exclusions or names that are either % cross-references or do not exist yet. % % \begin{macrocode} \if@nameauth@Verbose \edef\@nameauth@testex {\csname\NameauthPattern!PN\endcsname}% \ifx\@nameauth@testex\@nameauth@Exclude \PackageWarning{nameauth} {\string\PretagName: tag exclusion \@nameauth@Temp}% \else \PackageWarning{nameauth} {\string\PretagName: tag xref/no exist \@nameauth@Temp}% \fi \fi \csgdef{\NameauthPattern!PRE}{#4\@nameauth@Actual}% \else \PackageWarning{nameauth} {\string\PretagName: deactivated}% \fi } % \end{macrocode} % \end{macro} % % \begin{macro}{\TagName} % \changes{1.2}{2012/02/25}{Added} % \changes{1.9}{2015/07/09}{Fix cs collisions} % \changes{2.0}{2015/11/11}{Redesign tagging} % \changes{3.5}{2020/11/23}{New warnings, new exclusion test, % improve logic, fix namespace} % \changes{3.7}{2023/02/03}{Optimized} % \changes{4.0}{2024/02/09}{Use \textsf{xparse}} % This creates an index entry tag for a name that is not either % an exclusion or a cross-reference. % % \begin{macrocode} \NewDocumentCommand{\TagName}{O{} m O{} m} {% % \end{macrocode} % Process and load the arguments into the appropriate macros. % Get the current name type, pattern, and contents if a warning % is needed. % % \begin{macrocode} \@nameauth@LoadArgs{#1}{#2}{#3}% \@nameauth@Error{#2}{macro \string\TagName}% \@nameauth@Choice {\def\@nameauth@Temp{\expandafter\detokenize\expandafter{#2}}} {\def\@nameauth@Temp{\expandafter\detokenize\expandafter{#2 #3}}} {\def\@nameauth@Temp{\expandafter\detokenize\expandafter{#1 #2}}}% % \end{macrocode} % Verbose warnings let us know if we are sorting either % exclusions or cross-references. Do not create a tag if % that is the case; otherwise, create a tag. % % \begin{macrocode} \ifcsname\NameauthPattern!PN\endcsname \if@nameauth@Verbose \edef\@nameauth@testex {\csname\NameauthPattern!PN\endcsname}% \ifx\@nameauth@testex\@nameauth@Exclude \PackageWarning{nameauth} {\string\TagName: no tag, exclusion \@nameauth@Temp}% \else \PackageWarning{nameauth} {\string\TagName: no tag, xref \@nameauth@Temp}% \fi \fi \else \csgdef{\NameauthPattern!TAG}{#4}% \fi } % \end{macrocode} % \end{macro} % \newpage % % \begin{macro}{\UntagName} % \changes{1.2}{2012/02/25}{Added} % \changes{1.9}{2015/07/09}{Global undef, no cs collisions} % \changes{2.0}{2015/11/11}{Redesign tagging} % \changes{3.5}{2020/11/23}{Improve logic, fix namespace} % \changes{3.7}{2023/02/03}{Optimized} % \changes{4.0}{2024/02/09}{Use \textsf{xparse}} % This deletes an index tag. % % \begin{macrocode} \NewDocumentCommand{\UntagName}{O{} m O{}} {% \@nameauth@LoadArgs{#1}{#2}{#3}% \@nameauth@Error{#2}{macro \string\UntagName}% \@nameauth@Choice{}{}{}% \global\csundef{\NameauthPattern!TAG}% } % \end{macrocode} % \end{macro} % % \subsubsection{Name Tags} % % \begin{macro}{\NameAddInfo} % \changes{2.4}{2016/03/15}{Added} % \changes{3.5}{2020/11/23}{Improve logic, fix namespace} % \changes{3.7}{2023/02/03}{Optimized} % \changes{4.0}{2024/02/09}{Use \textsf{xparse}} % This creates a macro that expands to information associated with % a given name, similar to an index tag, but usable in the body text. % % \begin{macrocode} \NewDocumentCommand{\NameAddInfo}{O{} m O{} +m} {% \@nameauth@LoadArgs{#1}{#2}{#3}% \@nameauth@Error{#2}{macro \string\NameAddInfo}% \@nameauth@Choice{}{}{}% \csgdef{\NameauthPattern!DB}{#4}% } % \end{macrocode} % \end{macro} % % \begin{macro}{\NameQueryInfo} % \changes{2.4}{2016/03/15}{Added} % \changes{3.1}{2017/01/13}{Short macro} % \changes{3.3}{2020/02/20}{Lock added} % \changes{3.5}{2020/11/23}{Improve logic, fix namespace} % \changes{3.7}{2023/02/03}{Optimized} % \changes{4.0}{2024/02/09}{Use \textsf{xparse}} % \changes{4.1}{2025/02/04}{Works always in hooks when using null args} % This prints the information created by \cmd{\NameAddInfo} if it exists. % % \begin{macrocode} \NewDocumentCommand{\NameQueryInfo}{O{} m O{}} {% \unless\if@nameauth@BigLock \protected@edef\@nameauth@testname{\trim@spaces{#2}}% \unless\ifx\@nameauth@testname\@empty \@nameauth@Error{#2}{macro \string\NameQueryInfo}% \@nameauth@LoadArgs{#1}{#2}{#3}% \@nameauth@Choice{}{}{}% \fi \ifcsname\NameauthPattern!DB\endcsname \expandafter\csname\NameauthPattern!DB\endcsname% \fi \fi } % \end{macrocode} % \end{macro} % % \begin{macro}{\NameClearInfo} % \changes{2.4}{2016/03/15}{Added} % \changes{3.5}{2020/11/23}{Improve logic, fix namespace} % \changes{3.7}{2023/02/03}{Optimized} % \changes{4.0}{2024/02/09}{Use \textsf{xparse}} % This deletes a text tag. It has the same structure as \cmd{\UntagName}. % % \begin{macrocode} \NewDocumentCommand{\NameClearInfo}{O{} m O{}} {% \@nameauth@LoadArgs{#1}{#2}{#3}% \@nameauth@Error{#2}{macro \string\NameClearInfo}% \@nameauth@Choice{}{}{}% \global\csundef{\NameauthPattern!DB}% } % \end{macrocode} % \end{macro} % % \subsubsection{Name Decisions} % % \begin{macro}{\IfMainName} % \changes{2.3}{2016/01/05}{Added} % \changes{3.5}{2020/11/23}{Improve logic, fix namespace, % local or global scope} % \changes{3.7}{2023/02/03}{Optimized} % \changes{4.0}{2024/02/09}{Use \textsf{xparse}} % This macro expands one path if a main matter name exists, or else the % other. The state of \texttt{\textbackslash if@nameauth@GlobalScope} % determines whether or not the paths are in a local scope. First we % load the arguments into the standard macros, check for error, and % get the current name pattern. % \newpage % % \begin{macrocode} \NewDocumentCommand{\IfMainName}{O{} m O{} +m +m} {% \@nameauth@LoadArgs{#1}{#2}{#3}% \@nameauth@Error{#2}{macro \string\IfMainName}% \@nameauth@Choice{}{}{}% % \end{macrocode} % Take this path if the pattern exists. % % \begin{macrocode} \ifcsname\NameauthPattern!MN\endcsname \if@nameauth@GlobalScope #4\else {#4}\fi \else % \end{macrocode} % Take this path if the pattern does not exist. % % \begin{macrocode} \if@nameauth@GlobalScope #5\else {#5}\fi \fi }% % \end{macrocode} % \end{macro} % % \begin{macro}{\IfFrontName} % \changes{2.3}{2016/01/05}{Added} % \changes{3.5}{2020/11/23}{Improve logic, fix namespace, % local or global scope} % \changes{3.7}{2023/02/03}{Optimized} % \changes{4.0}{2024/02/09}{Use \textsf{xparse}} % This macro expands one path if a front matter name exists, or else the % other. The state of \texttt{\textbackslash if@nameauth@GlobalScope} % determines whether or not the paths are in a local scope. First we % load the arguments into the standard macros, check for error, and % get the current name pattern. % % \begin{macrocode} \NewDocumentCommand{\IfFrontName}{O{} m O{} +m +m} {% \@nameauth@LoadArgs{#1}{#2}{#3}% \@nameauth@Error{#2}{macro \string\IfFrontName}% \@nameauth@Choice{}{}{}% % \end{macrocode} % Take this path if the pattern exists. % % \begin{macrocode} \ifcsname\NameauthPattern!NF\endcsname \if@nameauth@GlobalScope #4\else {#4}\fi \else % \end{macrocode} % Take this path if the pattern does not exist. % % \begin{macrocode} \if@nameauth@GlobalScope #5\else {#5}\fi \fi } % \end{macrocode} % \end{macro} % % \begin{macro}{\IfAKA} % \changes{2.3}{2016/01/05}{Added} % \changes{2.4}{2016/03/15}{Test for excluded} % \changes{3.0}{2016/10/26}{Redesigned} % \changes{3.5}{2020/11/23}{New exclusion test, optimize logic, % fix namespace, local or global scope} % \changes{3.7}{2023/02/03}{Optimized} % \changes{4.0}{2024/02/09}{Use \textsf{xparse}} % This macro expands one path if a cross-reference exists, another if % it does not exist, and a third if it is excluded. The state of % \texttt{\textbackslash if@nameauth@GlobalScope} determines whether or not % the paths are in a local scope. First we load the arguments into % the standard macros, check for error, and get the current name pattern. % % \begin{macrocode} \NewDocumentCommand{\IfAKA}{O{} m O{} +m +m +m} {% \@nameauth@LoadArgs{#1}{#2}{#3}% \@nameauth@Error{#2}{macro \string\IfAKA}% \@nameauth@Choice{}{}{}% \ifcsname\NameauthPattern!PN\endcsname \edef\@nameauth@testex {\csname\NameauthPattern!PN\endcsname}% % \end{macrocode} % Take this path if the pattern is an exclusion. % % \begin{macrocode} \ifx\@nameauth@testex\@nameauth@Exclude \if@nameauth@GlobalScope #6\else {#6}\fi \else % \end{macrocode} % Take this path if the pattern exists. % % \begin{macrocode} \if@nameauth@GlobalScope #4\else {#4}\fi \fi \else % \end{macrocode} % Take this path if the pattern does not exist. % % \begin{macrocode} \if@nameauth@GlobalScope #5\else {#5}\fi \fi } % \end{macrocode} % \end{macro} % % \begin{macro}{\ForgetName} % \changes{1.9}{2015/07/09}{Global undef} % \changes{2.3}{2016/01/05}{Global or local} % \changes{3.5}{2020/11/23}{Improve logic, fix namespace} % \changes{3.7}{2023/02/03}{Optimized} % \changes{4.0}{2024/02/09}{Use \textsf{xparse}} % This undefines a control sequence to force a ``first use''. % % \begin{macrocode} \NewDocumentCommand{\ForgetName}{O{} m O{}} {% % \end{macrocode} % Process and load the arguments into the appropriate macros. % % \begin{macrocode} \@nameauth@LoadArgs{#1}{#2}{#3}% \@nameauth@Error{#2}{macro \string\ForgetName}% % \end{macrocode} % Now we parse the arguments, destroying the control sequences either % by current name system type or completely. |@nameauth@LocalNames| toggles % current system or both, while we select the type of name with % |@nameauth@MainFormat|. % % \begin{macrocode} \@nameauth@Choice{}{}{}% \if@nameauth@LocalNames \if@nameauth@MainFormat \global\csundef{\NameauthPattern!MN}% \else \global\csundef{\NameauthPattern!NF}% \fi \else \global\csundef{\NameauthPattern!MN}% \global\csundef{\NameauthPattern!NF}% \fi } % \end{macrocode} % \end{macro} % % \begin{macro}{\SubvertName} % \changes{0.9}{2012/02/10}{Added} % \changes{2.3}{2016/01/05}{Global or local} % \changes{3.1}{2017/01/13}{Fix old syntax} % \changes{3.5}{2020/11/23}{Improve logic, fix namespace} % \changes{3.7}{2023/02/03}{Optimized} % \changes{4.0}{2024/02/09}{Use \textsf{xparse}} % This defines a control sequence to force a ``subsequent use''. % % \begin{macrocode} \NewDocumentCommand{\SubvertName}{O{} m O{}} {% \@nameauth@LoadArgs{#1}{#2}{#3}% \@nameauth@Error{#2}{macro \string\SubvertName}% % \end{macrocode} % Now we parse the arguments, defining the control sequences either % by current name system type or completely. |@nameauth@LocalNames| toggles % current system or both, while we select the type of name with % |@nameauth@MainFormat|. % % \begin{macrocode} \@nameauth@Choice{}{}{}% \if@nameauth@LocalNames \if@nameauth@MainFormat \csgdef{\NameauthPattern!MN}{}% \else \csgdef{\NameauthPattern!NF}{}% \fi \else \csgdef{\NameauthPattern!MN}{}% \csgdef{\NameauthPattern!NF}{}% \fi } % \end{macrocode} % \end{macro} % % \newpage % % \subsubsection{Pseudonyms} % % \begin{macro}{\AKA} % \changes{1.26}{2012/04/24}{Fix affixes} % \changes{1.5}{2013/02/22}{Reversing/caps} % \changes{2.0}{2015/11/11}{Trim spaces; fix tags} % \changes{2.1}{2015/11/24}{Fix Unicode} % \changes{2.3}{2016/01/05}{Fix starred mode} % \changes{2.41}{2016/03/17}{Fix token regs} % \changes{2.6}{2016/09/19}{Fix index commas} % \changes{3.0}{2016/10/26}{Redesigned} % \changes{3.1}{2017/01/13}{Can skip index} % \changes{3.3}{2020/02/20}{Global flag reset} % \changes{3.5}{2020/11/23}{Fix namespace} % \changes{4.0}{2024/02/09}{Combine starred, un-starred macros} % \begin{macro}{\AKA*}\end{macro}\vspace{-2.7ex} % \noindent \cmd{\AKA} prints an alternate name and creates index cross-references. % The starred form displays the alternate name like \cmd{\FName}. % % \begin{macrocode} \NewDocumentCommand{\AKA}{s O{} m O{} m O{}} {% % \end{macrocode} % Prevent entering \cmd{\AKA} via itself or \cmd{\@nameauth@Name}. % Tell the formatting system that \cmd{\AKA} is running. % Prevent and reset \cmd{\JustIndex}. % % \begin{macrocode} \if@nameauth@BigLock \@nameauth@Locktrue% \fi \IfBooleanTF {#1}{\@nameauth@AltAKAtrue}{}% \unless\if@nameauth@Lock \@nameauth@Locktrue% \@nameauth@InAKAtrue% \if@nameauth@OldReset \@nameauth@JustIndexfalse% \else \global\@nameauth@JustIndexfalse% \fi % \end{macrocode} % Test for malformed input, then load args and save the persistent % info of the xref. % % \begin{macrocode} \@nameauth@Error{#3}{macro \string\AKA}% \@nameauth@Error{#5}{macro \string\AKA}% \@nameauth@LoadArgs{#4}{#5}{#6}% \@nameauth@Choice{}{}{}% % \end{macrocode} % Names occur in horizontal mode; we ensure that. % Next we make copies of the target name arguments and we parse % and print the cross-reference name. % % \begin{macrocode} \leavevmode\hbox{}% \protected@edef\@nameauth@Ai{\trim@spaces{#2}}% \protected@edef\@nameauth@Bi{\@nameauth@Root{#3}}% \protected@edef\@nameauth@Si{\@nameauth@Suffix{#3}}% \@nameauth@Parse{#4}{#5}{#6}{!PN}% % \end{macrocode} % \noindent Create an index cross-reference based on the arguments. % % \begin{macrocode} \unless\if@nameauth@SkipIndex \ifx\@nameauth@Ai\@empty \ifx\@nameauth@Si\@empty \IndexRef[#4]{#5}[#6]{\@nameauth@Bi}% \else \IndexRef[#4]{#5}[#6] {\@nameauth@Bi\@nameauth@space\@nameauth@Si}% \fi \else \ifx\@nameauth@Si\@empty \IndexRef[#4]{#5}[#6] {\@nameauth@Bi,\@nameauth@space\@nameauth@Ai}% \else \IndexRef[#4]{#5}[#6] {\@nameauth@Bi,\@nameauth@space \@nameauth@Ai,\@nameauth@space\@nameauth@Si}% \fi \fi \fi % \end{macrocode} % Reset all the ``per name'' Boolean values. The default is global. % % \begin{macrocode} \@nameauth@Flags% \@nameauth@Lockfalse% \@nameauth@InAKAfalse% % \end{macrocode} % Close the ``locked'' branch and call the full stop detection. % This conditional statement must be on one line. % % \begin{macrocode} \fi \if@nameauth@Punct\expandafter\@nameauth@CheckDot\fi } % \end{macrocode} % \end{macro} % % \begin{macro}{\PName} % \changes{2.3}{2016/01/05}{Work with hooks} % \changes{3.1}{2017/01/13}{Can skip index} % \changes{3.5}{2020/11/23}{Warning and flag resets added} % \changes{3.7}{2023/02/03}{Fix warnings} % \changes{4.0}{2024/02/09}{Combine starred, un-starred macros} % \begin{macro}{\PName*}\end{macro}\vspace{-2.7ex} % \noindent \cmd{\PName} is a convenience macro that calls \cmd{\NameauthName}, then \cmd{\AKA}. Its starred form prints a long name. % % \begin{macrocode} \NewDocumentCommand{\PName}{s O{} m O{} m O{}} {% % \end{macrocode} % If we have a starred form, we will display a long name. % If we used \cmd{\JustIndex}, we ignore and reset its flag to false. % % \begin{macrocode} \IfBooleanTF {#1}{\@nameauth@FullNametrue}{}% \if@nameauth@OldReset \@nameauth@JustIndexfalse% \else \global\@nameauth@JustIndexfalse% \fi % \end{macrocode} % If we used \cmd{\SkipIndex}, we reset the flag of \cmd{\SeeAlso} and % activate \cmd{\SkipIndex} for both \cmd{\NameauthName} and \cmd{\AKA}. % % \begin{macrocode} \if@nameauth@SkipIndex \unless\if@nameauth@OldReset \global\@nameauth@SeeAlsofalse% \fi \NameauthName[#2]{#3} (\SkipIndex\AKA[#2]{#3}[#4]{#5}[#6])% \else % \end{macrocode} % Otherwise, if we used \cmd{\SeeAlso} we set the flag of \cmd{\SeeAlso} % false for \cmd{\NameauthName} and true for \cmd{\AKA}. The ``normal'' % case after that is trivial. % % \begin{macrocode} \if@nameauth@SeeAlso \@nameauth@SeeAlsofalse\NameauthName[#2]{#3} \@nameauth@SeeAlsotrue(\AKA[#2]{#3}[#4]{#5}[#6])% \else \NameauthName[#2]{#3} (\AKA[#2]{#3}[#4]{#5}[#6])% \fi \fi % \end{macrocode} % Warn if \cmd{\SkipIndex} remains in effect (potentially due to % the \texttt{oldreset} option). Normally, this state should not occur. % % \begin{macrocode} \if@nameauth@SkipIndex \PackageWarning{nameauth} {\string\SkipIndex still active after \string\PName; check}% \fi } % \end{macrocode} % \end{macro} % % \Finale % \endinput % %<*compat> %< %<*examples> %< \< Bailey & Betsey & Bailey & > \end{nameauth} \begin{nameauth} \< Wash & George & Washington & > \< Bradley & Omar N. & Bradley & > \< Aris & & Aristotle & > \< Plato & & Plato & > \< Aeth & & \AE thelred, II & > \< Linc & Abraham & Lincoln & > \< MLK & Martin Luther & King, Jr. & > \< Soto & Hernando & de Soto & > \< Patton & George S. & Patton, Jr. & > \< Ike & Dwight D. & Eisenhower & > \end{nameauth} \begin{nameauth} \< Luth & Martin & \noexpand\textSC{Luther} & > \< Cath & Catherine \noexpand\AltCaps{d}e' & \noexpand\textSC{Medici} & > \end{nameauth} \begin{nameauth} \< Jeff & Thomas & \noexpand\textSC{Jefferson}\noexpand\GEN{} & > \end{nameauth} \begin{nameauth} \< Scipio & \noexpand\SCIPi & \noexpand\SCIPii & > \< TGrac & \noexpand\TSemp & Gracchus & > \end{nameauth} \begin{nameauth} \< OScipio & Lucius & \noexpand\CSB & > % O for Oxford \end{nameauth} \begin{nameauth} \< Shak & \noexpand\WM & \noexpand\SHK & > \end{nameauth} \begin{nameauth} \< deSmet & Pierre-Jean & \noexpand\Fbox{\noexpand\AltCaps{d}e~Smet} & > \end{nameauth} % % We could add name info database tags (text tags) either % in the preamble or in the document environment. We will do % the latter in this example file. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Below we establish sort tags for names. % % Sort these names under: US Generals. \PretagName[Omar N.]{Bradley}{US Generals!Bradley, Omar} \PretagName[George S.]{Patton, Jr.}{US Generals!Patton, George} % Sort these names under: US Presidents. \PretagName[George]{Washington}{US Presidents!Washington, George} \PretagName[Dwight D.]{Eisenhower}{US Presidents!Eisenhower, Dwight D.} \PretagName[Abraham]{Lincoln}{US Presidents!Lincoln, Abraham} % Sort these names under: Philosophers. \PretagName{Aristotle}{Philosophers!Aristotle} \PretagName{Plato}{Philosophers!Plato} % Sort these names under: Black Americans, famous. \PretagName[Frederick]{Douglass} {Black Americans, famous!Douglass, Frederick} \PretagName[Martin Luther]{King, Jr.} {Black Americans, famous!King, Martin Luther, Jr.} % Sort these names under: Europeans, historical. \PretagName{\AE thelred, II}{Europeans, historical!Aethelred 2} \PretagName[Hernando]{de Soto} {Europeans, historical!de Soto, Hernando} \PretagName{Vlad, Ţepeş}{Vlad Tepes} % for accented names \PretagName[Konrad]{\noexpand\textSC{Zuse}}{Zuse, Konrad} \PretagName[Ada]{\noexpand\textIT{Lovelace}}{Lovelace, Ada} \PretagName[Charles]{\noexpand\textBF{Babbage}} {Babbage, Charles} \PretagName{\noexpand\textUC{Kanade}, Takeo}{Kanade Takeo} \PretagName[Martin]{\noexpand\textSC{Luther}}{Luther, Martin} \PretagName[Catherine \noexpand\AltCaps{d}e'] {\noexpand\textSC{Medici}}{Medici, Catherine de} \PretagName[Thomas]{\noexpand\textSC{Jefferson}\noexpand\GEN{}} {Jefferson, Thomas} \PretagName[Greta]{\noexpand\textSC{Garbo}}{Garbo, Greta} \PretagName{\noexpand\textSC{Misora}, Hibari}{Misora Hibari} \PretagName[Heinz]{\noexpand\textSC{R\"uhmann}}{Ruehmann, Heinz} \PretagName[Heinrich Wilhelm]{\noexpand\textSC{R\"uhmann}} {Ruehmann, Heinrich Wilhelm} \PretagName[\noexpand\SCIPi]{\noexpand\SCIPii} {Scipio Africanus} \PretagName[\noexpand\TSemp]{Gracchus} {Gracchus, Tiberius Sempronius} \PretagName[Lucius]{\noexpand\CSB}{Cornelius Scipio Barbatus} \PretagName[\noexpand\WM]{\noexpand\SHK} {Shakespeare, William} \PretagName[Robert]{\textSC{Burns}}{Burns, Robert} \PretagName[Pierre-Jean]% {\noexpand\Fbox{\noexpand\AltCaps{d}e~Smet}}% {de~Smet, Pierre-Jean} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Below we establish some index tags for names. % \TagName{Vlad, II}{ Dracul} \TagName{Vlad, III}{ Dracula} \IndexRef{Dracula}{Vlad III} \TagName[Thomas]{\noexpand\textSC{Jefferson}\noexpand\GEN{}} {, pres.} \TagName[\noexpand\TSemp]{Gracchus}{, consul} \TagName[Lucius]{\noexpand\CSB}{, consul} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \title{\bfseries Some \textsf{nameauth} Examples} \author{Charles P. Schaum} \date{2025/02/04} \begin{document} \maketitle \phantomsection \pdfbookmark[1]{\contentsname}{toc} \tableofcontents \newpage % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \section{Minimal Example} \textbf{Group 1} \begin{enumerate} \item[\textbf{1.}] \Doug\ rose to eminence by sheer force of character and talents that neither slavery nor caste proscription could crush. \item[\textbf{2.}] \Doug's early life is perhaps the most complete indictment of the slave system ever presented at the bar of public opinion. \item[\textbf{3.}] \Doug\ was born in February, 1817. His earliest memories centered around the cabin of his grandmother, \Bailey. \end{enumerate} \medskip\noindent\textbf{Group 2} \ForgetName[Frederick]{Douglass} \ForgetName[Betsey]{Bailey} \begin{enumerate} \item[\textbf{2.}] \Doug's early life is perhaps the most complete indictment of the slave system ever presented at the bar of public opinion. \item[\textbf{3.}] \Doug\ was born in February, 1817. His earliest memories centered around the cabin of his grandmother, \Bailey. \item[\textbf{1.}] \Doug\ rose to eminence by sheer force of character and talents that neither slavery nor caste proscription could crush. \end{enumerate} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \section{Roman Names I} Here we modify a few details from the manual in order to make all the name examples work well together. \newcommand\nri{} \newcommand\nrii{} \begin{nameauth} \< Senecai & Lucius Annaeus & Seneca\nri & > \< Senecaii & Lucius Annaeus & Seneca\nrii & > \end{nameauth} \renewcommand*\NamesFormat[1] {#1\NameQueryInfo{}} \PretagName[Lucius Annaeus]{Seneca\nri}{Seneca, Lucius Annaeus 1} \PretagName[Lucius Annaeus]{Seneca\nrii}{Seneca, Lucius Annaeus 2} \TagName[Lucius Annaeus]{Seneca\nri}{ (the Elder)} \TagName[Lucius Annaeus]{Seneca\nrii}{ (the Younger)} \NameAddInfo[Lucius Annaeus]{Seneca\nri}{ the Elder} \NameAddInfo[Lucius Annaeus]{Seneca\nrii}{ the Younger} We can differentiate between \Senecai\ and \Senecaii; \Senecai \NameQueryInfo{} and \Senecaii \NameQueryInfo{}. Their full index entries are:\\ \ShowIdxPageref[Lucius Annaeus]{Seneca\nri}\\ \ShowIdxPageref[Lucius Annaeus]{Seneca\nrii} \index{Roman names, student} \begin{nameauth} \< CatoY & Marcus Porcius & Cato, the Younger & > \< CatoYi & Marcus Porcius & Cato the Younger & > \end{nameauth} \ExcludeName[Marcus Porcius]{Cato, the Younger} \makeatletter \NameAddInfo[Marcus Porcius]{Cato, the Younger} {\if@nameauth@InHook\ (Uticensis, 94--45 \textsc{bc})% \else Uticensis\fi} \makeatother \JustIndex\CatoYi \CatoY\ is known as \CatoY\ \ForceAffix\CatoY, to distinguish him from his great-grandfather. His names include \SCatoY[Marcus] (\textit{praenomen}), \SCatoY[Porcius] (\textit{nomen}, one of the Porcia clan), and \CatoY, the \textit{cognomen} by which he is best known. His other \textit{agnomen}, \NameQueryInfo{}, means he was born in Utica. \JustIndex\CatoYi He is indexed as: \ShowIdxPageref*{} \index{Roman names, student} \begin{nameauth} \< CatoE & Marcus Porcius & Cato, the Elder & > \< CatoEi & Marcus & Porcius Cato the Elder & > \end{nameauth} \ExcludeName[Marcus Porcius]{Cato, the Elder} \JustIndex\CatoEi \DropAffix\CatoE\ (234--149 \textsc{bc}) is known as \CatoE{} \ForceAffix\CatoE, among other sobriquets. His \textit{praenomen} is \SCatoE[Marcus]. His \textit{nomen} is \SCatoE[Porcius], a member of the Porcia clan. His \textit{cognomen} is \CatoE. \JustIndex\CatoEi Index: \ShowIdxPageref*{} \index{Roman names, scholar} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \section{Multiple Indexes} The Electric Boogaloo\index{Boogaloo, Electric} % main index was created by \Name{Ollie~\& Jerry}. % name index \index{indexes, multiple} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \section{Index Categories} \subsection{Famous Black Americans} \Name[Frederick]{Douglass} rose to eminence by sheer force of character and talents that neither slavery nor caste proscription could crush. Circumstances made \Name[Frederick]{Douglass} a slave, but they could not prevent him from becoming a freeman and a leader among mankind.\\ We also celebrate \MLK, then \MLK. \subsection{Patres Patriae} We mention President \Wash; again, \Wash. Family and close friends called him \SWash.\\ \TagName[George]{Washington}{!as general} We can reminisce about \LWash[General]. \UntagName[George]{Washington} When speaking of \Linc, we can refer to \LLinc[Abe]. \subsection{Philosophers} Among philosophers we consider \Plato\ and \Aris. \subsection{Historical Figures} We ponder about \Aeth, then \Aeth. We note \Soto, then just \Soto. \CapThis\Soto{} starts a sentence. \subsection{Further Discussion} \TagName[George]{Washington}{!as general} \TagName[Dwight D.]{Eisenhower}{!as general} \LWash, \LIke, \LBradley, and \LPatton were high-ranking generals.\\ \SeeAlso\IndexRef[George]{Washington}{Eisenhower} \SeeAlso\IndexRef[Dwight D.]{Eisenhower}{Washington} \IncludeName*[George]{Washington} \IncludeName*[Dwight D.]{Eisenhower} \UntagName[George]{Washington} \UntagName[Dwight D.]{Eisenhower} \Wash\ and \Ike\ also were US presidents. \ForgetName[Omar N.]{Bradley} \ForgetName[George S.]{Patton, Jr.} \TagName[Omar N.]{Bradley}{!colleagues of} \TagName[George S.]{Patton, Jr.}{!colleagues of} \IndexRef[Omar N.]{Bradley}{Eisenhower, Patton} \IndexRef[George S.]{Patton, Jr.}{Bradley, Eisenhower} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \section{More Complex Hooks} % First save main- and front-matter hooks. Then change % first-use hooks for both main matter and front matter. \let\OldFormat\NamesFormat \let\OldFrontNames\FrontNamesFormat \renewcommand*\NamesFormat[1]{\textbf{#1}\unless\ifinner \marginpar{\raggedleft\scriptsize #1}\fi} \renewcommand*\FrontNamesFormat[1]{\textit{#1}\unless\ifinner \marginpar{\raggedleft\scriptsize #1}\fi} \index{complex hooks, intro} \subsection{New Format, Front Matter} \NamesInactive \Name{Vlad, III}[III Dracula], known as \IndexRef{Vlad, Ţepeş}{Vlad III} \SubvertThis\Name*{Vlad, Ţepeş} (\Name*{Vlad, Ţepeş}[the Impaler]) after his death, was the son of \Name{Vlad, II}[II Dracul], a member of the Order of the Dragon. Later instances of ``\Name*{Vlad, III}'' and ``\Name{Vlad, III}'' appear thus. \subsection{New Format, Main Matter} \NamesActive \Name{Vlad, III}[III Dracula], known as \IndexRef{Vlad, Ţepeş}{Vlad III} \SubvertThis\Name*{Vlad, Ţepeş} (\Name*{Vlad, Ţepeş}[the Impaler]) after his death, was the son of \Name{Vlad, II}[II Dracul], a member of the Order of the Dragon. Later instances of ``\Name*{Vlad, III}'' and ``\Name{Vlad, III}'' appear thus. \let\NamesFormat\OldFormat \let\FrontNamesFormat\OldFrontNames \subsection{Old Format, Front and Main} \NamesInactive In the front matter we see: \ForgetThis\Name{Vlad, III}[III Dracula], \Name*{Vlad, III}, and \Name{Vlad, III}.\\ \NamesActive\noindent In the main matter we see: \ForgetThis\Name{Vlad, III}[III Dracula], \Name*{Vlad, III}, and \Name{Vlad, III}. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \section{Template Test} Here we demonstrate that fetching information by using the name pattern is better than reading the internal token registers. This is due to expansion sometimes happening in the basic interface. We set up the following test for our three templates, with indexing suppressed: \begin{itemize} \item If we see the outcome, ``Test\dots passed'', we have success. \item If we see the outcome, ``Test\dots'', we have failure. \end{itemize} \subsection{Test Setup} \begingroup \IndexInactive \begin{VerbatimOut}{\jobname.tmp} \NameAddInfo{Testi}{\dots passed} \NameAddInfo{\noexpand\testname}{\dots passed} \newcommand\testname{Testii} \begin{nameauth} \< Testi & & Testi & > \< Testii & & \noexpand\testname & > \end{nameauth} \end{VerbatimOut} \VerbatimInput[gobble=0]{\jobname.tmp} \input{\jobname.tmp} \subsection{Recommended Hook} We display the name, followed by the tag produced with the most recent name pattern vis: \Verb+\NameQueryInfo{}+ taking a null argument. \begin{VerbatimOut}{\jobname.tmp} \renewcommand*\NamesFormat[1] {#1\NameQueryInfo{}} \end{VerbatimOut} \VerbatimInput[gobble=0]{\jobname.tmp} \input{\jobname.tmp} \begin{tabular}{ll} \Verb+\ForgetThis\Name{Testi}+ & \ForgetThis\Name{Testi} \\ \Verb+\ForgetThis\Testi+ & \ForgetThis\Testi \\ \Verb+\ForgetThis\Name{\noexpand\testname}+ & \ForgetThis\Name{\noexpand\testname} \\ \Verb+\ForgetThis\Testii+ & \ForgetThis\Testii \\ \end{tabular} \subsection{Alternate Hook A} If we try to use the internal token registers, we have to get more complicated, and it does not always work: \begin{VerbatimOut}{\jobname.tmp} \makeatletter \renewcommand*\NamesFormat[1]{% \begingroup% \protected@edef\temp{\endgroup% {#1\noexpand\NameQueryInfo [\unexpanded\expandafter{\the\@nameauth@toksa}] {\unexpanded\expandafter{\the\@nameauth@toksb}} [\unexpanded\expandafter{\the\@nameauth@toksc}]% }% }% \temp% } \makeatother \end{VerbatimOut} \VerbatimInput[gobble=0]{\jobname.tmp} \input{\jobname.tmp} \begin{tabular}{ll} \Verb+\ForgetThis\Name{Testi}+ & \ForgetThis\Name{Testi} \\ \Verb+\ForgetThis\Testi+ & \ForgetThis\Testi \\ \Verb+\ForgetThis\Name{\noexpand\testname}+ & \ForgetThis\Name{\noexpand\testname} \\ \Verb+\ForgetThis\Testii+ & \ForgetThis\Testii \\ \end{tabular} \subsection{Alternate Hook B} This is an ``older'' way of using the internal token registers. It has similar problems with consistency: \begin{VerbatimOut}{\jobname.tmp} \let\ex\expandafter \makeatletter \renewcommand*\NamesFormat[1]{% #1% \ex\ex\ex\ex\ex\ex\ex\NameQueryInfo% \ex\ex\ex\ex\ex\ex\ex[\ex\ex\ex\the% \ex\ex\ex\@nameauth@toksa\ex\ex\ex]% \ex\ex\ex{\ex\the\ex\@nameauth@toksb\ex}% \ex[\the\@nameauth@etoksc]% } \makeatother \end{VerbatimOut} \VerbatimInput[gobble=0]{\jobname.tmp} \input{\jobname.tmp} \begin{tabular}{ll} \Verb+\ForgetThis\Name{Testi}+ & \ForgetThis\Name{Testi} \\ \Verb+\ForgetThis\Testi+ & \ForgetThis\Testi \\ \Verb+\ForgetThis\Name{\noexpand\testname}+ & \ForgetThis\Name{\noexpand\testname} \\ \Verb+\ForgetThis\Testii+ & \ForgetThis\Testii \\ \end{tabular} \endgroup % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \section{Life Dates in Hooks} % Add name tags to names. \NameAddInfo[George]{Washington}{ (1732--99)} \NameAddInfo[Mustafa]{Kemal}{ (1881--1938)} \NameAddInfo{Atat\"urk}{ (in 1934, a special surname)} % Ensure that Atat\"urk is a cross-reference that % has no page entries in the index. \IndexRef{Atat\"urk}{Kemal, Mustafa} % Manually suppress name tag in ``first'' instance \newif\ifNoTag % Redesign formatting hook to usually print a tag % only in ``first'' instance. On exit, It resets % the flag that suppresses tags, making that flag % work only once per name use. \renewcommand*\NamesFormat[1] {% #1\unless\ifNoTag\NameQueryInfo{}\fi \global\NoTagfalse% } \ForgetThis\Name[George]{Washington} held office as the first US president from 1789 to 1797. \Name[George]{Washington} was the only president whose term in office was completely in the eighteenth century. If we need to trigger the first use hook at some point, we can suppress dates and get an automatic long instance via: \NoTagtrue\ForgetThis\Name[George]{Washington}. Or we can trigger the first-use hook in a subsequent name use and still have dates: \ForceName\Name[George]{Washington}. We can add name info tags to names used only as cross- references. For example, \Name[Mustafa]{Kemal} was granted the name \Name{Atat\"urk}. We mention \Name[Mustafa]{Kemal} and \Name{Atat\"urk} again. Likewise, we can trigger a first use, but with no name tag tag: \NoTagtrue\ForgetThis\Name{Atat\"urk}. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \section{Alternate Formatting} \AltFormatActive \renewcommand*\NamesFormat{} \renewcommand*\MainNameHook{\AltOff} \noindent \ForgetThis\Name[Konrad]{\noexpand\textSC{Zuse}}; \Name[Konrad]{\noexpand\textSC{Zuse}}\\ \ForgetThis\Name[Ada]{\noexpand\textIT{Lovelace}}; \Name[Ada]{\noexpand\textIT{Lovelace}}\\ \ForgetThis\Name[Charles]{\noexpand\textBF{Babbage}}; \Name[Charles]{\noexpand\textBF{Babbage}}\\ \ForgetThis\Name{\noexpand\textUC{Kanade}, Takeo}; \Name{\noexpand\textUC{Kanade}, Takeo} \index{formatting, alternate} \renewcommand*\MainNameHook{\sffamily\AltOff} \ForgetThis\Luth\ was a leading figure in the Protestant Reformation. \Luth\ believed that one is declared righteous in a forensic sense by divine grace through faith created by the Holy Spirit via the Gospel and the Sacraments. \ForgetThis\Cath\ was not only Queen of France in her own right, but she also guided the reigns of her three sons. \CapThis\LCath[\noexpand\AltCaps{d}e'] was blamed for the St.\ Bartholomew's Day massacre that saw the murder of thousands of Huguenots. \index{formatting, alternate} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \section{Grammatical Inflections in Names} \newif\ifGenitive \newif\ifDoGenitive \newcommand*\GEN{\ifDoGenitive\textSC{'s}\fi} \renewcommand*\NamesFormat[1] {\ifGenitive\DoGenitivetrue\fi#1\global\Genitivefalse} \renewcommand*\MainNameHook[1] {\ifGenitive\DoGenitivetrue\fi\AltOff#1\global\Genitivefalse} Consider \Genitivetrue\Jeff\ legacy as the author of the colonies' Declaration of Independence and his impact as third president of the United States. \Jeff\ was a complex historical figure whose actions defy a consistent moral compass both in public policy and in personal affairs. \index{inflections, grammatical} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \section{Sample Reference Work I} % Make a cross-reference from a variant name form to the % form of the head-words \IndexRef[Heinrich Wilhelm]{\noexpand\textSC{R\"uhmann}} {\noexpand\textSC{R\"uhmann}, Heinz} % Define the formatting hooks. Since we use the `altformat' % option, alternate formatting is turned off in later % name uses. \renewcommand*\NamesFormat{} \renewcommand*\MainNameHook{\AltOff} % Typeset head-words with a slanted font. \newcommand{\RefArticle}[3] {% \def\Check{#2}% \ifx\Check\empty \noindent\ForgetThis\textsl{#1}\ #3 \else \noindent\ForgetThis\textsl{#1}\ #2\ #3 \fi\medskip } \index{reference work} \RefArticle {\RevComma\Name[Greta]{\noexpand\textSC{Garbo}}} {} {(18 September 1905\,--\,15 April 1990) was a Swedish film actress during the 1920s and 1930s. \Name[Greta]{\noexpand\textSC{Garbo}}\dots} \RefArticle {\Name{\noexpand\textSC{Misora}, Hibari}} {(W:\,``\RevName\Name*{\noexpand\textSC{Misora}, Hibari}'';} {29 May 1937\,--\,24 June 1989) was a Japanese singer and actress noted for her positive message. \Name{\noexpand\textSC{Misora}, Hibari}\dots} \RefArticle {\RevComma\Name[Heinz]{\noexpand\textSC{R\"uhmann}}} {(\SubvertThis\ForceName \FName[Heinrich Wilhelm]{\noexpand\textSC{R\"uhmann}};} {7 March 1902\,--\,3 October 1994) was a German actor in over 100 films. \Name[Heinz]{\noexpand\textSC{R\"uhmann}}\dots} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \section{Roman Names II} \subsection{General Reference} % Global Boolean flags need to be defined only once. \newif\ifNoPraenomen \newif\ifNoCognomen \newif\ifNoGens \newif\ifNoAgnomen % Local Boolean flags need to be defined only once. \newif\ifXPrae \newif\ifXCogn \newif\ifXGens \newif\ifXAgno % Name variant macros need to be defined uniquely for each % name. First is Scipio. Second is Gracchus. \newcommand*\SCIPi {% \ifXGens Publius\else \ifXPrae Cornelius\else Publius Cornelius% \fi \fi } \newcommand*\SCIPii {% \ifXAgno Scipio\else Scipio Africanus% \fi } \newcommand*\TSemp {% \ifXGens Tiberius\else \ifXPrae Sempronius\else Tiberius Sempronius% \fi \fi } % We add the name tag. \NameAddInfo[\noexpand\TSemp]{Gracchus} { (consul, 177 \textsc{bc})} % Although it is helpful to set everything up % In the preamble, it is not absolutely necessary. % Here we define the simpler set of formatting hooks % for Scipio, although the complex hooks will work % for both equally as well. \renewcommand*\NamesFormat[1] {% \ifNoPraenomen\XPraetrue\fi% \ifNoGens\XGenstrue\fi% \ifNoCognomen\XCogntrue\fi% \ifNoAgnomen\XAgnotrue\fi% #1\NameQueryInfo{}% \global\NoPraenomenfalse% \global\NoGensfalse% \global\NoCognomenfalse% \global\NoAgnomenfalse% } \renewcommand*\MainNameHook[1] {% \ifNoPraenomen\XPraetrue\fi% \ifNoGens\XGenstrue\fi% \ifNoCognomen\XCogntrue\fi% \ifNoAgnomen\XAgnotrue\fi% #1% \global\NoPraenomenfalse% \global\NoGensfalse% \global\NoCognomenfalse% \global\NoAgnomenfalse% } \index{Roman names, student} \NoAgnomentrue\Scipio\ was born around 236 \textsc{bc} into the Scipiones branch of the Cornelii clan. \NoAgnomentrue\Scipio\ rose to military fame during the Second Punic War. Thereafter he was known as \Scipio. He flourished during the Egyptian reigns of \Name{Ptolemy, IV}[IV Philopator] and \Name{Ptolemy, V}[V Epiphanes], and the Syrian reigns of \Name{Seleucus, III}[III Ceraunus] and \Name{Antiochus, III}[III the Great]. \TGrac\ served as tribune of the plebs in 184 \textsc{bc}. \TGrac\ was elected praetor for 180 \textsc{bc}, after which he was appointed governor of Hispania Citerior, serving with the rank of proconsul. In 177 \textsc{bc}, he was elected consul, again in 163 \textsc{bc}. \subsection{Scholarly Work} % Name variant macros need to be defined % uniquely for each name. \newcommand*\CSB {% \ifXGens \ifXAgno Scipio\else Scipio Barbatus\fi \else \ifXCogn Cornelius\else \ifXAgno Cornelius Scipio\else Cornelius Scipio Barbatus% \fi \fi \fi } \index{Roman names, scholar} \OScipio\ was born around 337 \textsc{bc} into the Scipiones branch of the Cornelii clan, one of the large patrician clans. \NoGenstrue\NoAgnomentrue\OScipio\ was one of the two elected consuls in 298 \textsc{bc} and served during the Third Samnite War. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \section{Reference Work II} % Boolean flags; the first sets up headwords and the second % indicates that a Non-Western form should not be reversed. \newif\ifHeadword \newif\ifAncientName % Sorting and tagging the names: % Adding name information: \NameAddInfo{Aristotle}{ (384--322 \textsc{bc})} \NameAddInfo[Charles]{\noexpand\textBF{Babbage}}{ (1791--1871)} \NameAddInfo{\noexpand\textUC{Kanade}, Takeo}{ (1945-- )} \NameAddInfo[Ada]{\noexpand\textIT{Lovelace}} { (Augusta Ada King, Countess of Lovelace [née Byron]; 1815--52)} % Redefining the formatting hooks: \makeatletter \renewcommand\NamesFormat[1] {% \ifHeadword \ifNameauthWestern \@nameauth@RevThisCommatrue% \bfseries \NameParser% \normalfont\NameQueryInfo{}% \else \begingroup% \bfseries \NameParser% \unless\ifAncientName \normalfont; W:\AltOff\space \@nameauth@RevThistrue \NameParser% \fi \normalfont\NameQueryInfo{}% \endgroup% \fi \else \NameParser% \fi \global\Headwordfalse% \global\AncientNamefalse% } \makeatother \renewcommand\MainNameHook{\AltOff} % Define related macros: \newcommand\Headword{\Headwordtrue\ForgetThis} \renewcommand{\RefArticle}[2] {% \noindent\Headword #1 #2 \medskip } \index{reference work} \RefArticle{\AncientNametrue\Name{Aristotle}}{was the first to offer a system of logic, most notably syllogistic logic, that would become the basis for discrete states and circuitry of digital computers. \Name{Aristotle}\dots} \RefArticle{\Name[Charles]{\noexpand\textBF{Babbage}}}{designed and built the Difference Engine and began work on the Analytical Engine. \Name[Charles]{\noexpand\textBF{Babbage}}\dots} \RefArticle{\Name{\noexpand\textUC{Kanade}, Takeo}}{is one of the foremost pioneers in the field of computer vision. \Name{\noexpand\textUC{Kanade}, Takeo}\dots} \RefArticle{\Name[Ada]{\noexpand\textIT{Lovelace}}}{collaborated with \Name*[Charles]{\noexpand\textBF{Babbage}}* and wrote what some consider to be the first computer program for the Analytical Engine. \Name[Ada]{\noexpand\textIT{Lovelace}}\dots} \index{reference work} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \section{Marginalia} % Global Boolean flags need to be defined only once. \newif\ifSpecialFN \newif\ifSpecialSN \newif\ifRevertSN % Name variant macros need to be defined % uniquely for each name. % For a long name, we want to use ``William'' in the text % and ``Wm.'' in the margin. \newcommand*\WM {% \ifSpecialFN Wm.\else William\fi } % The first surname use will be ``Shakespeare'', but ``the % Bard'' thereafter. We allow for alternate caps. % We can get ``Shakespeare'' thereafter by toggling a flag. \newcommand*\SHK {% \ifRevertSN \textSC{Shakespeare}\else \ifSpecialSN \noexpand\AltCaps{t}he Bard\else \textSC{Shakespeare}% \fi \fi } % Here is how we toggle that flag. \newcommand*\Revert{\RevertSNtrue} % The ``first-use'' hook prints a name, then tries % to insert a margin note using a different name form % and the user-accessible parser. Finally it resets % the reversion flag, which is only effective in the % ``subsequent-use'' hook. Note how macros in the % name arguments take the role of what the internal % Boolean flags might otherwise handle. \makeatletter \renewcommand*\NamesFormat[1] {% \RevertSNfalse\SpecialFNfalse\SpecialSNfalse% #1% \unless\ifinner \marginpar {% \footnotesize\raggedleft% \SpecialFNtrue\SpecialSNfalse% \NameParser% }% \fi \global\RevertSNfalse% } \renewcommand*\MainNameHook[1] {% \AltOff\SpecialFNfalse\SpecialSNtrue% #1% \unless\ifinner \unless\ifRevertSN \marginpar {% \footnotesize\raggedleft% \SpecialFNfalse\SpecialSNfalse% \NameParser% }% \fi \fi \global\RevertSNfalse% } \makeatother \index{special uses} \ForgetThis\Shak\ is the national poet of England in much the same way that \Name[Robert]{\textSC{Burns}} is that of Scotland. With the latter's rise of influence in the 1800s, \Revert\Shak\ became known as ``\Shak''. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \section{Customization Using Internals} \makeatletter \newcommand*\Fbox[1]{% \if@nameauth@DoAlt\protect\fbox{#1}\else#1\fi } \makeatother \renewcommand*\NamesFormat{} \renewcommand*\FrontNamesFormat{} \renewcommand*\MainNameHook{\AltOff} \renewcommand*\FrontNameHook{\AltOff} \index{customization, easy} \deSmet\ was a Jesuit missionary who arrived in North America in 1821 at the age of twenty, after a year of seminary education. \CapThis\deSmet\ was ordained in 1827 and worked among American Indian nations after 1837. We can show the forms \LdeSmet\ and \SdeSmet. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \section{Customization Using Separate Macros} We do not show this section in the manual because it starts to go farther afield of the main focus of \textsf{nameauth}. Nevertheless, we show it for completeness. \newif\ifFbox % Replaces \if@nameauth@DoAlt \AltOn \AltOff \newif\ifFirstCap % Replaces \if@nameauth@DoCaps \AltCaps \newif\ifInHook % Replaces \if@nameauth@InHook hook dispatcher \Fboxtrue % Replaces \AltFormatActive % Alternate formatting macro definition \renewcommand*\Fbox[1]{% \ifFbox\protect\fbox{#1}\else#1\fi } % Redefinition of \AltCaps and \CapThis \renewcommand*\AltCaps[1]{% \ifInHook \ifFirstCap\MakeUppercase{#1}\else#1\fi \else #1% \fi } \renewcommand*\CapThis{\FirstCaptrue} \renewcommand*\NamesFormat[1] {\InHooktrue\NameParser\global\FirstCapfalse} \renewcommand*\MainNameHook[1] {\Fboxfalse\InHooktrue\NameParser\global\FirstCapfalse} \let\FrontNamesFormat\Namesformat \let\FrontNameHook\MainNameHook \index{customization, complicated} \ForgetThis\deSmet\ was a Jesuit missionary who arrived in North America in 1821 at the age of twenty, after a year of seminary education. \CapThis\deSmet\ was ordained in 1827 and worked among American Indian nations after 1837. We can show the forms \LdeSmet\ and \SdeSmet. \newif\ifCaps % Replaces \if@nameauth@DoAlt \Capstrue % Replaces \AltFormatActive % Alternate formatting macro definition \renewcommand*\textSC[1]{\ifCaps\textsc{#1}\else#1\fi} % Redefinition of \AltCaps and \CapThis \renewcommand*\AltCaps[1]{% \ifInHook \ifFirstCap\MakeUppercase{#1}\else#1\fi \else #1% \fi } \renewcommand*\CapThis{\FirstCaptrue} \renewcommand*\NamesFormat[1] {\InHooktrue#1\global\FirstCapfalse} \renewcommand*\MainNameHook[1] {\Capsfalse\InHooktrue#1\global\FirstCapfalse} \let\FrontNamesFormat\Namesformat \let\FrontNameHook\MainNameHook \ForgetThis\Luth\ was a leading figure in the Protestant Reformation. \Luth\ believed that one is declared righteous in a forensic sense by divine grace through faith created by the Holy Spirit via the Gospel and the Sacraments. \ForgetThis\Cath\ was not only Queen of France in her own right, but she also guided the reigns of her three sons. \CapThis\LCath[\noexpand\AltCaps{d}e'] was blamed for the St.\ Bartholomew's Day massacre that saw the murder of thousands of Huguenots. \renewcommand*\NamesFormat{} \newcommand*\FrontNamesFormat{} \renewcommand*\MainNameHook{} \renewcommand*\FrontNameHook{} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \section{Full Customization} We do not go into this much detail in the manual because it starts to go farther afield of the main focus of \textsf{nameauth}. Nevertheless, we show it for completeness. \subsection[With xparse]{With \textsf{xparse}} \makeatletter % Change the general-case name macro to show % a name in a framed, colored box. \NewDocumentCommand{\MyName}{O{} m O{}} {\fcolorbox{black}{gray!25!white}{\@nameauth@Name[#1]{#2}[#3]}} % Likewise change the macro for when names are forced long. \NewDocumentCommand{\MyLName}{O{} m O{}} {\fcolorbox{black}{green!25!white}{\@nameauth@Name[#1]{#2}[#3]}} % Likewise change the macro when personal names are desired. \NewDocumentCommand{\MyFName}{O{} m O{}} {\fcolorbox{black}{yellow!25!white}{\@nameauth@Name[#1]{#2}[#3]}} \makeatother % Change the formatting hooks, but do not use alternate. % formatting, which is separate from that above. \renewcommand*\NamesFormat[1]{\scshape#1} \renewcommand*\MainNameHook[1]{#1} % Change the naming macro hooks. \renewcommand*\NameauthName{\MyName} \renewcommand*\NameauthLName{\MyLName} \renewcommand*\NameauthFName{\MyFName} \index{customization, insane} \ForgetThis\Name[Adolf]{Harnack} was a theologian who stressed the Fatherhood of God and the brotherhood of man. \Name[Adolf]{Harnack} flourished in the early twentieth century; \Name*[Adolf von]{Harnack}; \FName[Adolf]{Harnack}. \AltFormatInactive \makeatletter \renewcommand*\NameauthName{\@nameauth@Name} \renewcommand*\NameauthLName{\@nameauth@Name} \renewcommand*\NameauthFName{\@nameauth@Name} \makeatother \renewcommand*\NamesFormat{} \renewcommand*\MainNameHook{} \subsection[With xargs]{With \textsf{xargs}} \makeatletter % Change the general-case name macro to show % a name in a framed, colored box. \renewcommandx\MyName[3][1=\empty, 3=\empty] {\fcolorbox{black}{gray!25!white}{\@nameauth@Name[#1]{#2}[#3]}} % Likewise change the macro for when names are forced long. \renewcommandx\MyLName[3][1=\empty, 3=\empty] {\fcolorbox{black}{green!25!white}{\@nameauth@Name[#1]{#2}[#3]}} % Likewise change the macro when personal names are desired. \renewcommandx\MyFName[3][1=\empty, 3=\empty] {\fcolorbox{black}{yellow!25!white}{\@nameauth@Name[#1]{#2}[#3]}} \makeatother % Change the formatting hooks, but do not use alternate. % formatting, which is separate from that above. \renewcommand*\NamesFormat[1]{\scshape#1} \renewcommand*\MainNameHook[1]{#1} % Change the naming macro hooks. \renewcommand*\NameauthName{\MyName} \renewcommand*\NameauthLName{\MyLName} \renewcommand*\NameauthFName{\MyFName} \index{customization, insane} \ForgetThis\Name[Adolf]{Harnack} was a theologian who stressed the Fatherhood of God and the brotherhood of man. \Name[Adolf]{Harnack} flourished in the early twentieth century; \Name*[Adolf von]{Harnack}; \FName[Adolf]{Harnack}. \AltFormatInactive \makeatletter \renewcommand*\NameauthName{\@nameauth@Name} \renewcommand*\NameauthLName{\@nameauth@Name} \renewcommand*\NameauthFName{\@nameauth@Name} \makeatother \renewcommand*\NamesFormat{} \renewcommand*\MainNameHook{} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \section{\protect\LaTeX\ Engines} \subsection{\protect\texttt{compat.tex}} One can define \Verb+\nolangs+ before loading the file below to inhibit the default language loading. We use Latin Modern for the font to get a consistent look. Below we list the salient cross-engine points from \texttt{compat.tex}, included with \textsf{nameauth}. \index{\protect\LaTeX\ engines} \begin{quote}\small \VerbatimInput[gobble=0, firstline=24]{compat.tex} \end{quote} \subsection{Check Engine Tests} In the body text we can use something like the test below for:\quad \fbox{\ifxetex doing \texttt{pdf} things\else \ifpdf doing \texttt{pdf} things\else doing \texttt{dvi} things\fi \fi} \begin{quote}\small \begin{Verbatim} \ifxetex doing \texttt{pdf} things \else \ifpdf doing \texttt{pdf} things \else doing \texttt{dvi} things \fi \fi \end{Verbatim} \end{quote} The following equivalent conditional statements can help a macro or just the body text to work under multiple engines: \begin{quote}\small \begin{Verbatim} \ifxetex xelatex% \else \ifluatex \ifpdf lualatex (pdf)% \else lualatex (dvi)% \fi \else \ifpdf pdflatex% \else latex (dvi)% \fi \fi \fi \end{Verbatim} \begin{Verbatim} \unless\ifxetex \unless\ifluatex \ifpdf pdflatex% \else latex (dvi)% \fi \else \ifpdf lualatex (pdf)% \else lualatex (dvi)% \fi \fi \else xelatex% \fi \end{Verbatim} \end{quote} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \section{Miscellaneous Tests: Spaces} Here we test to see if any unwanted spaces exist in macros that take name arguments. If everything is OK, one should see two vertical bars \texttt{||} where no output in the text is produced, or no spaces between an enclosed name and the bars. This section also tests if most possible argument combinations work in most macros that take name arguments. \subsection{Western Name with Suffix} \begin{quote} \Verb+\Name[FNNa]{SNNa, Affix}[Alternate]+\dotfill |\Name[FNNa]{SNNa, Affix}[Alternate]|\\ \Verb+\Name*[FNNa]{SNNa, Affix}+\dotfill |\Name*[FNNa]{SNNa, Affix}|\\ \Verb+\DropAffix\Name*[FNNa]{SNNa, Affix}[Alternate]+\dotfill |\DropAffix\Name*[FNNa]{SNNa, Affix}[Alternate]|\\ \Verb+\DropAffix\Name*[FNNa]{SNNa, Affix}+\dotfill |\DropAffix\Name*[FNNa]{SNNa, Affix}|\\ \Verb+\Name[FNNa]{SNNa, Affix}[Alternate]+\dotfill |\Name[FNNa]{SNNa, Affix}[Alternate]|\\ \Verb+\Name[FNNa]{SNNa, Affix}+\dotfill |\Name[FNNa]{SNNa, Affix}|\\ \Verb+\FName[FNNa]{SNNa, Affix}[Alternate]+\dotfill |\FName[FNNa]{SNNa, Affix}[Alternate]|\\ \Verb+\FName[FNNa]{SNNa, Affix}+\dotfill |\FName[FNNa]{SNNa, Affix}| \end{quote} \subsection{Western Name without Suffix} \begin{quote} \Verb+\Name[FNNb]{SNNb}[Alternate]+\dotfill |\Name[FNNb]{SNNb}[Alternate]|\\ \Verb+\Name*[FNNb]{SNNb}+\dotfill |\Name*[FNNb]{SNNb}|\\ \Verb+\Name[FNNb]{SNNb}[Alternate]+\dotfill |\Name[FNNb]{SNNb}[Alternate]|\\ \Verb+\Name[FNNb]{SNNb}+\dotfill |\Name[FNNb]{SNNb}|\\ \Verb+\FName[FNNb]{SNNb}[Alternate]+\dotfill |\FName[FNNb]{SNNb}[Alternate]|\\ \Verb+\FName[FNNb]{SNNb}+\dotfill |\FName[FNNb]{SNNb}| \end{quote} \subsection{Non-Western Name, Current Syntax} \begin{quote} \Verb+\Name{SNNc, Affix}[Alternate]+\dotfill |\Name{SNNc, Affix}[Alternate]|\\ \Verb+\Name*{SNNc, Affix}+\dotfill |\Name*{SNNc, Affix}|\\ \Verb+\Name{SNNc, Affix}[Alternate]+\dotfill |\Name{SNNc, Affix}[Alternate]|\\ \Verb+\Name{SNNc, Affix}+\dotfill |\Name{SNNc, Affix}|\\ \Verb+\FName{SNNc, Affix}[Alternate]+\dotfill |\FName{SNNc, Affix}[Alternate]|\\ \Verb+\FName{SNNc, Affix}+\dotfill |\FName{SNNc, Affix}|\\ \Verb+\ForceFN\FName{SNNc, Affix}[Alternate]+\dotfill |\ForceFN\FName{SNNc, Affix}[Alternate]|\\ \Verb+\ForceFN\FName{SNNc, Affix}+\dotfill |\ForceFN\FName{SNNc, Affix}| \end{quote} \subsection{Non-Western Name, Obsolete Syntax} \begin{quote} \Verb+\Name{SNNd}[Alternate]+\dotfill |\Name{SNNd}[Alternate]|\\ \Verb+\Name*{SNNd}[Alternate]+\dotfill |\Name*{SNNd}[Alternate]|\\ \Verb+\Name{SNNd}[Alternate]+\dotfill |\Name{SNNd}[Alternate]|\\ \Verb+\FName{SNNd}[Alternate]+\dotfill |\FName{SNNd}[Alternate]|\\ \Verb+\ForceFN\FName{SNNd}[Alternate]+\dotfill |\ForceFN\FName{SNNd}[Alternate]| \end{quote} \subsection{Working with All Forms} \subsubsection{Index Names and Xrefs} \begin{quote} \Verb+\IndexName[FNNe]{SNNe, Affix}[Alternate]+\dotfill |\IndexName[FNNe]{SNNe, Affix}[Alternate]|\\ \Verb+\IndexName[FNNe]{SNNe, Affix}+\dotfill |\IndexName[FNNe]{SNNe, Affix}|\\ \Verb+\IndexName{SNNf, Affix}[Alternate]+\dotfill |\IndexName{SNNf, Affix}[Alternate]|\\ \Verb+\IndexName{SNNf, Affix}+\dotfill |\IndexName{SNNf, Affix}|\\ \Verb+\IndexName{SNNf}[Alternate]+\dotfill |\IndexName{SNNf}[Alternate]| \end{quote} \begin{quote} \Verb+\IndexRef[FNNg]{SNNg, Affix}[Alternate]{Target}+\dotfill |\IndexRef[FNNg]{SNNg, Affix}[Alternate]{Target}|\\ \Verb+\IndexRef[FNNg]{SNNg, Affix}{Target}+\dotfill |\IndexRef[FNNg]{SNNg, Affix}{Target}|\\ \Verb+\IndexRef{SNNh, Affix}[Alternate]{Target}+\dotfill |\IndexRef{SNNh, Affix}[Alternate]{Target}|\\ \Verb+\IndexRef{SNNh, Affix}{Target}+\dotfill |\IndexRef{SNNh, Affix}{Target}|\\ \Verb+\IndexRef{SNNh}[Alternate]{Target}+\dotfill |\IndexRef{SNNh}[Alternate]{Target}| \end{quote} \subsubsection{Excluding and Including} \begin{quote} \Verb+\ExcludeName[FNNi]{SNNi, Affix}[Alternate]+\dotfill |\ExcludeName[FNNi]{SNNi, Affix}[Alternate]|\\ \Verb+\ExcludeName[FNNi]{SNNi, Affix}+\dotfill |\ExcludeName[FNNi]{SNNi, Affix}|\\ \Verb+\ExcludeName{SNNj, Affix}[Alternate]+\dotfill |\ExcludeName{SNNj, Affix}[Alternate]|\\ \Verb+\ExcludeName{SNNj, Affix}+\dotfill |\ExcludeName{SNNj, Affix}|\\ \Verb+\ExcludeName{SNNj}[Alternate]+\dotfill |\ExcludeName{SNNj}[Alternate]| \end{quote} \begin{quote} \Verb+\IncludeName[FNNi]{SNNi, Affix}[Alternate]+\dotfill |\IncludeName[FNNi]{SNNi, Affix}[Alternate]|\\ \Verb+\IncludeName[FNNi]{SNNi, Affix}+\dotfill |\IncludeName[FNNi]{SNNi, Affix}|\\ \Verb+\IncludeName{SNNj, Affix}[Alternate]+\dotfill |\IncludeName{SNNj, Affix}[Alternate]|\\ \Verb+\IncludeName{SNNj, Affix}+\dotfill |\IncludeName{SNNj, Affix}|\\ \Verb+\IncludeName{SNNj}[Alternate]+\dotfill |\IncludeName{SNNj}[Alternate]| \end{quote} \begin{quote} \Verb+\IncludeName*[FNNi]{SNNi, Affix}[Alternate]+\dotfill |\IncludeName*[FNNi]{SNNi, Affix}[Alternate]|\\ \Verb+\IncludeName*[FNNi]{SNNi, Affix}+\dotfill |\IncludeName*[FNNi]{SNNi, Affix}|\\ \Verb+\IncludeName*{SNNj, Affix}[Alternate]+\dotfill |\IncludeName*{SNNj, Affix}[Alternate]|\\ \Verb+\IncludeName*{SNNj, Affix}+\dotfill |\IncludeName*{SNNj, Affix}|\\ \Verb+\IncludeName*{SNNj}[Alternate]+\dotfill |\IncludeName*{SNNj}[Alternate]| \end{quote} \subsubsection{Index Sorting} \begin{quote} \Verb+\PretagName[FNNk]{SNNk, Affix}[Alternate]{Sorta}+\dotfill |\PretagName[FNNk]{SNNk, Affix}[Alternate]{Sorta}|\\ \Verb+\PretagName[FNNl]{SNNl, Affix}{Sortb}+\dotfill |\PretagName[FNNl]{SNNl, Affix}{Sortb}|\\ \Verb+\PretagName{SNNm, Affix}[Alternate]{Sortc}+\dotfill |\PretagName{SNNm, Affix}[Alternate]{Sortc}|\\ \Verb+\PretagName{SNNn, Affix}{Sortd}+\dotfill |\PretagName{SNNn, Affix}{Sortd}|\\ \Verb+\PretagName{SNNo}[Alternate]{Sorte}+\dotfill |\PretagName{SNNo}[Alternate]{Sorte}| \end{quote} \subsubsection{Index Tagging and Untagging} \begin{quote} \Verb+\TagName[FNNa]{SNNa, Affix}[Alternate]{Tag}+\dotfill |\TagName[FNNa]{SNNa, Affix}[Alternate]{Tag}|\\ \Verb+\TagName[FNNa]{SNNa, Affix}{Tag}+\dotfill |\TagName[FNNa]{SNNa, Affix}{Tag}|\\ \Verb+\TagName[FNNb]{SNNb}[Alternate]{Tag}+\dotfill |\TagName[FNNb]{SNNb}[Alternate]{Tag}|\\ \Verb+\TagName[FNNb]{SNNb}{Tag}+\dotfill |\TagName[FNNb]{SNNb, Affix}{Tag}|\\ \Verb+\TagName{SNNc, Affix}[Alternate]{Tag}+\dotfill |\TagName{SNNc, Affix}[Alternate]{Tag}|\\ \Verb+\TagName{SNNc, Affix}{Tag}+\dotfill |\TagName{SNNc, Affix}{Tag}|\\ \Verb+\TagName{SNNd}[Alternate]{Tag}+\dotfill |\TagName{SNNd}[Alternate]{Tag}| \end{quote} \begin{quote} \Verb+\UntagName[FNNa]{SNNa, Affix}[Alternate]+\dotfill |\UntagName[FNNa]{SNNa, Affix}[Alternate]|\\ \Verb+\UntagName[FNNa]{SNNa, Affix}+\dotfill |\UntagName[FNNa]{SNNa, Affix}|\\ \Verb+\UntagName[FNNb]{SNNb}[Alternate]+\dotfill |\UntagName[FNNb]{SNNb}[Alternate]|\\ \Verb+\UntagName[FNNb]{SNNb}+\dotfill |\UntagName[FNNb]{SNNb, Affix}|\\ \Verb+\UntagName{SNNc, Affix}[Alternate]+\dotfill |\UntagName{SNNc, Affix}[Alternate]|\\ \Verb+\UntagName{SNNc, Affix}+\dotfill |\UntagName{SNNc, Affix}|\\ \Verb+\UntagName{SNNd}[Alternate]+\dotfill |\UntagName{SNNd}[Alternate]| \end{quote} \subsubsection{Name Info} \begin{quote} \Verb+\NameAddInfo[FNNa]{SNNa, Affix}[Alternate]{Info1}+\dotfill |\NameAddInfo[FNNa]{SNNa, Affixa}[Alternate]{Info1}|\\ \Verb+\NameAddInfo[FNNa]{SNNa, Affix}{Info2}+\dotfill |\NameAddInfo[FNNa]{SNNa, Affix}{Info2}|\\ \Verb+\NameAddInfo[FNNb]{SNNb}[Alternate]{Info3}+\dotfill |\NameAddInfo[FNNb]{SNNb}[Alternate]{Info3}|\\ \Verb+\NameAddInfo[FNNb]{SNNb}{Info4}+\dotfill |\NameAddInfo[FNNb]{SNNb}{Info4}|\\ \Verb+\NameAddInfo{SNNc, Affix}[Alternate]{Info5}+\dotfill |\NameAddInfo{SNNc, Affix}[Alternate]{Info5}|\\ \Verb+\NameAddInfo{SNNc, Affix}{Info6}+\dotfill |\NameAddInfo{SNNc, Affix}{Info6}|\\ \Verb+\NameAddInfo{SNNd}[Alternate]{Info7}+\dotfill |\NameAddInfo{SNNd}[Alternate]{Info7}| \end{quote} \begin{quote} \Verb+\NameQueryInfo[FNNa]{SNNa, Affix}[Alternate]+\dotfill |\NameQueryInfo[FNNa]{SNNa, Affix}[Alternate]|\\ \Verb+\NameQueryInfo[FNNa]{SNNa, Affix}+\dotfill |\NameQueryInfo[FNNa]{SNNa, Affix}|\\ \Verb+\NameQueryInfo[FNNb]{SNNb}[Alternate]+\dotfill |\NameQueryInfo[FNNb]{SNNb}[Alternate]|\\ \Verb+\NameQueryInfo[FNNb]{SNNb}+\dotfill |\NameQueryInfo[FNNb]{SNNb}|\\ \Verb+\NameQueryInfo{SNNc, Affix}[Alternate]+\dotfill |\NameQueryInfo{SNNc, Affix}[Alternate]|\\ \Verb+\NameQueryInfo{SNNc, Affix}+\dotfill |\NameQueryInfo{SNNc, Affix}|\\ \Verb+\NameQueryInfo{SNNd}[Alternate]+\dotfill |\NameQueryInfo{SNNd}[Alternate]| \end{quote} \begin{quote} \Verb+\NameClearInfo[FNNa]{SNNa, Affix}[Alternate]+\dotfill |\NameClearInfo[FNNa]{SNNa, Affix}[Alternate]|\\ \Verb+\NameClearInfo[FNNa]{SNNa, Affix}+\dotfill |\NameClearInfo[FNNa]{SNNa, Affix}|\\ \Verb+\NameClearInfo[FNNb]{SNNb}[Alternate]+\dotfill |\NameClearInfo[FNNb]{SNNb}[Alternate]|\\ \Verb+\NameClearInfo[FNNb]{SNNb}+\dotfill |\NameClearInfo[FNNb]{SNNb}|\\ \Verb+\NameClearInfo{SNNc, Affix}[Alternate]+\dotfill |\NameClearInfo{SNNc, Affix}[Alternate]|\\ \Verb+\NameClearInfo{SNNc, Affix}+\dotfill |\NameClearInfo{SNNc, Affix}|\\ \Verb+\NameClearInfo{SNNd}[Alternate]+\dotfill |\NameClearInfo{SNNd}[Alternate]| \end{quote} \subsubsection{Forgetting, Global} \begin{quote} \Verb+\ForgetName[FNNa]{SNNa, Affix}[Alternate]+\dotfill |\ForgetName[FNNa]{SNNa, Affix}[Alternate]|\\ \Verb+\ForgetName[FNNa]{SNNa, Affix}+\dotfill |\ForgetName[FNNa]{SNNa, Affix}|\\ \Verb+\ForgetName[FNNb]{SNNb}[Alternate]+\dotfill |\ForgetName[FNNb]{SNNb}[Alternate]|\\ \Verb+\ForgetName[FNNb]{SNNb}+\dotfill |\ForgetName[FNNb]{SNNb}|\\ \Verb+\ForgetName{SNNc, Affix}[Alternate]+\dotfill |\ForgetName{SNNc, Affix}[Alternate]|\\ \Verb+\ForgetName{SNNc, Affix}+\dotfill |\ForgetName{SNNc, Affix}|\\ \Verb+\ForgetName{SNNd}[Alternate]+\dotfill |\ForgetName{SNNd}[Alternate]| \end{quote} \subsubsection{Subverting, Local} \begin{quote} \Verb+\LocalNames+\LocalNames\\ \Verb+\SubvertName[FNNa]{SNNa, Affix}[Alternate]+\dotfill |\SubvertName[FNNa]{SNNa, Affix}[Alternate]|\\ \Verb+\SubvertName[FNNb]{SNNb}[Alternate]+\dotfill |\SubvertName[FNNb]{SNNb}[Alternate]|\\ \Verb+\SubvertName{SNNc, Affix}[Alternate]+\dotfill |\SubvertName{SNNc, Affix}[Alternate]|\\ \Verb+\SubvertName{SNNd}[Alternate]+\dotfill |\SubvertName{SNNd}[Alternate]|\\ \Verb+\GlobalNames+\GlobalNames \end{quote} \subsubsection{Name Conditionals} \begin{quote} \Verb+\IfMainName[FNNa]{SNNa, Affix}{Y}{N}+\dotfill |\IfMainName[FNNa]{SNNa, Affix}{Y}{N}|\\ \Verb+\IfMainName[FNNb]{SNNb}{Y}{N}+\dotfill |\IfMainName[FNNb]{SNNb}{Y}{N}|\\ \Verb+\IfMainName{SNNc, Affix}{Y}{N}+\dotfill |\IfMainName{SNNc, Affix}{Y}{N}|\\ \Verb+\IfMainName{SNNd}[Alternate]{Y}{N}+\dotfill |\IfMainName{SNNd}[Alternate]{Y}{N}| \end{quote} \begin{quote} \Verb+\IfFrontName[FNNa]{SNNa, Affix}[Alternate]{Y}{N}+\dotfill |\IfFrontName[FNNa]{SNNa, Affix}[Alternate]{Y}{N}|\\ \Verb+\IfFrontName[FNNb]{SNNb}[Alternate]{Y}{N}+\dotfill |\IfFrontName[FNNb]{SNNb}[Alternate]{Y}{N}|\\ \Verb+\IfFrontName{SNNc, Affix}[Alternate]{Y}{N}+\dotfill |\IfFrontName{SNNc, Affix}[Alternate]{Y}{N}|\\ \Verb+\IfFrontName{SNNd}[Alternate]{Y}{N}+\dotfill |\IfFrontName{SNNd}[Alternate]{Y}{N}| \end{quote} \begin{quote} \Verb+\SeeAlso\IndexRef[FNNp]{SNNp, Affix}{Target}+\dotfill |\SeeAlso\IndexRef[FNNp]{SNNp, Affix}{Target}|\\ \Verb+\ExcludeName{SNNq, Affix}+\dotfill |\ExcludeName{SNNq, Affix}|\\ \Verb+\IfAKA[FNNp]{SNNp, Affix}[Alternate]{Y}{N}{X}+\dotfill |\IfAKA[FNNp]{SNNp, Affix}[Alternate]{Y}{N}{X}|\\ \Verb+\IfAKA[FNNp]{SNNp, Affix}{Y}{N}{X}+\dotfill |\IfAKA[FNNp]{SNNp, Affix}{Y}{N}{X}|\\ \Verb+\IfAKA{SNNq, Affix}[Alternate]{Y}{N}{X}+\dotfill |\IfAKA{SNNq, Affix}[Alternate]{Y}{N}{X}|\\ \Verb+\IfAKA{SNNq, Affix}{Y}{N}{X}+\dotfill |\IfAKA{SNNq, Affix}{Y}{N}{X}|\\ \Verb+\IfAKA{SNNr}[Alternate]{Y}{N}{X}+\dotfill |\IfAKA{SNNr}[Alternate]{Y}{N}{X}| \end{quote} \subsubsection{Pseudonym Syntax: The Horror} \begin{quote} \Verb+\AKA[FNN1]{SNN1, Affix1}%+\\ \Verb+ [FNN2]{SNN2, Affix2}[Alternate2]+\dotfill |\AKA[FNN1]{SNN1, Affix1}[FNN2]{SNN2, Affix2}[Alternate2]|\\ \Verb+\AKA[FNN1]{SNN1, Affix1}%+\\ \Verb+ [FNN2]{SNN2, Affix2}+\dotfill |\AKA[FNN1]{SNN1, Affix1}[FNN2]{SNN2, Affix2}|\\ \Verb+\DropAffix\AKA[FNN1]{SNN1, Affix1}%+\\ \Verb+ [FNN2]{SNN2, Affix2}+\dotfill |\DropAffix\AKA[FNN1]{SNN1, Affix1}[FNN2]{SNN2, Affix2}|\\ \Verb+\AKA*[FNN1]{SNN1, Affix1}%+\\ \Verb+ [FNN2]{SNN2, Affix2}[Alternate2]+\dotfill |\AKA*[FNN1]{SNN1, Affix1}[FNN2]{SNN2, Affix2}[Alternate2]|\\ \Verb+\AKA*[FNN1]{SNN1, Affix1}%+\\ \Verb+ [FNN2]{SNN2, Affix2}+\dotfill |\AKA*[FNN1]{SNN1, Affix1}[FNN2]{SNN2, Affix2}| \end{quote} \begin{quote} \Verb+\AKA[FNN1]{SNN1, Affix1}%+\\ \Verb+ {SNN3, Affix3}[Alternate3]+\dotfill |\AKA[FNN1]{SNN1, Affix1}{SNN3, Affix3}[Alternate3]|\\ \Verb+\AKA[FNN1]{SNN1, Affix1}%+\\ \Verb+ {SNN3, Affix3}+\dotfill |\AKA[FNN1]{SNN1, Affix1}{SNN3, Affix3}|\\ \Verb+\AKA*[FNN1]{SNN1, Affix1}%+\\ \Verb+ {SNN3, Affix3}+\dotfill |\AKA*[FNN1]{SNN1, Affix1}{SNN3, Affix3}|\\ \Verb+\ForceFN\AKA*[FNN1]{SNN1, Affix1}%+\\ \Verb+ {SNN3, Affix3}[Alternate3]+\dotfill |\ForceFN\AKA*[FNN1]{SNN1, Affix1}{SNN3, Affix3}[Alternate3]|\\ \Verb+\ForceFN\AKA*[FNN1]{SNN1, Affix1}%+\\ \Verb+ {SNN3, Affix3}+\dotfill |\ForceFN\AKA*[FNN1]{SNN1, Affix1}{SNN3, Affix3}| \end{quote} \begin{quote} \Verb+\AKA[FNN1]{SNN1, Affix1}{SNN4}[Alternate4]+\dotfill |\AKA[FNN1]{SNN1, Affix1}{SNN4}[Alternate4]|\\ \Verb+\AKA*[FNN1]{SNN1, Affix1}{SNN4}[Alternate4]+\dotfill |\AKA*[FNN1]{SNN1, Affix1}{SNN4}[Alternate4]|\\ \Verb+\ForceFN\AKA*[FNN1]{SNN1, Affix1}{SNN4}[Alternate4]+\dotfill |\ForceFN\AKA*[FNN1]{SNN1, Affix1}{SNN4}[Alternate4]| \end{quote} \begin{quote} \Verb+\AKA{SNN5, Affix5}%+\\ \Verb+ [FNN6]{SNN6, Affix6}[Alternate6]+\dotfill |\AKA{SNN5, Affix5}[FNN6]{SNN6, Affix6}[Alternate6]|\\ \Verb+\AKA{SNN5, Affix5}{SNN7, Affix7}+\dotfill |\AKA{SNN5, Affix5}{SNN7, Affix7}|\\ \Verb+\AKA{SNN5, Affix5}{SNN8}[Alternate8]+\dotfill |\AKA{SNN5, Affix5}{SNN8}[Alternate8]|\\ \end{quote} \subsection{Reference Targets for Completeness} \begin{quote} \Verb+\IndexName{Target}+\dotfill|\IndexName{Target}|\\ \Verb+\IndexName[FNN1]{SNN1, Affix1}+\dotfill |\IndexName[FNN1]{SNN1, Affix1}|\\ \Verb+\IndexName{SNN5, Affix5}+\dotfill |\IndexName{SNN5, Affix5}| \end{quote} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \phantomsection \addcontentsline{toc}{section}{Index of Persons} \printindex[per] \renewcommand\indexname{Index of Subjects} \phantomsection \addcontentsline{toc}{section}{Index of Subjects} \printindex \end{document} %examplesvb % \endinput