% \iffalse meta-comment % icite -- Indices locorum citatorum % Copyright (C) 2019--2020 Robert Alesssi % % Please send error reports and suggestions for improvements to Robert % Alessi % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, but % WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see % . % \fi % % \iffalse %<*driver> \ProvidesFile{icite.dtx} % %\NeedsTeXFormat{LaTeX2e}[1999/12/01] %\ProvidesPackage{icite} %<*package> [2020/03/05 v1.3a Make Indices locorum citatorum] % %<*driver> \documentclass{ltxdoc} \usepackage{filecontents} \begin{filecontents*}{\jobname.xdy} (merge-rule "\*" "" :eregexp) (markup-locclass-list :open "\tabto{3.5cm}" :sep ", ") \end{filecontents*} \begin{filecontents*}{\jobname.bib} @Book{Aristotle:Politica, title = {Politica}, date = 1964, author = {Aristotle}, editor = {Ross, W. D.}, origdate = 1957, entrysubtype = {classical}, publisher = {Clarendon Press}, location = {Oxford} } @Book{Bürgel2016, shorttitle = {Ärztliches Leben\ldots}, editortype = {reviser}, editor = {Käs, Fabian}, number = 135, series = {Islamic History and Civilization}, location = {Leiden}, publisher = {Brill}, date = 2016, title = {Ärztliches Leben und Denken im arabischen Mittelalter}, author = {Bürgel, Johann Christoph} } @Software{classics, title = {The Classics package}, subtitle = {Cite classic works}, author = {Lourenço de Lima, Eduardo C.}, publisher = {CTAN}, url = {http://www.ctan.org/pkg/classics}, date = {2013-02-02}, version = {0.1} } @Article{Dols1987, author = {Dols, Michael W.}, title = {The Origins of the Islamic Hospital: Myth and Reality}, shorttitle = {The Origins of the Islamic Hospital}, journaltitle = {Bulletin of the History of Medicine}, date = 1987, volume = 61, pages = {367--390} } @InBook{Endress1992, title = {Die Wissenschaftliche Literatur}, date = 1992, author = {Endress, Gerhard}, booktitle = {Grundriß der arabischen Philologie}, editor = {Fisher, Wolfdietrich}, volume = 3, note = {Supplement}, publisher = {Reichert}, location = {Wiesbaden}, pages = {3--152} } @Book{IAUMuller, sortname = {{ibn abi usaybia}}, editor = {Müller, August}, author = {\prname{ibn 'abI 'u.saybi`aT}}, shorteditor = {Müller}, date = {1882/1884}, title = {\arb[trans]{\uc{`u}yUn al-'anbA' fI .tabaqAt al-'a.tibbA'}}, shorttitle = {\arb[trans]{\uc{`u}yUn al-'anbA'}}, shorthand = {\prname{ibn 'abI 'u.saybi`aT}, \arb[trans]{\uc{`u}yUn al-'anbA'}}, entrysubtype = {classical}, location = {Königsberg and Cairo}, volumes = 2 } @Software{imakeidx, title = {The Imakeidx package}, subtitle = {A package for producing multiple indexes}, author = {Gregorio, Enrico and Beccari, Claudio}, publisher = {CTAN}, url = {http://www.ctan.org/pkg/imakeidx}, date = {2016-10-15}, version = {1.3e} } @Book{RaziShukuk, author = {\prname{al-rAziyy}, \prname{mu.hammad ibn zakariyyA'}}, title = {\arb[trans]{\uc{k}itAb al-^sukUk `al_A \uc{^g}AlInUs}}, indextitle = {\arb[trans]{\uc{^s}ukUk}}, sortname = {razi}, date = 1993, shorthand = {\prname{al-rAziyy}, \arb[trans]{\uc{^s}ukUk}}, editor = {Mehdi Mohaghegh}, publisher = {International Institute of Islamic Thought and Civilization}, location = {Tehran}, entrysubtype = {classical} } @Book{Ullmann1970, location = {Leiden}, publisher = {Brill}, title = {Die Medizin im Islam}, date = 1970, author = {Ullmann, Manfred}, } @MVBook{al-Nadim, author = {\prname{ibn al-nadIm}}, title = {\arb[trans]{\uc{f}ihrist}}, sortname = {{ibn al-nadim}}, date = {1871/1872}, shorthand = {\arb[trans]{\uc{f}ihrist}}, editor = {Flügel, Gustav}, volumes = 2, location = {Leipzig}, entrysubtype = {classical} } @Book{al-Qifti, sortname = {{ibn al-qifti}}, entrysubtype = {classical}, shorthand = {\prname{al-qif.tiyy}, \arb[trans]{\uc{t}a'rI_h}}, location = {Leipzig}, editor = {Lippert, Julius}, date = 1903, title = {\arb[trans]{\uc{t}a'rI_h al-.hukamA'}}, author = {\prname{ibn al-qif.tiyy}} } @Software{usebib, title = {The Usebib package}, subtitle = {A simple bibliography processor}, author = {Gregorio, Enrico}, publisher = {CTAN}, url = {http://www.ctan.org/pkg/usebib}, date = {2012-04-13}, version = {1.0a} } \end{filecontents*} \usepackage{fontspec} \usepackage[english]{babel} \usepackage[letterpaper,margin=25mm,left=50mm,nohead]{geometry} \babelfont{rm}{Old Standard} \babelfont{sf}{NewComputerModern Sans} \babelfont{tt}{NewComputerModern Mono} \usepackage{arabluatex} \SetTranslitConvention{loc} \usepackage{xurl} \usepackage{uri} \usepackage{hyperxmp} \usepackage{varioref} \usepackage{latexcolors} \usepackage[numbered]{hypdoc} \hypersetup{unicode=true, colorlinks, allcolors=cinnamon, linktocpage=true, pdfauthor={Robert Alessi}, pdftitle={The icite package}, pdfcontactemail={alessi@robertalessi.net}, pdfcontacturl={http://www.robertalessi.net/icite}, pdfcopyright={Copyright (C) 2019--2020 Robert Alessi . This document is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.}, pdflicenseurl={https://creativecommons.org/licenses/by-sa/4.0/legalcode}, pdfmetalang={en-US}, pdftype={Text}, pdfkeywords={bibtex, biblatex, indexing}} \usepackage{amsmath} \usepackage{cleveref} \CodelineIndex \usepackage[citecmd=autocite,defaultindex]{\jobname} \IndexSubtypeAs{classical}{primary} \bibinput{icite} \usepackage[nonewpage,xindy]{imakeidx} \newcommand{\donothing}[1]{} \indexsetup{level=\donothing} \makeindex \makeindex[name=loccit] \makeindex[name=primary] \usepackage{needspace} \usepackage{tabto} \usepackage{classics} \newclassic{iau}{\classicsRoman{#1}|, #1|.#1} \newclassic{razi}{#1|.#1} \newclassic{nadim}{\classicsRoman{#1}|.#1|, #1} \newclassic{aristotle}{#1|\textit{#1}|#1} \usepackage[scale=1.5]{ccicons} \usepackage{dox} \doxitem{Option}{option}{options} \usepackage{enumitem} \setlist{nosep} \setlist[itemize]{label=\textendash} \setlist[enumerate,1]{label=(\alph*)} \setlist[enumerate,2]{label=\roman*.} \usepackage[lot]{multitoc} \usepackage{nameref} \usepackage{csquotes} \usepackage[style=oxnotes, hyperref=false]{biblatex} \DeclareFieldFormat{postnote}{\mkpageprefix[pagination][\mknormrange]{#1}} \addbibresource{icite.bib} \usepackage{hologo,metalogox} \usepackage{relsize} \usepackage{units} \usepackage{minted} \usepackage[contents]{colordoc} \newcommand{\package}[1]{\textsf{#1}\index{#1=#1 (package)}} \usepackage{tikz} \usepackage[breakable, skins, xparse, minted]{tcolorbox} \tcbset{colback=white, boxrule=.15mm, colframe=cinnamon, breakable} \newtcblisting{example}{minted options={linenos, numbersep=0mm}} \newtcblisting{code}{minted options={linenos, numbersep=0mm}, listing only} \usepackage{etoc} \etocsettocdepth{paragraph} \newcommand{\icitetableofcontents}{% \begingroup \etocsetstyle{section}{}{} {\etocsavedsectiontocline{% \numberline{\etocnumber}\etocname}{\etocpage}}{} \etocsetstyle{subsection}{}{} {\etocsavedsubsectiontocline{% \numberline{\etocnumber}\etocname}{\etocpage}}{}% \etocsetstyle{subsubsection}{}{} {\etocsavedsubsubsectiontocline{% \numberline{\etocnumber}\etocname}{\etocpage}}{}% \etocsetstyle{paragraph}{}{\leftskip2cm\rightskip 2.2em \parfillskip 0pt plus 1fil\relax \nobreak} {\noindent\etocname{} \etocpage{} }{\par}% \etocmulticolstyle[2]{\section*{Contents}} \pdfbookmark[1]{Contents}{toc} \tableofcontents \endgroup} \EnableCrossrefs %\CodelineIndex \RecordChanges %\OnlyDescription \begin{document} \DocInput{\jobname.dtx} \PrintChanges \section{Index} \indexprologue{Numbers written in italic refer to the page where the corresponding entry is described; numbers underlined refer to the code line of the definition; numbers in roman refer to the code lines where the entry is used.} \printindex %\PrintIndex \end{document} % % \fi % % \CheckSum{360} % % \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 \~} % % \makeatletter % \let\org@changes@\changes@ % \def\my@changes v#1.#2.#3\@nil{% % \org@changes@{v#1.\six@digits{#2}.#3=v#1.#2.#3}% % }% % \newcommand*{\six@digits}[1]{% % \ifnum#1<100000 0\fi % \ifnum#1<10000 0\fi % \ifnum#1<1000 0\fi % \ifnum#1<100 0\fi % \two@digits{#1}% % }% % \renewcommand*{\changes@}[1]{% % \my@changes#1.\@nil % }% % \makeatother % % \GetFileInfo{\jobname.dtx} % \DoNotIndex{\newcommand,\newenvironment} % % \newcommand*{\NEWfeature}[1]{% % \hskip 1sp \marginpar{\small\sffamily\raggedright % New feature\\#1}} % % \title{\tcbox[colframe=black, enhanced, tikznode, drop lifted % shadow, colback=white, boxrule=.25mm]{% % The \textsf{icite} package\\ % \emph{Indices locorum citatorum}\\ % \fileversion\ --- \filedate}} % % \author{Robert Alessi \\ % \href{mailto:alessi@robertalessi.net?Subject=icite package}% % {\texttt{alessi@robertalessi.net}}} % % \date{} % % \maketitle % \footnotesize % \icitetableofcontents % \normalsize % % \changes{v1.00}{2019/03/07}{First public release} % % \begin{abstract} % \package{icite} is designed to produce from \hologo{BibTeX} or % Bib\LaTeX\ bibliographical databases the different indices of % authors and works cited which are called \emph{indices locorum % citatorum}. It relies on a specific \cs{icite} command and can % operate with either \hologo{BibTeX} or Bib\LaTeX. % \end{abstract} % % \section*{License and disclamer} % \addcontentsline{toc}{section}{License and disclamer} % \subsection*{License applicable to the software} % \label{sec:license-software} % % \package{icite} --- \emph{Indices locorum citatorum}\\ % Copyright \textcopyright\ 2019--2020 Robert Alessi % % Please send error reports and suggestions for improvements to Robert % Alessi: % \begin{itemize} % \item email: \mailto[icite package]{alessi@roberalessi.net} % \item website: \url{http://www.robertalessi.net/icite} % \item development: \url{http://git.robertalessi.net/icite} % \item comments, feature requests, bug reports: % \url{https://gitlab.com/ralessi/icite/issues} % \end{itemize} % % \marginpar{\texttt{gpl3+}} % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, but % WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see % . % % This release of \package{icite} consists of the following % source files: % \begin{itemize} % \item |icite.dtx| % \item |icite.ins| % \item |Makefile| % \end{itemize} % % \subsection*{License applicable to this document} % \label{sec:documentation-license} % Copyright \textcopyright\ 2019--2020 Robert Alessi % % \ccbysa\marginpar{\texttt{CC BY-SA 4.0}} % This document is licensed under the Creative Commons % Attribution-ShareAlike 4.0 International License. To view a copy of % this license, visit % \url{http://creativecommons.org/licenses/by-sa/4.0/} or send a % letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, % USA. % % \section{Introduction} % \label{sec:introduction} % Bib\LaTeX\ features a very powerful internal mechanism which % supports indexing of citations and bibliographic entries and can be % activated by a simple |indexing| option in the preamble. However, by % default, only the authors and the works cited are inserted in the % index. Furthermore, authors and works are indexed separately and % only inserted in the global index that is generated by % \cs{makeindex}. Another limitation is that the references are also % excluded from the index. % % Notwithstanding these limitations, it is quite possible to typeset % \emph{indices locorum citatorum} with Bib\LaTeX, but this remains an % intricate business and requires knowing how to redefine and/or patch % standard and internal Bib\LaTeX\ commands. % % The \package{icite} package is but a modest piece of software which % addresses this situation. It relies on citation commands, but does % not require Bib\LaTeX. Instead, \hologo{BibTeX} can be used as % \package{icite} uses the \package{usebib} % package\footnote{\cite{usebib}} to build the indices by drawing % directly from the bibliographical database. % % % \section[The \package{icite} package]{The \textsf{icite} package} % The \package{icite} package is loaded as usual like so:--- % \iffalse %<*example> % \fi \begin{code} \usepackage[]{icite} \end{code} % \iffalse % % \fi % % \package{icite} may be loaded with three optional \enquote*{named % arguments} either of which is set using the syntax % \meta{key}$=$\meta{value}. The description of the optional arguments % follows:--- % % \DescribeOption{citecmd}\label{ref:citecmd} % |citecmd|$=$\meta{command}\hfill\tcboxverb{Default: cite}\\ % \meta{command} may be any citation command accepted by % \hologo{BibTeX} or Bib\LaTeX. This option is used by the \cs{icite} % command that is described below. By default, \cs{icite} uses the % \cs{cite} command to insert citations in the body text. % % \DescribeOption{defaultindex} % |defaultindex|$=$|none|\verb+|+\meta{index\_name}\hfill% % \tcboxverb{Default: not set}\\ % \meta{index\_name} is the name of the index in which all passages % cited with the \cs{icite} command are to be found by default. As % this option is not initially set, \cs{icite} naturally inserts cited % passages in the default general index, unless |defaultindex| is set % to the value |none|, in which case indexing is disabled. It must be % noted that this named argument does not need a value as it defaults % to |loccit| if it is used alone. This is an easy way to have all % passages cited indexed in a separate index named |loccit|. % % \DescribeOption{nobibengine}\NEWfeature{v1.1} % \changes{v1.1}{2019/03/12}{New global option \texttt{nobibengine}}% % |nobibengine|$=$|true|\verb+|+|false|\hfill% % \tcboxverb{Default: not set}\\ % This named argument does not need a value as it defaults to |true| % if it is used. When this option is activated, \package{icite} does % not use \hologo{BibTeX} or Bib\LaTeX\ to insert the citations in the % body text---even if either is loaded in the preamble---and pulls the % necessary information directly from the bibliographical % database. For this reason, \cs{bibinput} described below is of % course still required. The citations inserted consist of the % elements described below \vref{sec:entry-fields} % \vpageref{sec:entry-fields}. However, it must be noted that if the % entry field |shorthand| of any author/work be set in the database, % it takes precedence over the fields used to define author names and % titles. % % \paragraph{Bibliographical database} % \DescribeMacro{\bibinput} Once \package{icite} is loaded, it must be % connected to at least one bibliographic |.bib| file. To that end, % \package{icite} uses the same \cs{bibinput} command as % \package{usebib}.\footnote{Please refer to \cite[1]{usebib} for % more detailed information on how to use this command.} An example % follows:--- % % \iffalse %<*example> % \fi \begin{code} % load icite, have \icite use \autocite by default, and insert cited % passages in a separate index named 'loccit': \usepackage[citecmd=autocite, defaultindex]{icite} % note that the .bib file must be stripped of its extension: \bibinput{bibliography} % that is: load bibliography.bib \end{code} % \iffalse % % \fi % % \subsection{Preamble-only commands} % The following commands may be found in the preamble only. % \paragraph{Styling the titles} % \DescribeMacro{\SetTitleStyle} By default, \package{icite} prints % the titles of the works cited in italics.\\ % \cs{SetTitleStyle}\marg{formatting directives} can be used in the % preamble only to customize the way titles are displayed in the % indices, like so:--- % % \iffalse %<*example> % \fi \begin{code} \SetTitleStyle{\textbf{#1}} \end{code} % \iffalse % % \fi % As this example shows, |#1| is the token that is replaced with the % actual title in the formatting directives of the \cs{SetTitleStyle} % command. % % \paragraph{Delimiters} % \NEWfeature{v1.2}\DescribeMacro{\AuthorTitleDelim} % \cs{AuthorTitleDelim}\marg{delimiter} sets the delimiter between % authors and titles in the body text when the |nobibengine| option is % set to |true|. The default delimiter is a comma and a space. % % \DescribeMacro{\TitlePageDelim} % \cs{TitlePageDelim}\marg{delimiter} sets the delimiter between % titles and pages in the body text when the |nobibengine| option is % set to |true|. The default delimiter is a comma and a space. % % \subsection[\textsf{icite} for the Impatient]% % {\package{icite} for the Impatient} % Read \href{samples/icite-minimal.pdf}{\texttt{icite-minimal.pdf}}. % % \subsection{Entry fields} % \label{sec:entry-fields} % \subsubsection{Author names} % To process author names, \package{icite} uses the following entry % fields: % \begin{description} % \item[author] As for example in |author = {Ullmann, Manfred}|, which % is satisfactory in most cases. % \item[indexauthor] This field is not set by Bib\LaTeX. However, it % may be used as a fallback field for multiple or complex names. % \item[sortname] This standard Bib\LaTeX\ field which is never % printed may be used to modify the sorting order of the index % entries. % \end{description} % % \paragraph{Example} % From a given entry such as: \\[1ex]% % |author = {|\prname{.hunayn ibn 'is.hAq al-`ibAdiyy, 'abU % zayd}|}|\\[1ex]% % it may prove useful to define an additional |indexauthor| field to % have printed in the index only the relevant part of the name, like % so: \\[1ex]% % |indexauthor = {|\prname{.hunayn ibn 'is.hAq}|}| or % |indexauthor = {|\prname{.hunayn}|}|\\[1ex] % But in the end, the |sortname| field is also needed because the % diacritics must be discarded so that the name be sorted % properly:\\[1ex]% % |sortname = {{|Hunayn ibn Ishaq|}}| % % \subsection{Titles} % To process titles, \package{icite} uses the following entry fields: % \begin{description} % \item[title] The full title of the work. % \item[shorttitle] The title in an abbriged form. If this entry is % set, it takes precedence over the |title| field in the printed index. % \item[indextitle] This field may be used to have a title such as % \emph{The {\TeX}Book} printed in the index as \emph{{\TeX}Book, The}. % \item[indexsorttitle] Like |sortname| for author names, this field is % used for sorting only and is never printed. From the previous % example, it may be used like so: \\% % |indexsorttitle = {TEXBook}| % \end{description} % % \section{Basic use} % \DescribeMacro{\icite} \package{icite} provides the \cs{icite} % command which both inserts a formatted citation in the body text and % an entry corresponding to the passage cited in the index. This % command is to be used in place of any \hologo{BibTeX} or Bib\LaTeX\ % citation command the syntax of which is % \cs{command}\oarg{pre}\oarg{post}\marg{key}. It must be noted that % only standard citation commands are supported, with the exception of % those mentioned as qualified citation lists or so-called % \enquote*{multicite} commands. The full syntax of \cs{icite} % follows:--- % % \iffalse %<*example> % \fi \begin{code} \icite[
][]{}[]
\end{code}
% \iffalse
%
% \fi
% Where \oarg{command} can be used as a further optional argument to
% specify a standard citation command that \cs{icite} should emulate
% instead of the default \cs{cite} command or any other command set as
% default in the preamble by means of the |citecmd| global
% option.\footnote{See above, \vref{ref:citecmd}.}
%
% \paragraph{Example} The following example illustrates how
% \package{icite} can be used in combination with Bib\LaTeX\ and the
% \package{imakeidx} package to have the passages cited sorted and
% printed in a separate, specific \enquote*{Index of Passages
% Cited}:--- %
% \iffalse
%<*example>
% \fi
\begin{code}
  % preamble
  % load icite, have \icite use \autocite by default, and insert cited
  % passages in a separate index named 'loccit':
  \usepackage[citecmd=autocite, defaultindex]{icite}
  % load bibliography.bib
  \bibinput{bibliography}

 % load biblatex (with oxnotes, \autocite acts as \footcite)
 \usepackage[style=oxnotes]{biblatex}
 \addbibresource{bibliography.bib} % mind the extension here

 % load imakeidx and use xindy to have the numbers sorted properly
 \usepackage[xindy]{imakeidx}
 \makeindex[name=loccit, title=Index of Passages Cited (modern authors)]
\end{code}
% \iffalse
%
% \fi
%
% Then \cs{icite} can be used like so:--- %
% \iffalse
%<*example>
% \fi
\begin{code}
  \section*{\cs{icite} in action}
  Let us start with four citations of the same reference, to make sure
  that they are all indexed and sorted properly:
  one\icite[123]{Ullmann1970}, two\icite[231]{Ullmann1970},
  three\icite[81]{Ullmann1970} and four\icite[18]{Ullmann1970}.

  Let us continue with four other citations out of two other
  references: one\icite[90]{Bürgel2016}, two\icite[370]{Dols1987},
  three\icite[205]{Bürgel2016} and four\icite[380]{Dols1987}.

  Finally, let us have \cs{icite} use \cs{textcite} to cite
  \icite[123]{Endress1992}[textcite], and again, this time in a
  footnote\icite[86]{Endress1992}.
\end{code}
% \iffalse
%
% \fi
% 
% \begin{tcblisting}{text only}
%   \section*{\cs{icite} in action}
%   Let us start with four citations of the same reference, to make
%   sure that they are all indexed and sorted properly:
%   one\icite[123]{Ullmann1970}, two\icite[231]{Ullmann1970},
%   three\icite[81]{Ullmann1970} and four\icite[18]{Ullmann1970}.
%
%   Let us continue with four other citations out of two other
%   references: one\icite[90]{Bürgel2016}, two\icite[370]{Dols1987},
%   three\icite[205]{Bürgel2016} and four\icite[380]{Dols1987}.
%
%   Finally, let us have \cs{icite} use \cs{textcite} to cite
%   \icite[123]{Endress1992}[textcite], and again, this time in a
%   footnote\icite[86]{Endress1992}.
% \end{tcblisting}
% 
% All indices and the contents of the \hologo{BibTeX} file that has
% been used can be found below in the appendix
% (\vrefrange{ref:indices}{ref:icite-bib} respectively). As can be
% seen by comparing the bibliography generated in the footnotes with
% the text printed in the index, \package{icite} prints as expected
% the abbridged forms of the titles when they are
% available. Furthermore, as a default citation command set in the
% preamble, the \enquote*{oxnotes} Bib\LaTeX\ option of
% \package{biblatex-oxref} style package makes \cs{autocite} behave
% like \cs{footcite}. Finally, the page numbers in the index are
% sorted properly: for example, two-digit numbers, like 81, are listed
% before 123.
%
% \section{Refined use}
% When references are made not only to modern authors but also to
% authors and works from classical antiquity or from the Middle Ages,
% it is commonly agreed that at least two separate indices of passages
% cited should be made. Another option is not to index passages cited
% from modern authors at all.
%
% \DescribeMacro{\IndexSubtypeAs} \package{icite} is able to
% differentiate between sources by drawing from the bibliographical
% database the exact string that may be found in the |entrysubtype|
% entry field. To that end, the \cs{IndexSubtypeAs} command is
% provided. It takes to mandatory arguments, like so:--- %
% \iffalse
%<*example>
% \fi
\begin{code}
  \IndexSubtypeAs{}{}
\end{code}
% \iffalse
%
% \fi
% Where || is any given string used to specify an
% |entrysubtype| in the bibliographical database, and ||
% the name of the index which the authors matching that subtype must
% go into. This command is to be found in the preamble only.
%
% Of course different subtypes can be associated with a single index
% or with different indices. That said, one should keep in mind that
% any entry the actual subtype of which is not associated with an
% index is processed as if it had no subtype at all. Examples
% follow:--- %
% \iffalse
%<*example>
% \fi
\begin{code}
  % load icite, and have cited authors indexed in an index named
  % 'secondary':
  \usepackage[defaultindex=secondary]{icite}
  % except for authors whose 'entrysubtype' field matches the string
  % 'classical': have them indexed in an index named 'primary':
  \IndexSubtypeAs{classical}{primary}
  % authors whose 'entrysubtype' field matches the string 'medieval'
  % should go into the same index:
  \IndexSubtypeAs{medieval}{primary}
\end{code}
% \iffalse
%
% \fi
% Or:
% \iffalse
%<*example>
% \fi
\begin{code}
  % load icite, but do not index passages cited with \icite:
  \usepackage[defaultindex=none]{icite}
  % except for authors whose 'entrysubtype' field matches the string
  % 'classical': have them indexed in an index named 'primary':
  \IndexSubtypeAs{classical}{primary}
  % authors whose 'entrysubtype' field matches the string 'medieval'
  % should go into the same index:
  \IndexSubtypeAs{medieval}{primary}
\end{code}
% \iffalse
%
% \fi
%
% \paragraph{Example} In the following example, modern authors, namely
% those whose |entrysubtype| field does not match the string
% |classical| should go into the default |loccit| index. As for those
% whose |entrysubtype| matches |classical|, they should to into an
% index named |primary|. \label{ref:classics-pkg}Furthermore, the
% \package{classics} package is used to format references in which a
% volume number is used.\footnote{For more information, see below
% \vref{sec:classics-usage}.} In this way, \package{xindy} only has
% numbers to handle:--- %
% \iffalse
%<*example>
% \fi
\begin{code}
  % preamble
  \usepackage[style=oxnotes]{biblatex}
  \addbibresource{bibliography.bib}

  \usepackage[xindy]{imakeidx}
  \makeindex[name=loccit, title=Index of passages cited (modern authors)]
  \makeindex[name=primary, title=\emph{Index locorum citatorum}]

  \usepackage{classics}
  \newclassic{iau}{\classicsRoman{#1}|, #1|.#1}
  \newclassic{razi}{#1|.#1}
  \newclassic{nadim}{\classicsRoman{#1}|.#1|, #1}
  
  \usepackage[citecmd=autocite,defaultindex]{icite}
  \IndexSubtypeAs{classical}{primary}
\end{code}
% \iffalse
%
% \fi
% 
% Then \cs{icite} can be used like so:--- %
% \iffalse
%<*example>
% \fi
\begin{code}
  \section*{\cs{icite} in action}
  Let us start with four citations of the same reference, to make sure
  that they are all indexed and sorted properly:
  one\icite[123]{Ullmann1970}, two\icite[231]{Ullmann1970},
  three\icite[81]{Ullmann1970} and four\icite[18]{Ullmann1970}.

  Let us continue with four other citations out of two other
  references: one\icite[90]{Bürgel2016}, two\icite[370]{Dols1987},
  three\icite[205]{Bürgel2016} and four\icite[380]{Dols1987}.

  Before concluding, let us insert a few references to medieval Arabic
  authors: one\icite[\iau{1}[81][32]]{IAUMuller},
  two\icite[\razi{5}[7--10]]{RaziShukuk}, three\icite[133]{al-Qifti},
  four\icite[\nadim{3}[7][286]]{al-Nadim},
  five\icite[\iau{2}[214][20]]{IAUMuller},
  six\icite[\razi{1}[6--20]]{RaziShukuk},
  seven\icite[126.15--20]{al-Qifti} and
  eight\icite[\nadim{3}[7][291]]{al-Nadim}.

  Finally, let us have \cs{icite} use \cs{textcite} to cite
  \icite[123]{Endress1992}[textcite], and again, this time in a
  footnote\icite[86]{Endress1992}.
\end{code}
% \iffalse
%
% \fi
%
% \begin{tcblisting}{text only}
%   \section*{\cs{icite} in action}
%   Let us start with four citations of the same reference, to make
%   sure that they are all indexed and sorted properly:
%   one\icite[123]{Ullmann1970}, two\icite[231]{Ullmann1970},
%   three\icite[81]{Ullmann1970} and four\icite[18]{Ullmann1970}.
%
%   Let us continue with four other citations out of two other
%   references: one\icite[90]{Bürgel2016}, two\icite[370]{Dols1987},
%   three\icite[205]{Bürgel2016} and four\icite[380]{Dols1987}.
%
%   Before concluding, let us insert a few references to medieval
%   Arabic authors: one\icite[\iau{1}[81][32]]{IAUMuller},
%   two\icite[\razi{5}[7--10]]{RaziShukuk},
%   three\icite[133]{al-Qifti},
%   four\icite[\nadim{3}[7][286]]{al-Nadim},
%   five\icite[\iau{2}[214][20]]{IAUMuller},
%   six\icite[\razi{1}[6--20]]{RaziShukuk},
%   seven\icite[126.15--20]{al-Qifti} and
%   eight\icite[\nadim{3}[7][291]]{al-Nadim}.
%
%   Finally, let us have \cs{icite} use \cs{textcite} to cite
%   \icite[123]{Endress1992}[textcite], and again, this time in a
%   footnote\icite[86]{Endress1992}.
% \end{tcblisting}
%
% As already said above, all indices and the contents of the
% \hologo{BibTeX} file that has been used can be found below in the
% appendix (\vrefrange{ref:indices}{ref:icite-bib} respectively). As
% one can see, \prname{al-rAziyy} has been sorted under the letter R
% and references to classical works have been formatted properly.
%
%
% \subsection[The \textsf{classics} package]%
% {The \package{classics} package} %
% \label{sec:classics-usage}
% As said above \vpageref{ref:classics-pkg}, it is advisable to use
% the \package{classics} package to format volume, page, column, line
% numbers and the like which are inserted in the \meta{post} optional
% argument of the \cs{icite} command\autocite{classics}. An example of
% using \package{classics} to format references to Aristotle according
% to Bekker pagination follows:\footnote{See \cite[2]{classics} for
% more information.}--- %
% \iffalse
%<*example>
% \fi
\begin{code}
  % preamble:
  \usepackage{classics}
  \newclassic{aristotle}{#1|\textit{#1}|#1}
\end{code}
% \iffalse
%
% \fi
% \iffalse
%<*example>
% \fi
\begin{example}
  In \emph{Politics}, Aristotle says that man is by nature a political
  animal in the following passages: \aristotle{1253}[a][2--9] (Book~1)
  and again in \aristotle{1278}[b][19] (Book~3). The latter passage
  shows that one should read the whole section of Book~1 concerning
  household management and the control of slaves
  (\aristotle*{1253}[b][1]{1253}[b][39]).
\end{example}
% \iffalse
%
% \fi
% The following prints the same body text while using \package{icite}
% to have the passages cited inserted in the \emph{Index locorum
% citatorum} (see below \vref{sec:index-loc-cit}):--- %
% \iffalse
%<*example>
% \fi
\begin{example}
  In \emph{Politics}, Aristotle says that man is by nature a political
  animal in the following passages:
  \icite[\aristotle{1253}[a][2--9]]{Aristotle:Politica}[notecite]
  (Book~1) and again in \icite[\aristotle{1278}[b][19]]%
  {Aristotle:Politica}[notecite] (Book~3). The latter passage shows
  that one should read the whole section of Book~1 concerning
  household management and the control of slaves
  \icite[\aristotle*{1253}[b][1]{1253}[b][39]]%
  {Aristotle:Politica}[pnotecite].
\end{example}
% \iffalse
%
% \fi
% As can be seen, the \cs{notecite} and \cs{pnotecite} commands have
% been used to insert only the references in the body text.
%
% It is also advisable to use \package{xindy} to compile indices of
% passages cited because \package{xindy}, unlike \package{makeindex}
% or \package{xindex}, is able to sort numbers properly: for example,
% with \package{xindy}, such a number as 81 will come before 100, but
% will be sorted after 100 with the other two engines.
% \begin{tcblisting}{text only, title=Caveat}
%   \package{xindy} (actually |texindy|) is also designed to ignore
%   \TeX\ commands by default. However, due to a missing line in
%   |xindy/modules/base/tex.xdy|,\footnote{As the time of writing, in
%   \package{xindy} v2.5.1.} this does not apply to so-called
%   \enquote*{starred} \TeX\ commands, such as \cs{aristotle*} from
%   the example above.
% \end{tcblisting}
% One easy way to get around this issue is to create a style file with
% a single line that instructs \package{xindy} to ignore the asterisk
% when processing the index, like so:--- %
% \iffalse
%<*example>
% \fi
\begin{tcblisting}{minted language=lisp, listing only, title=icite.xdy}
  (merge-rule "\*" "" :eregexp)
\end{tcblisting}
% \iffalse
%
% \fi
% 
% The following example shows how this simple rule can be
% applied:--- %
% \iffalse
%<*example>
% \fi
\begin{code}
  % preamble:
  \usepackage[xindy]{imakeidx}
  \makeindex[name=loccit, options=-M icite.xdy]
  % document:
  \printindex[loccit]
\end{code}
% \iffalse
%
% \fi
% Of course, the document itself must be compiled with
% |--shell-escape|.\footnote{See \cite[2--4]{imakeidx}.}
%
% \section{Appendix}
% Designing the layout of indices is out of the scope of this
% documentation. For information, the \package{tabto} package has been
% used in the preamble in combination with the following |xindy| style
% file:--- %
% \iffalse
%<*example>
% \fi
\begin{tcblisting}{minted language=lisp, listing only,
    title=icite.xdy}
(markup-locclass-list :open "\tabto{3.5cm}" :sep ", ")
\end{tcblisting}
% \iffalse
%
% \fi
%
% \subsection{Indices}
% \label{ref:indices}
% \subsubsection{Index of Passages Cited (modern authors)}
% \printindex[loccit]
% \needspace{8\baselineskip}
% \subsubsection{\emph{Index locorum citatorum}}
% \label{sec:index-loc-cit}
% \printindex[primary]
% 
% \subsection{\texorpdfstring{\hologo{BibTeX}
% file used in this document}{BibTeX file used in this document}}
% \label{ref:icite-bib}
% \tcbinputlisting{minted options={linenos, numbersep=1.5mm}, minted
% language=bibtex, listing file=icite.bib, listing only}
%
%\StopEventually{}
%
% \section{Implementation}
%
% \iffalse
%<*package>
% \fi
% Declare the global options, and define them:
%    \begin{macrocode}
\RequirePackage{xkeyval}
\DeclareOptionX{citecmd}[cite]{\def\ic@dfltcit{#1}}
\newif\ifdefault@index
\newif\ifno@index
\DeclareOptionX{defaultindex}[loccit]{
  \edef\@tempa{#1}
  \edef\@none{none}
  \ifx\@tempa\@none
  \no@indextrue
  \else
  \default@indextrue
  \def\ic@dfltind{#1}
  \fi
}
\newif\ifno@bibengine
\define@boolkey{icite.sty}[@pkg@]{nobibengine}[true]{%
  \if@pkg@nobibengine\no@bibenginetrue\else\fi}
\ExecuteOptionsX{citecmd}
\ProcessOptionsX\relax
%    \end{macrocode}
% The following packages are required by \package{icite}:
%    \begin{macrocode}
\RequirePackage{xparse}
\RequirePackage{datatool}
\RequirePackage{usebib}
%    \end{macrocode}
% If |nobibengine| is set to true, then \cs{ic@dfltcit} will be
% redefined by \cs{icite} to \cs{ic@nullcmd} which does nothing.
%    \begin{macrocode}
\NewDocumentCommand{\ic@nullcmd}{O{}O{}m}{}
%    \end{macrocode}
% Define fields to be used by \package{icite}:
%    \begin{macrocode}
\define@reuse@key{author}
\define@reuse@key{indexauthor}
\define@reuse@key{sortname}
\define@reuse@key{title}
\define@reuse@key{shorttitle}
\define@reuse@key{indextitle}
\define@reuse@key{indexsorttitle}
\define@reuse@key{entrysubtype}
\define@reuse@key{shorthand}
%    \end{macrocode}
% This is the same as \cs{usebibentry} from \package{ebib}, but it
% does not return an error if the entry field is not found:
%    \begin{macrocode}
\def\get@bibentry#1#2{\@ifundefined{reuse@#1@#2}{}
  {\@nameuse{reuse@#1@#2}}}
%    \end{macrocode}
% Create a new database which \package{icite} will use to connect
% Bib\LaTeX\ \enquote*{subtypes} to indices.
%    \begin{macrocode}
\DTLnewdb{icite@indices}
%    \end{macrocode}
% \DescribeMacro{\IndexSubtypeAs} \cs{IndexSubtypeAs} takes two
% mandatory arguments: 1. Any given keyword used to specify an
% \enquote*{entrysubtype} in the bibliographical database and 2. The
% index which the authors matching that subtype must go into. This
% command is to be found in the preamble only.
%    \begin{macrocode}
\NewDocumentCommand{\IndexSubtypeAs}{m m}{%
  \DTLnewrow{icite@indices}
  \DTLnewdbentry{icite@indices}{subtype}{#1}
  \DTLnewdbentry{icite@indices}{index}{#2}
}
\@onlypreamble\IndexSubtypeAs
%    \end{macrocode}
% \DescribeMacro{\SetTitleStyle} By default, titles are printed in
% italics. This can be changed in the preamble by \cs{SetTitleStyle}.
%    \begin{macrocode}
\NewDocumentCommand{\TitleStyle}{m}{\emph{#1}}
\NewDocumentCommand{\SetTitleStyle}{m}{%
  \RenewDocumentCommand{\TitleStyle}{m}{#1}
}
\@onlypreamble\SetTitleStyle
%    \end{macrocode}
% \DescribeMacro{\AuthorTitleDelim}
% \changes{v1.2}{2019/03/17}{\cs{AuthorTitleDelim}: delimiter
% between authors and titles}\cs{AuthorTitleDelim}\marg{delimiter}
% sets the delimiter between authors and titles in the body text when
% the |nobibengine| option is set to |true|. The default delimiter is
% a comma.
%    \begin{macrocode}
\def\ic@authtitdelim{, }
\NewDocumentCommand{\AuthorTitleDelim}{m}{%
  \def\ic@authtitdelim{#1}
}
\@onlypreamble\AuthorTitleDelim
%    \end{macrocode}
% \DescribeMacro{\TitlePageDelim}
% \changes{v1.2}{2019/03/17}{\cs{TitlePageDelim}: the delimiter
% between titles and pages}\cs{TitlePageDelim}\marg{delimiter} sets
% the delimiter between titles and pages in the body text when the
% |nobibengine| option is set to |true|. The default delimiter is a
% comma.
%    \begin{macrocode}
\def\ic@titpgdelim{, }
\NewDocumentCommand{\TitlePageDelim}{m}{%
  \def\ic@titpgdelim{#1}
}
\@onlypreamble\TitlePageDelim
%    \end{macrocode} 
% \DescribeMacro{\icite} \cs{icite} both inserts a formatted citation
% and an entry in the \emph{index locorum citatorum}. It is to be used
% in place of any \hologo{BibTeX} or Bib\LaTeX\ citation command the
% syntax of which is
% \cs{command}\oarg{pre}\oarg{post}\marg{key}. \cs{icite} further
% accepts an optional argument should one wish to specify the
% citation command to be used, like so:\\
% \cs{icite}\oarg{pre}\oarg{post}\marg{key}\oarg{command}\\
% Only standard citation commands are accepted, with the exception of
% qualified citation lists or so-called \enquote*{multicite} commands.
%    \begin{macrocode}
\NewDocumentCommand{\icite}{o o m O{\ic@dfltcit}}{%
  \edef\ic@argiv{#4}%
  \edef\ic@null{ic@nullcmd}%
  \ifno@bibengine\let\ic@argiv\ic@null\else\fi%
  \edef\@shorthand{\get@bibentry{#3}{shorthand}}%
  \edef\@subtype{\get@bibentry{#3}{entrysubtype}}%
  \edef\@author{\get@bibentry{#3}{author}}%
  \edef\@indexauthor{\get@bibentry{#3}{indexauthor}}%
  \edef\@sortname{\get@bibentry{#3}{sortname}}%
  \edef\@indexsorttitle{\get@bibentry{#3}{indexsorttitle}}%
  \edef\@indextitle{\get@bibentry{#3}{indextitle}}%
  \edef\@shorttitle{\get@bibentry{#3}{shorttitle}}%
  \edef\@title{\get@bibentry{#3}{title}}%
  \ifx\@indexauthor\empty
      \def\@useauthor{\@author}%
    \else
      \def\@useauthor{\@indexauthor}%
    \fi
  \ifx\@sortname\empty
      \def\@sortedauthor{\@useauthor}%
    \else
      \def\@sortedauthor{{\@sortname}@\@useauthor}%
    \fi
  \ifx\@indextitle\empty
    \ifx\@shorttitle\empty
      \def\@usetitle{\@title}%
    \else
      \def\@usetitle{\@shorttitle}%
    \fi
  \else
    \def\@usetitle{\@indextitle}%
  \fi
  \ifx\@indexsorttitle\empty
    \def\@sortedtitle{{\@usetitle}@\TitleStyle{\@usetitle}}%
  \else
    \def\@sortedtitle{{\@indexsorttitle}@\TitleStyle{\@usetitle}}%
  \fi
  \IfNoValueTF{#1}%
  {\DTLifdbempty{icite@indices}{%
      \ifno@index\else
      \ifdefault@index%
      \index[\ic@dfltind]{\@sortedauthor!\@sortedtitle}%
      \else%
      \index{\@sortedauthor!\@sortedtitle}%
      \fi\fi%
    }{%
      \bgroup%
      \DTLforeach*{icite@indices}{%
        \icite@subtype=subtype,\icite@index=index}{%
        \ifx\@subtype\icite@subtype%
        \index[\icite@index]{\@sortedauthor!\@sortedtitle}%
        \dtlbreak%
        \else%
        \ifno@index\else
        \ifdefault@index%
        \index[\ic@dfltind]{\@sortedauthor!\@sortedtitle}%
        \else%
        \index{\@sortedauthor!\@sortedtitle}%
        \fi\fi%
        \fi}%
      \egroup}%
    \ifno@bibengine
    \ifx\@shorthand\empty%
    \@useauthor\ic@authtitdelim\TitleStyle{\@usetitle}%
    \else%
    \@shorthand%
    \fi%
    \else%
    \fi%
    \csname\ic@argiv\endcsname{#3}%
  }
  {\IfNoValueTF{#2}%
    {\DTLifdbempty{icite@indices}{%
        \ifno@index\else
        \ifdefault@index%
        \index[\ic@dfltind]{\@sortedauthor!\@sortedtitle!#1}%
        \else%
        \index{\@sortedauthor!\@sortedtitle!#1}%
        \fi\fi%
      }{%
        \bgroup%
        \DTLforeach*{icite@indices}{%
          \icite@subtype=subtype,\icite@index=index}{%
          \ifx\@subtype\icite@subtype%
          \index[\icite@index]{\@sortedauthor!\@sortedtitle!#1}%
          \dtlbreak%
          \else%
          \ifno@index\else
          \ifdefault@index%
          \index[\ic@dfltind]{\@sortedauthor!\@sortedtitle!#1}%
          \else%
          \index{\@sortedauthor!\@sortedtitle!#1}%
          \fi\fi%
          \fi}%
        \egroup}%
      \ifno@bibengine
      \ifx\@shorthand\empty%
      \@useauthor\ic@authtitdelim\TitleStyle{\@usetitle}%
         \ic@titpgdelim{#1}%
      \else%
      \@shorthand\ic@titpgdelim{#1}%
      \fi%
      \else%
      \fi%
      \csname\ic@argiv\endcsname[{#1}]{#3}%
    }
    {\DTLifdbempty{icite@indices}{%
        \ifno@index\else
        \ifdefault@index%
        \index[\ic@dfltind]{\@sortedauthor!\@sortedtitle!#2}%
        \else%
        \index{\@sortedauthor!\@sortedtitle!#2}%
        \fi\fi%
      }{%
        \bgroup%
        \DTLforeach*{icite@indices}{%
          \icite@subtype=subtype,\icite@index=index}{%
          \ifx\@subtype\icite@subtype%
          \index[\icite@index]{\@sortedauthor!\@sortedtitle!#2}%
          \dtlbreak%
          \else%
          \ifno@index\else
          \ifdefault@index%
          \index[\ic@dfltind]{\@sortedauthor!\@sortedtitle!#2}%
          \else%
          \index{\@sortedauthor!\@sortedtitle!#2}%
          \fi\fi%
          \fi}%
        \egroup}%
      \ifno@bibengine
      \ifx\@shorthand\empty%
      #1 \@useauthor\ic@authtitdelim\TitleStyle{\@usetitle}%
         \ic@titpgdelim{#2}%
      \else%
      #1 \@shorthand\ic@titpgdelim{#2}%
      \fi
      \else%
      \fi%
      \csname\ic@argiv\endcsname[#1][{#2}]{#3}%
    }%
  }%
}
%    \end{macrocode}
% \iffalse
%
% \fi
%\Finale
\endinput