% \iffalse meta-comment % vim: textwidth=75 %<*internal> \iffalse % %<*readme> | -------:| ----------------------------------------------------------------- icite:| Make Indices locorum citatorum Author:| Robert Alessi E-mail:| alessi@robertalessi.net License:| Released under the GNU General Public License v3 or later See:| http://www.gnu.org/licenses/ Short description: Some text about the package: probably the same as the abstract. % %<*internal> \fi \def\nameofplainTeX{plain} \ifx\fmtname\nameofplainTeX\else \expandafter\begingroup \fi % %<*install> \input docstrip.tex \keepsilent \askforoverwritefalse \preamble Copyright (C) 2019 by Robert Alessi 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 . This work consists of the file icite.dtx and a Makefile. Running "make" generates the derived files README, icite.pdf and icite.sty. Running "make inst" installs the files in the user's TeX tree. Running "make install" installs the files in the local TeX tree. \endpreamble \usedir{tex/latex/icite} \generate{ \file{\jobname.sty}{\from{\jobname.dtx}{package}} } % %\endbatchfile %<*internal> \usedir{source/latex/icite} \generate{ \file{\jobname.ins}{\from{\jobname.dtx}{install}} } \nopreamble\nopostamble \usedir{doc/latex/icite} \generate{ \file{README.txt}{\from{\jobname.dtx}{readme}} } \ifx\fmtname\nameofplainTeX \expandafter\endbatchfile \else \expandafter\endgroup \fi % % \fi % % \iffalse %<*driver> \ProvidesFile{icite.dtx} % %\NeedsTeXFormat{LaTeX2e}[1999/12/01] %\ProvidesPackage{icite} %<*package> [2019/02/22 v1.00 Make Indices locorum citatorum] % %<*driver> \documentclass{ltxdoc} \usepackage[letterpaper,margin=25mm,left=50mm,nohead]{geometry} \usepackage{dox} \usepackage{\jobname} \usepackage{metalogox} \usepackage{hyperxmp} \usepackage{uri} \usepackage[numbered]{hypdoc} \hypersetup{unicode=true, colorlinks, allcolors=blue, linktocpage=true, pdfauthor={Robert Alessi}, pdftitle={The icite package}, pdfcontactemail={alessi@robertalessi.net}, pdfcontacturl={http://www.robertalessi.net/icite}, pdfcopyright={Copyright (C) 2019 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[lot]{multitoc} \usepackage{fontspec} \setmainfont{Old Standard}[RawFeature={+ss05;+ss06}] \usepackage{newunicodechar} \newunicodechar{ǧ}{ǧ} % Old Standard does not include ǧ/Ǧ \newunicodechar{Ǧ}{Ǧ} % \usepackage{csquotes} \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=red!50!white, left=6mm, breakable} \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 \PrintIndex \end{document} % % \fi % % \GetFileInfo{\jobname.dtx} % \DoNotIndex{\newcommand,\newenvironment} % % \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/02/22}{First public release} % % \begin{abstract} % ==== Put abstract text here. ==== % \end{abstract} % % \section{Usage} % % ==== Put descriptive text here. ==== % % \DescribeMacro{\dummyMacro} % This macro does nothing.\index{doing nothing|usage} It is merely an % example. If this were a real macro, you would put a paragraph here % describing what the macro is supposed to do, what its mandatory and % optional arguments are, and so forth. % \DescribeEnv{dummyEnv} % This environment does nothing. It is merely an example. % If this were a real environment, you would put a paragraph here % describing what the environment is supposed to do, what its % mandatory and optional arguments are, and so forth. %\iffalse %<*example> %\fi \begin{tcblisting}{minted options=linenos} \emph{tchic} \end{tcblisting} %\iffalse % %\fi %\iffalse %<*example> %\fi \begin{tcblisting}{minted options=linenos, listing only} \vroum[tchic]{tchic} \end{tcblisting} %\iffalse % %\fi % %\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 } \ExecuteOptionsX{citecmd} \ProcessOptionsX\relax % \end{macrocode} % The following packages are required by \package{icite}: % \begin{macrocode} \RequirePackage{xparse} \RequirePackage{datatool} \RequirePackage{usebib} % \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} % \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} take two mandatory % arguments: 1. Any given keyword used to specify an % \enquote*{entrysubtype} in the bibliographical database and 2. The % index in which the authors matching that subtype must go. 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 \AtBeginDocument{ \DTLifdbempty{icite@indices}{\IndexSubtypeAs{\relax}{\relax}}{} } % \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\@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}@\emph{\@usetitle}}% \else \def\@sortedtitle{{\@indexsorttitle}@\emph{\@usetitle}}% \fi \IfNoValueTF{#1}% {\DTLforeach*{icite@indices}{\icite@subtype=subtype,\icite@index=index}{% \ifx\icite@subtype\@subtype% \index[\icite@index]{\@sortedauthor!\@sortedtitle}% \else% \ifno@index\else \ifdefault@index% \index[\ic@dfltind]{\@sortedauthor!\@sortedtitle}% \else% \index{\@sortedauthor!\@sortedtitle}% \fi\fi\fi}% \csname #4\endcsname{#3}% } {\IfNoValueTF{#2}% {\DTLforeach*{icite@indices}{\icite@subtype=subtype,\icite@index=index}{% \ifx\icite@subtype\@subtype% \index[\icite@index]{\@sortedauthor!\@sortedtitle!#1}% \else% \ifno@index\else \ifdefault@index% \index[\ic@dfltind]{\@sortedauthor!\@sortedtitle!#1}% \else% \index{\@sortedauthor!\@sortedtitle!#1}% \fi\fi\fi}% \csname #4\endcsname[{#1}]{#3}} {\DTLforeach*{icite@indices}{\icite@subtype=subtype,\icite@index=index}{% \ifx\icite@subtype\@subtype% \index[\icite@index]{\@sortedauthor!\@sortedtitle!#2}% \else% \ifno@index\else \ifdefault@index% \index[\ic@dfltind]{\@sortedauthor!\@sortedtitle!#2}% \else% \index{\@sortedauthor!\@sortedtitle!#2}% \fi\fi\fi}% \csname #4\endcsname[#1][{#2}]{#3}}% }% } % \end{macrocode} % \iffalse % % \fi %\Finale \endinput