summaryrefslogtreecommitdiff
path: root/Master
diff options
context:
space:
mode:
Diffstat (limited to 'Master')
-rw-r--r--Master/texmf-dist/doc/latex/xbmks/README.md25
-rw-r--r--Master/texmf-dist/doc/latex/xbmks/docs/xbmksman.pdfbin0 -> 193947 bytes
-rw-r--r--Master/texmf-dist/doc/latex/xbmks/docs/xbmksman.tex337
-rw-r--r--Master/texmf-dist/doc/latex/xbmks/examples/doc1.pdfbin0 -> 31874 bytes
-rw-r--r--Master/texmf-dist/doc/latex/xbmks/examples/doc1.tex43
-rw-r--r--Master/texmf-dist/doc/latex/xbmks/examples/doc2.pdfbin0 -> 30227 bytes
-rw-r--r--Master/texmf-dist/doc/latex/xbmks/examples/doc2.tex41
-rw-r--r--Master/texmf-dist/doc/latex/xbmks/examples/master.pdfbin0 -> 53092 bytes
-rw-r--r--Master/texmf-dist/doc/latex/xbmks/examples/master.tex57
-rw-r--r--Master/texmf-dist/source/latex/xbmks/xbmks.dtx524
-rw-r--r--Master/texmf-dist/source/latex/xbmks/xbmks.ins62
-rw-r--r--Master/texmf-dist/tex/latex/xbmks/xbmks-luatex.def22
-rw-r--r--Master/texmf-dist/tex/latex/xbmks/xbmks-pdfmark.def98
-rw-r--r--Master/texmf-dist/tex/latex/xbmks/xbmks-pdftex.def101
-rw-r--r--Master/texmf-dist/tex/latex/xbmks/xbmks-xetex.def107
-rw-r--r--Master/texmf-dist/tex/latex/xbmks/xbmks.sty133
-rwxr-xr-xMaster/tlpkg/bin/tlpkg-ctan-check2
-rw-r--r--Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc1
-rw-r--r--Master/tlpkg/tlpsrc/xbmks.tlpsrc0
19 files changed, 1552 insertions, 1 deletions
diff --git a/Master/texmf-dist/doc/latex/xbmks/README.md b/Master/texmf-dist/doc/latex/xbmks/README.md
new file mode 100644
index 00000000000..cab5c8ab91d
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/xbmks/README.md
@@ -0,0 +1,25 @@
+The xbmks Package
+Author: D. P. Story
+Dated: 2018/06/11
+
+Short description: Create a cross-document bookmark tree.
+
+The package defines the concept of a document bundle, which is a collection
+of documents that are to be build separately, but have a common bookmark
+tree.
+
+This package takes the bookmarks of each file in doc bundle and merges them.
+The merged bookmarks are listed in all the documents of the document bundle.
+In this way, a sort of 'table of contents' is available to all documents in
+the bundle.
+
+PDF Creator: no restrictions, use dvips->distiller|ps2pdf, pdflatex,
+lualatex, or xelatex.
+
+
+Now, I simply must get back to my retirement.
+
+D. P. Story
+www.acrotex.net
+dpstory@uakron.edu
+dpstory@acrotex.net
diff --git a/Master/texmf-dist/doc/latex/xbmks/docs/xbmksman.pdf b/Master/texmf-dist/doc/latex/xbmks/docs/xbmksman.pdf
new file mode 100644
index 00000000000..178da6d808a
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/xbmks/docs/xbmksman.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/xbmks/docs/xbmksman.tex b/Master/texmf-dist/doc/latex/xbmks/docs/xbmksman.tex
new file mode 100644
index 00000000000..bff6b09c411
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/xbmks/docs/xbmksman.tex
@@ -0,0 +1,337 @@
+%
+% Need some discussion on workflow
+%
+% makeindex < aebpro_man.idx > aebpro_man.ind
+\documentclass[10pt]{article}
+\usepackage[fleqn]{amsmath}
+\usepackage[
+ web={centertitlepage,designv,forcolorpaper,latextoc,pro,addtoHyOpts={pagebackref=false}},
+ eforms,
+% linktoattachments,
+ aebxmp
+]{aeb_pro}
+\usepackage{aeb_mlink}
+\usepackage{graphicx,array}
+%\usepackage{myriadpro}
+%\usepackage{calibri}
+\usepackage[altbullet]{lucidbry}
+
+%\previewtrue
+%\usepackage{makeidx}
+%\makeindex
+\usepackage{acroman}
+\usepackage[active]{srcltx}
+
+\setcounter{secnumdepth}{4}
+\setcounter{tocdepth}{5}
+\makeatletter
+\renewcommand*{\theparagraph}{\texorpdfstring{\protect\P\protect\ }{\textparagraph}}
+\renewcommand{\paragraph}
+ {\renewcommand{\@seccntformat}[1]{\theparagraph}%
+ \@startsection{paragraph}{4}{0pt}{6pt}{-3pt}{\color{\aeb@subsubsectioncolor}\bfseries}}
+\renewcommand*\l@paragraph{\@dottedtocline{4}{5.0em}{1em}} %{7.0em}{4.1em}}
+\def\chgCurrLblName#1{\def\@currentlabelname{#1}}
+\def\echgCurrLblName#1{\edef\@currentlabelname{#1}}
+\makeatother
+
+\getDimsFromGraphic{graphics/dpsweb}{\dpswebW}{\dpswebH}
+
+
+%\urlstyle{rm}
+\urlstyle{sf}
+\let\uif\textsf
+\let\app\textsf
+\def\psf#1{\textbf{\textsf{#1}}}
+\let\amtIndent\leftmargini
+
+\renewcommand*\descriptionlabel[1]{\hspace\labelsep
+ \normalfont #1}
+
+
+\DeclareDocInfo
+{
+ university={Acro\negthinspace\TeX.Net},
+ title={The \textsf{xbmks} package\texorpdfstring{\\}{:}Cross-document bookmarks},
+ author={D. P. Story},
+ email={dpstory@acrotex.net},
+ subject={Documentation for the richtext package from AcroTeX},
+ talksite={\url{www.acrotex.net}},
+ version={1.0, 2018/06/11},
+ keywords={AcroTeX, rich text strings},
+ copyrightStatus=True,
+ copyrightNotice={Copyright (C) \the\year, D. P. Story},
+ copyrightInfoURL={http://www.acrotex.net}
+}
+
+\def\dps{$\hbox{$\mathfrak D$\kern-.3em\hbox{$\mathfrak P$}%
+ \kern-.6em \hbox{$\mathcal S$}}$}
+
+\universityLayout{fontsize=Large}
+\titleLayout{fontsize=LARGE}
+\authorLayout{fontsize=Large}
+\tocLayout{fontsize=Large,color=aeb}
+\sectionLayout{indent=-62.5pt,fontsize=large,color=aeb}
+\subsectionLayout{indent=-31.25pt,color=aeb}
+\subsubsectionLayout{indent=0pt,color=aeb}
+\subsubDefaultDing{\texorpdfstring{$\bullet$}{\textrm\textbullet}}
+
+\widestNumber{0.00.}
+%\pagestyle{empty}
+%\parindent0pt\parskip\medskipamount
+
+\def\dps{$\mbox{$\mathfrak D$\kern-.3em\mbox{$\mathfrak P$}%
+ \kern-.6em \hbox{$\mathcal S$}}$}
+
+\newcount\fldCnt \fldCnt=0
+\def\incFldCnt{\global\advance\fldCnt1\relax}
+
+\frenchspacing
+
+\chngDocObjectTo{\newDO}{doc}
+\begin{docassembly}
+var titleOfManual="The xbmks package MANUAL";
+var manualfilename="Manual_BG_Print_xbmks.pdf";
+var manualtemplate="Manual_BG_Brown.pdf"; // Blue, Green, Brown
+var _pathToBlank="C:/Users/Public/Documents/ManualBGs/"+manualtemplate;
+var doc;
+var buildIt=false;
+if ( buildIt ) {
+ console.println("Creating new " + manualfilename + " file.");
+ doc = \appopenDoc({cPath: _pathToBlank, bHidden: true});
+ var _path=this.path;
+ var pos=_path.lastIndexOf("/");
+ _path=_path.substring(0,pos)+"/"+manualfilename;
+ \docSaveAs\newDO ({ cPath: _path });
+ doc.closeDoc();
+ doc = \appopenDoc({cPath: manualfilename, oDoc:this, bHidden: true});
+ f=doc.getField("ManualTitle");
+ f.value=titleOfManual;
+ doc.flattenPages();
+ \docSaveAs\newDO({ cPath: manualfilename });
+ doc.closeDoc();
+} else {
+ console.println("Using the current "+manualfilename+" file.");
+}
+var _path=this.path;
+var pos=_path.lastIndexOf("/");
+_path=_path.substring(0,pos)+"/"+manualfilename;
+\addWatermarkFromFile({
+ bOnTop:false,
+ bOnPrint:false,
+ cDIPath:_path
+});
+\executeSave();
+\end{docassembly}
+
+\begin{document}
+
+\maketitle
+
+\selectColors{linkColor=black}
+\tableofcontents
+\selectColors{linkColor=webgreen}
+
+\def\AcroT{Acro\!\TeX}\def\cAcroT{\textcolor{blue}{\AcroT}}
+\def\AcroEB{\AcroT{} eDucation Bundle}\def\cAcroEB{\textcolor{blue}{\AcroEB}}
+\def\AcroB{\AcroT{} Bundle}\def\cAcroB{\textcolor{blue}{\AcroB}}
+\def\bUrl{http://www.math.uakron.edu/~dpstory}
+
+\hypersetup{linktocpage}
+
+
+\section{Introduction}
+
+It has been more than a couple decades ago (counting back from 2018), I wrote
+two mathematics tutorials:
+\textsl{\href{http://www.math.uakron.edu/~dpstory/e-calculus.html}{eCalculus}}
+and
+\textsl{\mlhref{http://www.math.uakron.edu/~dpstory/mpt_home.html}{Algebra
+Review in Ten Lessons}}. The tutorials consisted of a number of lessons, each
+lesson was in a separate PDF. The bookmarks of each lesson contained the
+table of contents \emph{for the whole tutorial}. A student, in theory, could
+then jump from one lesson to another by selecting a topic of interest from
+the bookmarks. In the intervening years I have not seen a {\LaTeX} package
+for merging the table of contents of a set of PDFs and merge them in this
+each member of the set. The \pkg{xbmks} package attempts to reproduce this
+feature.
+
+\section{Required packages and options}
+
+The only requirement is the \pkg{hyperref} package; there is a negative
+requirement, the \pkg{bookmark} package is not supported. If it is detected
+within a \pkg{xbmks} document, normal non-cross-document bookmarks are
+produced.
+
+The only options are driver options, these are \opt{dvips} (\app{Acrobat
+Distiller} or \app{ps2pdf} can be used as the PDF creator), \opt{pdftex} (and
+\opt{luatex}, which is treated the same as \opt{pdftex}), and \opt{xetex}. Of
+course, this is a {\LaTeX} package, so the `la' versions of these applications
+need to be used. The package auto-detects \app{pdftex} and \app{xetex}, and
+\opt{dvips} is the default, so there is actually no need to pass the driver
+option.
+
+\section{The preamble command \texorpdfstring{\protect\cs{xbmksetup}}{\textbackslash{xbmksetup}}}
+
+The only user command is \cs{xbmksetup}:
+\bVerb\def\1{\qquad}\takeMeasure{\1colors=\darg{intdoc=\ameta{color},extdoc=\ameta{color}},}%
+\begin{dCmd}[commandchars=!()]{\bxSize}
+\xbmksetup{%
+!1docbundle={!ameta(doc!SUB1),!ameta(doc!SUB2),...,!ameta(doc!SUB(n))},
+!1colors={intdoc=!ameta(color),extdoc=!ameta(color)},
+!1style={intbf,extbf,intit,extit}
+}
+\end{dCmd}
+\eVerb You have a collection of files (as specified by the \texttt{docbundle}
+key) that you want to merge the bookmarks together so they appear in all the
+files. However, the \cs{xbmksetup} only appears \textbf{in one and only one
+of the documents}, perhaps the one that you think of as the main file.\footnote{The main file is the first one
+listed in the value of the \texttt{docbundle} key.} The
+argument of \cs{xbmksetup} are written to the file \texttt{xbmks.cfg} and
+input back into each of the files as they are compiled. This is needed so
+that across all files in the document bundle, they all obey the very same
+options.
+
+\paragraph*{Description of the key-values}
+\begin{description}
+ \item[\texttt{docbundle}] (Required) The value of this key, \emph{which
+ is required to be nonempty}, is a comma-delimited list of base names
+ that are a part of this document collection, or bundle. For example,
+\begin{Verbatim}[xleftmargin=\amtIndent]
+docbundle={lesson1,lesson2,lesson3,lesson4}
+\end{Verbatim}
+The order the bookmarks are listed in each file of the document bundle is the same order
+the files are listed in \texttt{docbundle}; in this above example, the bookmarks for
+\texttt{lesson1} are listed first, than those of \texttt{lesson2}, and so on.
+
+The first document listed (\texttt{lesson1}) is where the \cs{xbmksetup}
+commend is placed. This file might be thought of as the `main' file.
+
+\textbf{\textcolor{red}{Important:}} It is extremely important to list the
+base names the using the same spelling and case as the \cs{jobname} command
+returns in each of the bundle collection. When each file is compiled,
+\pkg{xbmks} tries to determine which in the list of \texttt{docbundle}
+files is the one currently being compiled; it is necessary in order to
+create a internal jump or an external jump. If anything goes wrong, be sure
+to check the spelling of each file listed.
+
+ \item[\texttt{colors}] (Optional) For any given document in the bundle,
+ there are two types of links in the bookmarks, a link to an item in
+ the current (or internal) document, or a link to an external document
+ (within the bundle of documents).
+ \begin{itemize}
+ \item \texttt{intdoc=\ameta{color}}, where \ameta{color} is an rgb
+ color. This specifies the color of the link for an internal
+ jump within the current document. Specify the color
+ using the syntax \texttt{\darg{[rgb]{\ameta{r},\ameta{g},\ameta{b}}}};
+ for example,
+\begin{Verbatim}[xleftmargin=\amtIndent]
+colors={intdoc={[rgb]{0,.6,0}}
+\end{Verbatim}
+or, if the \pkg{xcolor} package is loaded, \emph{named colors} may be used.
+ \item\texttt{extdoc=\ameta{color}}, where \ameta{color} is an rgb
+ color. This specifies the color of the link for an external jump
+ to another member of the document bundle. Color specification is the
+ same as for \texttt{intdoc}:
+\begin{Verbatim}[xleftmargin=\amtIndent]
+colors={intdoc=red,extdoc=blue}
+\end{Verbatim}
+In the above example, we assume \pkg{xcolor} is loaded and specify the
+colors accordingly.
+
+\textbf{The default color.} If you declare \texttt{intdoc} (or
+\texttt{extdoc}) without a value, you get the default, which is the color
+key is not specified within the PDF document. The \texttt{color} key is
+optional, in which case, you get the default color. What is the default
+color? Well, its either white or black, depending on the \textsf{Display
+Theme}. The PDF viewer (\app{Acrobat} and \app{Acrobat Reader DC}
+automatically switch colors when the theme is changed).
+
+When you specify a color, be aware that what looks good in the \emph{light
+theme} may not be so visible in a \emph{dark theme}.
+ \end{itemize}
+ \item[\texttt{style}] (Optional) The Adobe PDF viewer applications also
+ support a bold and italics style. These can be specified for the
+ internal and external documents.
+ \begin{itemize}
+ \item Internal style (valueless) keys are \texttt{intbf} and \texttt{intit}; zero, one, or
+ two of these may be specified,
+\begin{Verbatim}[xleftmargin=\amtIndent,commandchars=!()]
+style={intbf} % !normalfont(bold font)
+style={intit} % !normalfont(italics font)
+style={intbf,intit} % !normalfont(bold and italics font)
+\end{Verbatim}
+ \item External style (valueless) keys are \texttt{extbf} and \texttt{extit}; zero, one, or
+ two of these may be specified,
+\begin{Verbatim}[xleftmargin=\amtIndent,commandchars=!()]
+style={extbf} % !normalfont(bold font)
+style={extit} % !normalfont(italics font)
+style={extbf,extit} % !normalfont(bold and italics font)
+\end{Verbatim}
+ \end{itemize}
+Of course, all these keys are specified or not, in the \texttt{style} key:
+\begin{Verbatim}[xleftmargin=\amtIndent]
+style={intbf,extit}
+\end{Verbatim}
+Here, we specify bold font for the current document and an italics for an
+internal document.
+\end{description}
+
+
+\newtopic\noindent\textbf{Point of personal preference.} After experimenting with
+various combinations of colors and styles with combinations of themes
+(light and dark) I prefer no color specified with bold font for the current
+document and plain font for any external document. I think it's important to
+make it clear in the bookmark panel which are internal and which are
+external. The bold font tells the same story independent of theme. Thus,\def\1{\qquad}%
+\begin{Verbatim}[xleftmargin=\amtIndent,commandchars=!()]
+\xbmksetup{%
+!1docbundle={!ameta(doc!SUB1),!ameta(doc!SUB2),...,!ameta(doc!SUB(n))},
+!1style={intbf}
+}
+\end{Verbatim}
+seems to be a reasonable choice of key-values.
+
+\section{Workflow}
+
+Given that you have a collection of files that are to contain a common set of
+bookmarks, how exactly do you do this? Basically, you treat them the same way
+as you would when you use the \pkg{xy-hyper} package, used for creating cross
+document links.
+
+\paragraph*{Steps to build the document bundle}\leavevmode
+
+\begin{enumerate}
+ \item Compile each document at least twice without deleting any
+ auxiliary files, more if you are using \pkg{xr-hyper}; in
+ particular, without deleting any \textsf{OUT} outline files created
+ by \pkg{hyperref}.
+
+ In terms of order of compilation, compile the main file first (the
+ one that contains the \cs{xbmksetup} command); this will write the
+ \texttt{xbmks.cfg} file and it will be available to the other files
+ in the bundle as you compile them.
+
+ \item All files have been compiled twice, now compile them one more
+ time so they can input the updated \textsf{OUT} files of the
+ collection and the \texttt{xbmks.cfg} configuration file that
+ contains your setup options for the whole collection.
+ \item If you are using \app{pdflatex}, \app{lualatex}, or
+ \app{xelatex}, you are done; otherwise, covert each DVI file to PS
+ using \app{dvips}. Finally, convert each PS file in the collection
+ to PDF using \app{Acrobat Distiller} or \app{ps2pdf}.
+ \item Delete all auxiliary file, including \texttt{xbmks.cfg} if you wish.
+\end{enumerate}
+If you are on \app{Windows OS}, you can use the
+\app{\href{http://www.acrotex.net/builders/}{AeB Builder}}
+utility.\footnote{\url{http://www.acrotex.net/builders/}} In that utility, you would select the
+\app{External cross-references} option, found on the user-interface.
+
+\paragraph*{Sample files.} The demonstration files are found in the \texttt{examples} folder. The
+\pkg{xcolor} package is used, otherwise, the packages used are minimal.
+
+
+\newtopic\noindent Now, back to my retirement. \dps
+
+
+
+\end{document}
diff --git a/Master/texmf-dist/doc/latex/xbmks/examples/doc1.pdf b/Master/texmf-dist/doc/latex/xbmks/examples/doc1.pdf
new file mode 100644
index 00000000000..351354a5363
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/xbmks/examples/doc1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/xbmks/examples/doc1.tex b/Master/texmf-dist/doc/latex/xbmks/examples/doc1.tex
new file mode 100644
index 00000000000..10dda228034
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/xbmks/examples/doc1.tex
@@ -0,0 +1,43 @@
+\documentclass{article}
+\usepackage{xcolor}
+\usepackage[bookmarksopen]{hyperref}
+\usepackage{xbmks}
+
+% the xr-hyper package may also be used if you have
+% cross document links within the body of the doc
+%\usepackage{xr-hyper}
+%\externaldocument[m-]{master}
+%\externaldocument[d2-]{doc2}
+
+
+
+\begin{document}
+
+\section{Doc 1: Sec 1}\label{sec1}
+
+Some content goes here.
+
+\newpage
+
+\subsection{Doc 1: subSec 1}
+
+Some content goes here.
+
+\newpage
+
+\subsection{Doc 1: subSec 2}
+
+Some content goes here.
+
+\newpage
+
+\section{Doc 1: Sec 2}
+
+Some content goes here.: go to Section~\ref{sec1}
+
+\newpage
+
+\subsection{Doc 1: subSec 1}
+
+
+\end{document}
diff --git a/Master/texmf-dist/doc/latex/xbmks/examples/doc2.pdf b/Master/texmf-dist/doc/latex/xbmks/examples/doc2.pdf
new file mode 100644
index 00000000000..494fa06b274
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/xbmks/examples/doc2.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/xbmks/examples/doc2.tex b/Master/texmf-dist/doc/latex/xbmks/examples/doc2.tex
new file mode 100644
index 00000000000..9229cb1473e
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/xbmks/examples/doc2.tex
@@ -0,0 +1,41 @@
+\documentclass{article}
+\usepackage{xcolor}
+\usepackage[bookmarksopen]{hyperref}
+\usepackage{xbmks}
+
+% the xr-hyper package may also be used if you have
+% cross document links within the body of the doc
+%\usepackage{xr-hyper}
+%\externaldocument[m-]{master}
+%\externaldocument[d1-]{doc1}
+
+\begin{document}
+
+\section{Doc 2: Sec 1}
+
+Some content goes here.
+
+\newpage
+
+\subsection{Doc 2: subSec 1}
+
+Some content goes here.
+
+\section{Doc 2: Sec 2}
+
+\subsection{Doc 2: subSec 1}
+
+Some content goes here.
+
+\newpage
+
+\subsection{Doc 2: subSec 2}
+
+Some content goes here.
+
+\subsection{Doc 2: subSec 3}
+
+Some content goes here.
+
+
+\end{document}
diff --git a/Master/texmf-dist/doc/latex/xbmks/examples/master.pdf b/Master/texmf-dist/doc/latex/xbmks/examples/master.pdf
new file mode 100644
index 00000000000..f82fe27dc2d
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/xbmks/examples/master.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/xbmks/examples/master.tex b/Master/texmf-dist/doc/latex/xbmks/examples/master.tex
new file mode 100644
index 00000000000..21bd1f47927
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/xbmks/examples/master.tex
@@ -0,0 +1,57 @@
+\documentclass{article}
+\usepackage{xcolor}
+\usepackage[bookmarksopen]{hyperref}
+\usepackage{xbmks}
+
+% the xr-hyper package may also be used if you have
+% cross document links within the body of the doc
+%\usepackage{xr-hyper}
+%\externaldocument[d1-]{doc1}
+%\externaldocument[d2-]{doc2}
+
+\title{On merging bookmarks for several documents}
+\author{D. P. Story}
+
+% The \xbmksetup command is placed in only
+% one of the collection. It is written to xbmks.cfg
+% in input by the other files to obtain uniformity
+% of option choices.
+\xbmksetup{%
+ docbundle={master,doc1,doc2},
+% colors={intdoc=red,extdoc},
+ style={intbf}
+}
+
+\begin{document}
+
+\maketitle
+
+\section{Master One}
+
+Some content goes here.
+
+\subsection{Master One: subSec 1}
+
+Some content goes here.
+
+\newpage
+
+
+\section{Master Two}
+
+Some content goes here.
+
+
+\subsection{Master Two: subSec 1}
+
+Some content goes here.
+
+\newpage
+
+\subsection{Master Two: subSec 2}
+
+Some content goes here.
+
+
+\end{document}
+
diff --git a/Master/texmf-dist/source/latex/xbmks/xbmks.dtx b/Master/texmf-dist/source/latex/xbmks/xbmks.dtx
new file mode 100644
index 00000000000..8b69dd97b5e
--- /dev/null
+++ b/Master/texmf-dist/source/latex/xbmks/xbmks.dtx
@@ -0,0 +1,524 @@
+%\iffalse
+% makeindex -s gglo.ist -o xbmks.gls xbmks.glo
+% makeindex -s gind.ist -o xbmks.ind xbmks.idx
+%<*copyright>
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% xbmks.sty package, %%
+%% Copyright (C) 2016--2018 %%
+%% dpstory@uakron.edu %%
+%% %%
+%% This program can redistributed and/or modified under %%
+%% the terms of the LaTeX Project Public License %%
+%% Distributed from CTAN archives in directory %%
+%% macros/latex/base/lppl.txt; either version 1.2 of the %%
+%% License, or (at your option) any later version. %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%</copyright>
+%<package>\NeedsTeXFormat{LaTeX2e}[1997/12/01]
+%<package>\ProvidesPackage{xbmks}
+%<package> [2018/06/11 v1.0 xbmks: Cross-document bookmarks (dps)]
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[colorlinks,hyperindex=false]{hyperref}
+\usepackage{fancyvrb,array,calc}
+%\pdfstringdefDisableCommands{\let\\\textbackslash}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\bgroup\ttfamily
+\gdef\brpr#1{\char123\relax#1\char125\relax}\egroup
+\let\darg\brpr
+\let\env\texttt
+\let\opt\texttt
+\let\pkg\textsf
+\let\app\textsf
+\def\visispace{\symbol{32}}
+%\def\hardspace{{\fontfamily{cmtt}\selectfont\symbol{32}}}
+\def\ameta#1{\ensuremath{\langle\textit{\texttt{#1}}\rangle}}
+\def\meta#1{\textsl{\texttt{#1}}}
+\def\SUB#1{\ensuremath{{}_{\mbox{\scriptsize\ttfamily#1}}}}
+\def\cs#1{\texttt{\bslash#1}}
+\DeclareRobustCommand{\tmspace}[3]{%
+ \ifmmode\mskip#1#2\else\kern#1#3\fi\relax}
+\renewcommand{\,}{\tmspace+\thinmuskip{.1667em}}
+\let\thinspace\,
+\renewcommand{\!}{\tmspace-\thinmuskip{.1667em}}
+\let\negthinspace\!
+\renewcommand{\:}{\tmspace+\medmuskip{.2222em}}
+\let\medspace\:
+\newcommand{\negmedspace}{\tmspace-\medmuskip{.2222em}}
+\renewcommand{\;}{\tmspace+\thickmuskip{.2777em}}
+\let\thickspace\;
+\newcommand{\negthickspace}{\tmspace-\thickmuskip{.2777em}}
+\makeatletter
+\renewcommand{\paragraph}
+ {\@startsection{paragraph}{4}{0pt}{6pt}{-3pt}
+ {\normalfont\normalsize\bfseries}}
+\renewenvironment{quote}[1][]
+ {\def\@rgi{#1}\ifx\@rgi\@empty
+ \let\rghtm\@empty\else\def\rghtm{\rightmargin\leftmargin}\fi
+ \list{}{\rghtm} %{\rightmargin\leftmargin}%
+ \item\relax}
+ {\endlist}
+\makeatother
+\InputIfFileExists{aebdocfmt.def}{\PackageInfo{xbmks}{Inputting aebdocfmt.def}}
+ {\def\IndexOpt{\DescribeMacro}\def\IndexKey{\DescribeMacro}\let\setupFullwidth\relax
+ \PackageInfo{xbmks}{aebdocfmt.def cannot be found}}
+\begin{document}
+\def\CMD#1{\textbackslash#1}
+ \GetFileInfo{xbmks.sty}
+ \title{\textsf{xbmks}: Cross-document bookmarks}
+ \author{D. P. Story\\
+ Email: \texttt{dpstory@acrotex.net}}
+ \date{processed \today}
+ \maketitle
+ \tableofcontents
+ \let\Email\texttt
+ \DocInput{xbmks.dtx}
+\IfFileExists{\jobname.ind}{\newpage\setupFullwidth\par\PrintIndex}{\paragraph*{Index} The index goes here.\\Execute
+ \texttt{makeindex -s gind.ist -o xbmks.ind xbmks.idx}\\on the command line and recompile
+ \texttt{xbmks.dtx}.}
+\IfFileExists{\jobname.gls}{\PrintChanges}{\paragraph*{Change History} The list of changes goes here.\\Execute
+ \texttt{makeindex -s gglo.ist -o xbmks.gls xbmks.glo}\\on the command line and recompile
+ \texttt{xbmks.dtx}.}
+\end{document}
+%</driver>
+% \fi
+% \MakeShortVerb{|}
+%
+% \InputIfFileExists{aebdonotindex.def}{\PackageInfo{web}{Inputting aebdonotindex.def}}
+% {\PackageInfo{web}{cannot find aebdonotindex.def}}
+%
+% \begin{macrocode}
+% Begin package
+%<*package>
+\RequirePackage{xkeyval}
+\RequirePackage{ifpdf}[2006/02/20]
+\RequirePackage{ifxetex}[2006/08/21]
+% \end{macrocode}
+%
+%\section{Description}
+% More than a couple decades ago (counting back from 2018), I wrote two mathematics tutorials: \textsl{\href{http://www.math.uakron.edu/~dpstory/e-calculus.html}{eCalculus}} and
+% \textsl{\href{http://www.math.uakron.edu/~dpstory/mpt_home.html}{Algebra Review in Ten Lessons}}. The tutorials consisted of a number of lessons, each in a separate PDF.
+% The bookmarks of each lessons contained the table of contents for the whole tutorial. A student, in theory, could then
+% jump from one lesson to another by selecting an entry of interest from the bookmarks. In the intervening years I have not seen
+% a {\LaTeX} package for merging the table of contents of a set of PDFs and merge them in this each member of the
+% set. This package attempts to do just that.
+%
+% \section{Drivers and options}
+% We support the drivers \app{dvips} (and \app{dvipsone}), \app{pdflatex}, \app{lualatex}, and \app{xelatex}; these
+% options are then named \opt{dvipsone}, \opt{dvips}, \opt{pdftex}, \opt{luatex}, and \opt{xetex}.
+% \begin{macrocode}
+\def\xbmk@driver{bmks-pdfmark.def}
+\DeclareOptionX{dvipsone}{\def\xbmk@driver{bmks-pdfmark.def}}
+\DeclareOptionX{dvips}{\def\xbmk@driver{xbmks-pdfmark.def}}
+\DeclareOptionX{pdftex}{\def\xbmk@driver{xbmks-pdftex.def}}
+\DeclareOptionX{luatex}{\def\xbmk@driver{xbmks-pdftex.def}}
+\DeclareOptionX{xetex}{\def\xbmk@driver{xbmks-xetex.def}}
+%\AtEndOfPackage{\InputIfFileExists{\xbmk@driver}{}{}}
+% \end{macrocode}
+% \section{Process the options}
+% \begin{macrocode}
+\ifpdf\ExecuteOptionsX{pdftex}\else
+ \ifxetex\ExecuteOptionsX{xetex}\else
+ \let\ExecuteOptions@SAVE\ExecuteOptions
+ \let\ExecuteOptions\ExecuteOptionsX
+ \InputIfFileExists{web.cfg}{}
+ {\@ifundefined{l@tex@@@@driver}{\ExecuteOptionsX{dvips}}
+ {\ExecuteOptionsX{dvipsone}}}%
+ \let\ExecuteOptions\ExecuteOptions@SAVE
+ \fi\fi
+\ProcessOptionsX
+% \end{macrocode}
+% \section{Requirements}
+% The minimal requirement is \pkg{hyperref} and its built-in bookmark system. It is important to note that
+% the \pkg{bookmark} package is not supported.
+% \begin{macrocode}
+\RequirePackage{hyperref}
+% \end{macrocode}
+% \begin{macro}{\xbmksetup}
+% Set the cross-document options:
+%\begin{quote}\ttfamily\obeylines
+%\string\xbmksetup\darg{%
+%\qquad docbundle=\darg{\ameta{doc\SUB1},\ameta{doc\SUB2},...,\ameta{doc\SUB{n}}},
+%\qquad colors=\darg{intdoc=\ameta{color},extdoc=\ameta{color}},
+%\qquad style=\darg{intbf,extbf,intit,extit}
+%}
+%\end{quote}
+%This command must appear in one and only one of the document bundle, perhaps one
+%of the documents you are calling the `main file'. It writes
+%the key-values to the file \texttt{xbmks.cfg} which is then read back in by the other
+%members of the document bundle, as specified by the \texttt{dobundle} key. The base names
+%of the document bundle must match the name given to it by \cs{jobname}, exact spelling, case
+%sensitive.
+% \begin{macrocode}
+\define@key{xbmksetup}{docbundle}[]{\def\x@bmks@docs{#1}}
+\let\x@bmks@docs\@empty
+\define@key{xbmksetup}{colors}[]{\def\x@bmks@colors{#1}}
+\let\x@bmks@colors\@empty
+\define@key{xbmksetup}{style}[]{\def\x@bmks@style{#1}}
+\let\x@bmks@style\@empty
+\define@key{xbmk@colors}{intdoc}[]{%
+ \HyColor@BookmarkColor{#1}{\xbmks@intdoc}{xbmks}{intdoc}%
+ \ifx\xbmks@intdoc\@empty\else
+ \edef\xbmks@intdoc{/C [\xbmks@intdoc]}\fi
+}
+\let\xbmks@intdoc\@empty
+\define@key{xbmk@colors}{extdoc}[]{%
+ \HyColor@BookmarkColor{#1}{\xbmks@extdoc}{xbmks}{extdoc}%
+ \ifx\xbmks@extdoc\@empty\else
+ \edef\xbmks@extdoc{/C [\xbmks@extdoc]}\fi
+}
+\let\xbmks@extdoc\@empty
+\let\xbmks@Yes=y
+\let\xbmks@No=n
+\define@boolkey{xbmk@style}{intbf}[true]{} %\ifKV@xbmk@style@intbf
+\define@boolkey{xbmk@style}{extbf}[true]{}
+\define@boolkey{xbmk@style}{intit}[true]{}
+\define@boolkey{xbmk@style}{extit}[true]{}
+\newcommand{\xbmksetup}[1]{\write@xbmks@cfg{#1}}
+\def\write@xbmks@cfg#1{%
+ \newwrite\xbmks@setup \immediate\openout \xbmks@setup xbmks.cfg
+ \set@display@protect
+ \immediate\write\xbmks@setup{\protect\xbmksetupi{#1}}
+ \set@typeset@protect
+ \immediate\closeout\xbmks@setup
+}
+\newcommand{\xbmksetupi}[1]{%
+ \setkeys{xbmksetup}{#1}%
+ \ifx\x@bmks@docs\@empty
+ \PackageWarning{xbmks}{The docbundle key is empty,\MessageBreak
+ this key must have a value for cross-document bookmarks\MessageBreak
+ to be generated}\else
+ \edef\@exp@for{\noexpand\docbundle{\x@bmks@docs}}\expandafter
+ \@exp@for\fi
+ \edef\@exp@keys{\noexpand
+ \setkeys{xbmk@colors}{\x@bmks@colors}}\@exp@keys
+ \edef\@exp@keys{\noexpand
+ \setkeys{xbmk@style}{\x@bmks@style}}\@exp@keys
+ \def\xbmk@intF{}%
+ \ifKV@xbmk@style@intit
+ \ifKV@xbmk@style@intbf
+ \def\xbmk@intF{/F 3}%
+ \else
+ \def\xbmk@intF{/F 1}%
+ \fi
+ \else
+ \ifKV@xbmk@style@intbf
+ \def\xbmk@intF{/F 2}%
+ \fi
+ \fi
+ \def\xbmk@extF{}%
+ \ifKV@xbmk@style@extit
+ \ifKV@xbmk@style@extbf
+ \def\xbmk@extF{/F 3}%
+ \else
+ \def\xbmk@extF{/F 1}%
+ \fi
+ \else
+ \ifKV@xbmk@style@extbf
+ \def\xbmk@extF{/F 2}%
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\docbundle}
+% is a comma-delimited list of document base names:
+%\begin{quote}\ttfamily\obeylines
+%\string\docbundle\darg{\ameta{doc\SUB1},\ameta{doc\SUB2},...,\ameta{doc\SUB{n}}}
+%\end{quote}
+%This command is called internally by \cs{xbmksetup}.
+% \begin{macrocode}
+\def\xbmk@csarg#1#2{\expandafter#1\csname#2\endcsname}
+\xdef\xbmk@cnt{0}
+\newcommand{\docbundle}[1]{\bgroup
+ \def\thisDoc{\jobname}\count\z@=0 %
+ \edef\@tmpexp{\noexpand\@for\noexpand\@arg:=#1}%
+ \@tmpexp\do{%
+ \advance\count\z@ by 1\relax
+ \edef\@tmpexp{\noexpand\xbmk@recordDoc{\@arg}}\@tmpexp
+ }%
+ \xdef\xbmk@cnt{\the\count\z@}\egroup
+}
+\newcommand{\xbmk@recordDoc}[1]{%
+ \xbmk@csarg\xdef{xbmk@doc\the\count\z@}{#1}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+% End package
+%</package>
+%<*pdfmark>
+% \end{macrocode}
+% \section{Driver dependent code}
+% \subsection{The pdfmark driver}
+% We redefine/modify the \cs{ReadBookmarks} command of \pkg{hyperref},
+% this definition is driver dependent.
+% \begin{macrocode}
+\def\ReadBookmarks{%
+ \pdf@ifdraftmode{}{%
+ \begingroup
+ \def\calc@bm@number##1{%
+ \@tempcnta=\check@bm@number{##1}\relax
+ \advance\@tempcnta by 1 %
+ \expandafter\edef\csname B_##1\endcsname{\the\@tempcnta}%
+ }%
+ \def\do##1{%
+ \ifnum\catcode`##1=\active
+ \@makeother##1%
+ \else
+ \ifnum\catcode`##1=6 %
+ \@makeother##1%
+ \fi
+ \fi
+ }%
+ \dospecials
+ \Hy@safe@activestrue
+ \escapechar=`\\%
+ \ifx\WriteBookmarks\relax
+ \global\let\WriteBookmarks\relax
+ \fi
+ \begingroup
+ \def\WriteBookmarks{0}%
+ \count\z@=0\relax
+ \edef\xbmk@J{\jobname}%
+ \@whilenum \count\z@<\xbmk@cnt\relax\do{%
+ \advance\count\z@ by 1 %
+ \edef\xbmk@thisdoc{xbmk@doc\the\count\z@}%
+ \edef\xbmk@filename{\@nameuse{\xbmk@thisdoc}}%
+ \@onelevel@sanitize\xbmk@filename
+ \bgroup
+ \def\@@BOOKMARK[##1][##2]##3##4##5{%
+ \calc@bm@number{##5}%
+ }%
+ \InputIfFileExists{\xbmk@filename.out}{}{}%
+ \def\@@BOOKMARK[##1][##2]##3##4##5{%
+ \def\Hy@temp{##4}%
+ \ifx\xbmk@J\xbmk@filename
+ \pdfmark{%
+ pdfmark=/OUT,%
+ Count={##2\check@bm@number{##3}},%
+ Raw={\xbmks@intdoc\xbmk@intF},%
+ Dest={##3},%
+ Title=\expandafter\strip@prefix\meaning\Hy@temp
+ }%
+ \else
+ \pdfmark{%
+ pdfmark=/OUT,%
+ Count={##2\check@bm@number{##3}},%
+ Raw={\xbmks@extdoc\xbmk@extF},%
+ Action=/GoToR,%
+ File={\xbmk@filename.pdf},%
+ Dest={##3},%
+ Title=\expandafter\strip@prefix\meaning\Hy@temp
+ }%
+ \fi
+ }%
+ \InputIfFileExists{\xbmk@filename.out}{}{}%
+ \egroup
+ }% \@whilenum
+ \endgroup
+ \endgroup
+ }%
+ \ifx\WriteBookmarks\relax\else
+ \if@filesw
+ \newwrite\@outlinefile
+ \Hy@OutlineRerunCheck
+ \immediate\openout\@outlinefile=\jobname.out\relax
+ \ifHy@typexml
+ \immediate\write\@outlinefile{<relaxxml>\relax}%
+ \fi
+ \fi
+ \fi
+}
+%</pdfmark>
+% \end{macrocode}
+% \subsection{Code for pdftex/luatex driver}
+% We redefine/modify the \cs{ReadBookmarks} command of \pkg{hyperref},
+% this definition is driver dependent.
+% \begin{macrocode}
+%<*pdftex>
+\def\ReadBookmarks{%
+ \pdf@ifdraftmode{}{%
+ \begingroup
+ \def\calc@bm@number##1{%
+ \@tempcnta=\check@bm@number{##1}\relax
+ \advance\@tempcnta by 1 %
+ \expandafter\edef\csname B_##1\endcsname{\the\@tempcnta}%
+ }%
+ \def\Hy@OutlineName##1##2##3##4{\def\@rgi{##1}%
+ \expandafter\pdfoutline\ifx\@rgi\@empty\else
+ attr {##1} \fi
+ user {##2} count##3{##4}%
+ % goto name{#2} count#3{#4}%
+ }%
+ \def\do##1{%
+ \ifnum\catcode`##1=\active
+ \@makeother##1%
+ \else
+ \ifnum\catcode`##1=6 %
+ \@makeother##1%
+ \fi
+ \fi
+ }%
+ \dospecials
+ \Hy@safe@activestrue
+ \escapechar=`\\%
+ \ifx\WriteBookmarks\relax
+ \global\let\WriteBookmarks\relax
+ \fi
+ \begingroup
+ \def\WriteBookmarks{0}%
+ \count\z@=0\relax
+% \toks0=\expandafter{\jobname}%
+% \edef\xbmk@J{\the\toks0}%
+ \edef\xbmk@J{\jobname}%
+ \@whilenum \count\z@<\xbmk@cnt\relax\do{%
+ \advance\count\z@ by 1 %
+ \edef\xbmk@thisdoc{xbmk@doc\the\count\z@}%
+ \edef\xbmk@filename{\@nameuse{\xbmk@thisdoc}}%
+ \@onelevel@sanitize\xbmk@filename
+ \bgroup
+ \gdef\@@BOOKMARK[##1][##2]##3##4##5{%
+ \calc@bm@number{##5}%
+ }%
+ \InputIfFileExists{\xbmk@filename.out}{}{}%
+ \gdef\@@BOOKMARK[##1][##2]##3##4##5{%
+ \def\Hy@temp{##4}%
+ \Hy@pstringdef\Hy@pstringName{\HyperDestNameFilter{##3}}%
+ \ifx\xbmk@J\xbmk@filename
+ \Hy@OutlineName{\xbmks@intdoc\xbmk@intF}{<</S/GoTo%
+ /D(\Hy@pstringName)>>}{%
+ ##2\check@bm@number{\Hy@pstringName}%
+ }{%
+ \expandafter\strip@prefix\meaning\Hy@temp
+ }%
+ \else
+ \Hy@OutlineName{\xbmks@extdoc\xbmk@extF}{<</S/GoToR%
+ /F(\xbmk@filename.pdf)/D(\Hy@pstringName)>>}{%
+ ##2\check@bm@number{##3}%
+ }{%
+ \expandafter\strip@prefix\meaning\Hy@temp
+ }%
+ \fi
+ }% bookmark
+ \InputIfFileExists{\xbmk@filename.out}{}{}%
+ \egroup
+ } % \@whilenum
+ \endgroup
+ }%
+ \ifx\WriteBookmarks\relax
+ \else
+ \if@filesw
+ \newwrite\@outlinefile
+ \Hy@OutlineRerunCheck
+ \immediate\openout\@outlinefile=\jobname.out\relax
+ \ifHy@typexml
+ \immediate\write\@outlinefile{<relaxxml>\relax}%
+ \fi
+ \fi
+ \fi
+}
+%</pdftex>
+%<*xetex>
+% \end{macrocode}
+% \subsection{Code for xetex driver}
+% We redefine/modify the \cs{ReadBookmarks} command of \pkg{hyperref},
+% this definition is driver dependent.
+% \begin{macrocode}
+\def\ReadBookmarks{%
+ \pdf@ifdraftmode{}{%
+ \begingroup
+ \def\calc@bm@number##1{%
+ \@tempcnta=\check@bm@number{##1}\relax
+ \advance\@tempcnta by 1 %
+ \expandafter\edef\csname B_##1\endcsname{\the\@tempcnta}%
+ }%
+ \def\do##1{%
+ \ifnum\catcode`##1=\active
+ \@makeother##1%
+ \else
+ \ifnum\catcode`##1=6 %
+ \@makeother##1%
+ \fi
+ \fi
+ }%
+ \dospecials
+ \Hy@safe@activestrue
+ \escapechar=`\\%
+ \ifx\WriteBookmarks\relax
+ \global\let\WriteBookmarks\relax
+ \fi
+ \begingroup
+ \def\WriteBookmarks{0}%
+ \count\z@=0\relax
+ \edef\xbmk@J{\jobname}%
+ \@whilenum \count\z@<\xbmk@cnt\relax\do{%
+ \advance\count\z@ by 1 %
+ \edef\xbmk@thisdoc{xbmk@doc\the\count\z@}%
+ \edef\xbmk@filename{\@nameuse{\xbmk@thisdoc}}%
+ \@onelevel@sanitize\xbmk@filename
+ \bgroup
+ \def\@@BOOKMARK[##1][##2]##3##4##5{%
+ \calc@bm@number{##5}%
+ }%
+ \InputIfFileExists{\xbmk@filename.out}{}{}%
+ \def\@@BOOKMARK[##1][##2]##3##4##5{%
+ \def\Hy@temp{##4}%
+ \Hy@pstringdef\Hy@pstringName{\HyperDestNameFilter{##3}}%
+ \@pdfm@mark{%
+ outline \ifHy@DvipdfmxOutlineOpen
+ [%
+ \ifnum##21>\z@
+ \else
+ -%
+ \fi
+ ] %
+ \fi
+ ##1<<%
+ /Title(\expandafter\strip@prefix\meaning\Hy@temp)%
+ \ifx\xbmk@J\xbmk@filename
+ /A<<%
+ /S/GoTo%
+ /D(\Hy@pstringName)%
+ >>%
+ \xbmks@intdoc\xbmk@intF
+ \else
+ /A<<%
+ /S/GoToR/F(\xbmk@filename.pdf)%
+ /D(\Hy@pstringName)%
+ >>%
+ \xbmks@extdoc\xbmk@extF
+ \fi
+ >>%
+ }% \@pdfm@mark
+ }% bookmark
+ \InputIfFileExists{\xbmk@filename.out}{}{}%
+ \egroup
+ }% \@whilenum
+ \endgroup
+ \endgroup
+ }%
+ \ifx\WriteBookmarks\relax
+ \else
+ \if@filesw
+ \newwrite\@outlinefile
+ \Hy@OutlineRerunCheck
+ \immediate\openout\@outlinefile=\jobname.out\relax
+ \ifHy@typexml
+ \immediate\write\@outlinefile{<relaxxml>\relax}%
+ \fi
+ \fi
+ \fi
+}
+%</xetex>
+%<*package>
+\InputIfFileExists{xbmks.cfg}{}{}
+\@ifpackageloaded{bookmark}{\PackageWarningNoLine{xbmks}{The
+ bookmark package is not supported;\MessageBreak
+ this package does nothing, as a result}}
+{\InputIfFileExists{\xbmk@driver}{}{}}
+
+%</package>
+% \end{macrocode}
+% \Finale
diff --git a/Master/texmf-dist/source/latex/xbmks/xbmks.ins b/Master/texmf-dist/source/latex/xbmks/xbmks.ins
new file mode 100644
index 00000000000..a86889a8b67
--- /dev/null
+++ b/Master/texmf-dist/source/latex/xbmks/xbmks.ins
@@ -0,0 +1,62 @@
+%%
+%% This file will generate fast loadable files and documentation
+%% driver files from the doc files in this package when run through
+%% LaTeX or TeX.
+%%
+%% Copyright 2018 D. P. Story
+%% -------------------------------------------
+%%
+%% It may be distributed under the conditions of the LaTeX Project Public
+%% License, either version 1.2 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.2 or later is part of all distributions of LaTeX
+%% version 1999/12/01 or later.
+%%
+%% --------------- start of docstrip commands ------------------
+%%
+\def\filedate{2018/06/08}
+\def\batchfile{xbmks.ins}
+
+\input docstrip
+\ifx\generate\undefined
+ \Msg{**********************************************}
+ \Msg{*}
+ \Msg{* This installation requires docstrip}
+ \Msg{* version 2.4 or later.}
+ \Msg{*}
+ \Msg{* An older version of docstrip has been input}
+ \Msg{*}
+ \Msg{**********************************************}
+ \errhelp{Move or rename old docstrip.tex and get a newer one.}
+ \errmessage{Old docstrip in input path}
+ \batchmode
+ \csname @@end\endcsname\end
+\fi
+
+\keepsilent
+\askforoverwritefalse
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\preamble
+\endpreamble
+
+\generate
+{%
+ \file{xbmks.sty}{\from{xbmks.dtx}{copyright,package}}
+ \file{xbmks-pdfmark.def}{\from{xbmks.dtx}{copyright,pdfmark}}
+ \file{xbmks-pdftex.def}{\from{xbmks.dtx}{copyright,pdftex}}
+ \file{xbmks-luatex.def}{\from{xbmks.dtx}{copyright,luatex}}
+ \file{xbmks-xetex.def}{\from{xbmks.dtx}{copyright,xetex}}
+}
+
+\Msg{***************************************************************}
+\Msg{*}
+\Msg{* \space To finish the installation you have to copy the files }
+\Msg{*}
+\Msg{* \space *.sty, *.cfg and *.def into a directory searched by TeX}
+\Msg{*}
+\Msg{***************************************************************}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\endinput
diff --git a/Master/texmf-dist/tex/latex/xbmks/xbmks-luatex.def b/Master/texmf-dist/tex/latex/xbmks/xbmks-luatex.def
new file mode 100644
index 00000000000..5e6634404f9
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/xbmks/xbmks-luatex.def
@@ -0,0 +1,22 @@
+%%
+%% This is file `xbmks-luatex.def',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xbmks.dtx (with options: `copyright,luatex')
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% xbmks.sty package, %%
+%% Copyright (C) 2016--2018 %%
+%% dpstory@uakron.edu %%
+%% %%
+%% This program can redistributed and/or modified under %%
+%% the terms of the LaTeX Project Public License %%
+%% Distributed from CTAN archives in directory %%
+%% macros/latex/base/lppl.txt; either version 1.2 of the %%
+%% License, or (at your option) any later version. %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\endinput
+%%
+%% End of file `xbmks-luatex.def'.
diff --git a/Master/texmf-dist/tex/latex/xbmks/xbmks-pdfmark.def b/Master/texmf-dist/tex/latex/xbmks/xbmks-pdfmark.def
new file mode 100644
index 00000000000..953910afe17
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/xbmks/xbmks-pdfmark.def
@@ -0,0 +1,98 @@
+%%
+%% This is file `xbmks-pdfmark.def',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xbmks.dtx (with options: `copyright,pdfmark')
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% xbmks.sty package, %%
+%% Copyright (C) 2016--2018 %%
+%% dpstory@uakron.edu %%
+%% %%
+%% This program can redistributed and/or modified under %%
+%% the terms of the LaTeX Project Public License %%
+%% Distributed from CTAN archives in directory %%
+%% macros/latex/base/lppl.txt; either version 1.2 of the %%
+%% License, or (at your option) any later version. %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\ReadBookmarks{%
+ \pdf@ifdraftmode{}{%
+ \begingroup
+ \def\calc@bm@number##1{%
+ \@tempcnta=\check@bm@number{##1}\relax
+ \advance\@tempcnta by 1 %
+ \expandafter\edef\csname B_##1\endcsname{\the\@tempcnta}%
+ }%
+ \def\do##1{%
+ \ifnum\catcode`##1=\active
+ \@makeother##1%
+ \else
+ \ifnum\catcode`##1=6 %
+ \@makeother##1%
+ \fi
+ \fi
+ }%
+ \dospecials
+ \Hy@safe@activestrue
+ \escapechar=`\\%
+ \ifx\WriteBookmarks\relax
+ \global\let\WriteBookmarks\relax
+ \fi
+ \begingroup
+ \def\WriteBookmarks{0}%
+ \count\z@=0\relax
+ \edef\xbmk@J{\jobname}%
+ \@whilenum \count\z@<\xbmk@cnt\relax\do{%
+ \advance\count\z@ by 1 %
+ \edef\xbmk@thisdoc{xbmk@doc\the\count\z@}%
+ \edef\xbmk@filename{\@nameuse{\xbmk@thisdoc}}%
+ \@onelevel@sanitize\xbmk@filename
+ \bgroup
+ \def\@@BOOKMARK[##1][##2]##3##4##5{%
+ \calc@bm@number{##5}%
+ }%
+ \InputIfFileExists{\xbmk@filename.out}{}{}%
+ \def\@@BOOKMARK[##1][##2]##3##4##5{%
+ \def\Hy@temp{##4}%
+ \ifx\xbmk@J\xbmk@filename
+ \pdfmark{%
+ pdfmark=/OUT,%
+ Count={##2\check@bm@number{##3}},%
+ Raw={\xbmks@intdoc\xbmk@intF},%
+ Dest={##3},%
+ Title=\expandafter\strip@prefix\meaning\Hy@temp
+ }%
+ \else
+ \pdfmark{%
+ pdfmark=/OUT,%
+ Count={##2\check@bm@number{##3}},%
+ Raw={\xbmks@extdoc\xbmk@extF},%
+ Action=/GoToR,%
+ File={\xbmk@filename.pdf},%
+ Dest={##3},%
+ Title=\expandafter\strip@prefix\meaning\Hy@temp
+ }%
+ \fi
+ }%
+ \InputIfFileExists{\xbmk@filename.out}{}{}%
+ \egroup
+ }% \@whilenum
+ \endgroup
+ \endgroup
+ }%
+ \ifx\WriteBookmarks\relax\else
+ \if@filesw
+ \newwrite\@outlinefile
+ \Hy@OutlineRerunCheck
+ \immediate\openout\@outlinefile=\jobname.out\relax
+ \ifHy@typexml
+ \immediate\write\@outlinefile{<relaxxml>\relax}%
+ \fi
+ \fi
+ \fi
+}
+\endinput
+%%
+%% End of file `xbmks-pdfmark.def'.
diff --git a/Master/texmf-dist/tex/latex/xbmks/xbmks-pdftex.def b/Master/texmf-dist/tex/latex/xbmks/xbmks-pdftex.def
new file mode 100644
index 00000000000..42f2f79cf65
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/xbmks/xbmks-pdftex.def
@@ -0,0 +1,101 @@
+%%
+%% This is file `xbmks-pdftex.def',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xbmks.dtx (with options: `copyright,pdftex')
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% xbmks.sty package, %%
+%% Copyright (C) 2016--2018 %%
+%% dpstory@uakron.edu %%
+%% %%
+%% This program can redistributed and/or modified under %%
+%% the terms of the LaTeX Project Public License %%
+%% Distributed from CTAN archives in directory %%
+%% macros/latex/base/lppl.txt; either version 1.2 of the %%
+%% License, or (at your option) any later version. %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\ReadBookmarks{%
+ \pdf@ifdraftmode{}{%
+ \begingroup
+ \def\calc@bm@number##1{%
+ \@tempcnta=\check@bm@number{##1}\relax
+ \advance\@tempcnta by 1 %
+ \expandafter\edef\csname B_##1\endcsname{\the\@tempcnta}%
+ }%
+ \def\Hy@OutlineName##1##2##3##4{\def\@rgi{##1}%
+ \expandafter\pdfoutline\ifx\@rgi\@empty\else
+ attr {##1} \fi
+ user {##2} count##3{##4}%
+ % goto name{#2} count#3{#4}%
+ }%
+ \def\do##1{%
+ \ifnum\catcode`##1=\active
+ \@makeother##1%
+ \else
+ \ifnum\catcode`##1=6 %
+ \@makeother##1%
+ \fi
+ \fi
+ }%
+ \dospecials
+ \Hy@safe@activestrue
+ \escapechar=`\\%
+ \ifx\WriteBookmarks\relax
+ \global\let\WriteBookmarks\relax
+ \fi
+ \begingroup
+ \def\WriteBookmarks{0}%
+ \count\z@=0\relax
+ \edef\xbmk@J{\jobname}%
+ \@whilenum \count\z@<\xbmk@cnt\relax\do{%
+ \advance\count\z@ by 1 %
+ \edef\xbmk@thisdoc{xbmk@doc\the\count\z@}%
+ \edef\xbmk@filename{\@nameuse{\xbmk@thisdoc}}%
+ \@onelevel@sanitize\xbmk@filename
+ \bgroup
+ \gdef\@@BOOKMARK[##1][##2]##3##4##5{%
+ \calc@bm@number{##5}%
+ }%
+ \InputIfFileExists{\xbmk@filename.out}{}{}%
+ \gdef\@@BOOKMARK[##1][##2]##3##4##5{%
+ \def\Hy@temp{##4}%
+ \Hy@pstringdef\Hy@pstringName{\HyperDestNameFilter{##3}}%
+ \ifx\xbmk@J\xbmk@filename
+ \Hy@OutlineName{\xbmks@intdoc\xbmk@intF}{<</S/GoTo%
+ /D(\Hy@pstringName)>>}{%
+ ##2\check@bm@number{\Hy@pstringName}%
+ }{%
+ \expandafter\strip@prefix\meaning\Hy@temp
+ }%
+ \else
+ \Hy@OutlineName{\xbmks@extdoc\xbmk@extF}{<</S/GoToR%
+ /F(\xbmk@filename.pdf)/D(\Hy@pstringName)>>}{%
+ ##2\check@bm@number{##3}%
+ }{%
+ \expandafter\strip@prefix\meaning\Hy@temp
+ }%
+ \fi
+ }% bookmark
+ \InputIfFileExists{\xbmk@filename.out}{}{}%
+ \egroup
+ } % \@whilenum
+ \endgroup
+ }%
+ \ifx\WriteBookmarks\relax
+ \else
+ \if@filesw
+ \newwrite\@outlinefile
+ \Hy@OutlineRerunCheck
+ \immediate\openout\@outlinefile=\jobname.out\relax
+ \ifHy@typexml
+ \immediate\write\@outlinefile{<relaxxml>\relax}%
+ \fi
+ \fi
+ \fi
+}
+\endinput
+%%
+%% End of file `xbmks-pdftex.def'.
diff --git a/Master/texmf-dist/tex/latex/xbmks/xbmks-xetex.def b/Master/texmf-dist/tex/latex/xbmks/xbmks-xetex.def
new file mode 100644
index 00000000000..56211641a90
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/xbmks/xbmks-xetex.def
@@ -0,0 +1,107 @@
+%%
+%% This is file `xbmks-xetex.def',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xbmks.dtx (with options: `copyright,xetex')
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% xbmks.sty package, %%
+%% Copyright (C) 2016--2018 %%
+%% dpstory@uakron.edu %%
+%% %%
+%% This program can redistributed and/or modified under %%
+%% the terms of the LaTeX Project Public License %%
+%% Distributed from CTAN archives in directory %%
+%% macros/latex/base/lppl.txt; either version 1.2 of the %%
+%% License, or (at your option) any later version. %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\ReadBookmarks{%
+ \pdf@ifdraftmode{}{%
+ \begingroup
+ \def\calc@bm@number##1{%
+ \@tempcnta=\check@bm@number{##1}\relax
+ \advance\@tempcnta by 1 %
+ \expandafter\edef\csname B_##1\endcsname{\the\@tempcnta}%
+ }%
+ \def\do##1{%
+ \ifnum\catcode`##1=\active
+ \@makeother##1%
+ \else
+ \ifnum\catcode`##1=6 %
+ \@makeother##1%
+ \fi
+ \fi
+ }%
+ \dospecials
+ \Hy@safe@activestrue
+ \escapechar=`\\%
+ \ifx\WriteBookmarks\relax
+ \global\let\WriteBookmarks\relax
+ \fi
+ \begingroup
+ \def\WriteBookmarks{0}%
+ \count\z@=0\relax
+ \edef\xbmk@J{\jobname}%
+ \@whilenum \count\z@<\xbmk@cnt\relax\do{%
+ \advance\count\z@ by 1 %
+ \edef\xbmk@thisdoc{xbmk@doc\the\count\z@}%
+ \edef\xbmk@filename{\@nameuse{\xbmk@thisdoc}}%
+ \@onelevel@sanitize\xbmk@filename
+ \bgroup
+ \def\@@BOOKMARK[##1][##2]##3##4##5{%
+ \calc@bm@number{##5}%
+ }%
+ \InputIfFileExists{\xbmk@filename.out}{}{}%
+ \def\@@BOOKMARK[##1][##2]##3##4##5{%
+ \def\Hy@temp{##4}%
+ \Hy@pstringdef\Hy@pstringName{\HyperDestNameFilter{##3}}%
+ \@pdfm@mark{%
+ outline \ifHy@DvipdfmxOutlineOpen
+ [%
+ \ifnum##21>\z@
+ \else
+ -%
+ \fi
+ ] %
+ \fi
+ ##1<<%
+ /Title(\expandafter\strip@prefix\meaning\Hy@temp)%
+ \ifx\xbmk@J\xbmk@filename
+ /A<<%
+ /S/GoTo%
+ /D(\Hy@pstringName)%
+ >>%
+ \xbmks@intdoc\xbmk@intF
+ \else
+ /A<<%
+ /S/GoToR/F(\xbmk@filename.pdf)%
+ /D(\Hy@pstringName)%
+ >>%
+ \xbmks@extdoc\xbmk@extF
+ \fi
+ >>%
+ }% \@pdfm@mark
+ }% bookmark
+ \InputIfFileExists{\xbmk@filename.out}{}{}%
+ \egroup
+ }% \@whilenum
+ \endgroup
+ \endgroup
+ }%
+ \ifx\WriteBookmarks\relax
+ \else
+ \if@filesw
+ \newwrite\@outlinefile
+ \Hy@OutlineRerunCheck
+ \immediate\openout\@outlinefile=\jobname.out\relax
+ \ifHy@typexml
+ \immediate\write\@outlinefile{<relaxxml>\relax}%
+ \fi
+ \fi
+ \fi
+}
+\endinput
+%%
+%% End of file `xbmks-xetex.def'.
diff --git a/Master/texmf-dist/tex/latex/xbmks/xbmks.sty b/Master/texmf-dist/tex/latex/xbmks/xbmks.sty
new file mode 100644
index 00000000000..4185e81eaea
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/xbmks/xbmks.sty
@@ -0,0 +1,133 @@
+%%
+%% This is file `xbmks.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xbmks.dtx (with options: `copyright,package')
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% xbmks.sty package, %%
+%% Copyright (C) 2016--2018 %%
+%% dpstory@uakron.edu %%
+%% %%
+%% This program can redistributed and/or modified under %%
+%% the terms of the LaTeX Project Public License %%
+%% Distributed from CTAN archives in directory %%
+%% macros/latex/base/lppl.txt; either version 1.2 of the %%
+%% License, or (at your option) any later version. %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\NeedsTeXFormat{LaTeX2e}[1997/12/01]
+\ProvidesPackage{xbmks}
+ [2018/06/11 v1.0 xbmks: Cross-document bookmarks (dps)]
+\RequirePackage{xkeyval}
+\RequirePackage{ifpdf}[2006/02/20]
+\RequirePackage{ifxetex}[2006/08/21]
+\def\xbmk@driver{bmks-pdfmark.def}
+\DeclareOptionX{dvipsone}{\def\xbmk@driver{bmks-pdfmark.def}}
+\DeclareOptionX{dvips}{\def\xbmk@driver{xbmks-pdfmark.def}}
+\DeclareOptionX{pdftex}{\def\xbmk@driver{xbmks-pdftex.def}}
+\DeclareOptionX{luatex}{\def\xbmk@driver{xbmks-pdftex.def}}
+\DeclareOptionX{xetex}{\def\xbmk@driver{xbmks-xetex.def}}
+\ifpdf\ExecuteOptionsX{pdftex}\else
+ \ifxetex\ExecuteOptionsX{xetex}\else
+ \let\ExecuteOptions@SAVE\ExecuteOptions
+ \let\ExecuteOptions\ExecuteOptionsX
+ \InputIfFileExists{web.cfg}{}
+ {\@ifundefined{l@tex@@@@driver}{\ExecuteOptionsX{dvips}}
+ {\ExecuteOptionsX{dvipsone}}}%
+ \let\ExecuteOptions\ExecuteOptions@SAVE
+ \fi\fi
+\ProcessOptionsX
+\RequirePackage{hyperref}
+\define@key{xbmksetup}{docbundle}[]{\def\x@bmks@docs{#1}}
+\let\x@bmks@docs\@empty
+\define@key{xbmksetup}{colors}[]{\def\x@bmks@colors{#1}}
+\let\x@bmks@colors\@empty
+\define@key{xbmksetup}{style}[]{\def\x@bmks@style{#1}}
+\let\x@bmks@style\@empty
+\define@key{xbmk@colors}{intdoc}[]{%
+ \HyColor@BookmarkColor{#1}{\xbmks@intdoc}{xbmks}{intdoc}%
+ \ifx\xbmks@intdoc\@empty\else
+ \edef\xbmks@intdoc{/C [\xbmks@intdoc]}\fi
+}
+\let\xbmks@intdoc\@empty
+\define@key{xbmk@colors}{extdoc}[]{%
+ \HyColor@BookmarkColor{#1}{\xbmks@extdoc}{xbmks}{extdoc}%
+ \ifx\xbmks@extdoc\@empty\else
+ \edef\xbmks@extdoc{/C [\xbmks@extdoc]}\fi
+}
+\let\xbmks@extdoc\@empty
+\let\xbmks@Yes=y
+\let\xbmks@No=n
+\define@boolkey{xbmk@style}{intbf}[true]{} %\ifKV@xbmk@style@intbf
+\define@boolkey{xbmk@style}{extbf}[true]{}
+\define@boolkey{xbmk@style}{intit}[true]{}
+\define@boolkey{xbmk@style}{extit}[true]{}
+\newcommand{\xbmksetup}[1]{\write@xbmks@cfg{#1}}
+\def\write@xbmks@cfg#1{%
+ \newwrite\xbmks@setup \immediate\openout \xbmks@setup xbmks.cfg
+ \set@display@protect
+ \immediate\write\xbmks@setup{\protect\xbmksetupi{#1}}
+ \set@typeset@protect
+ \immediate\closeout\xbmks@setup
+}
+\newcommand{\xbmksetupi}[1]{%
+ \setkeys{xbmksetup}{#1}%
+ \ifx\x@bmks@docs\@empty
+ \PackageWarning{xbmks}{The docbundle key is empty,\MessageBreak
+ this key must have a value for cross-document bookmarks\MessageBreak
+ to be generated}\else
+ \edef\@exp@for{\noexpand\docbundle{\x@bmks@docs}}\expandafter
+ \@exp@for\fi
+ \edef\@exp@keys{\noexpand
+ \setkeys{xbmk@colors}{\x@bmks@colors}}\@exp@keys
+ \edef\@exp@keys{\noexpand
+ \setkeys{xbmk@style}{\x@bmks@style}}\@exp@keys
+ \def\xbmk@intF{}%
+ \ifKV@xbmk@style@intit
+ \ifKV@xbmk@style@intbf
+ \def\xbmk@intF{/F 3}%
+ \else
+ \def\xbmk@intF{/F 1}%
+ \fi
+ \else
+ \ifKV@xbmk@style@intbf
+ \def\xbmk@intF{/F 2}%
+ \fi
+ \fi
+ \def\xbmk@extF{}%
+ \ifKV@xbmk@style@extit
+ \ifKV@xbmk@style@extbf
+ \def\xbmk@extF{/F 3}%
+ \else
+ \def\xbmk@extF{/F 1}%
+ \fi
+ \else
+ \ifKV@xbmk@style@extbf
+ \def\xbmk@extF{/F 2}%
+ \fi
+ \fi
+}
+\def\xbmk@csarg#1#2{\expandafter#1\csname#2\endcsname}
+\xdef\xbmk@cnt{0}
+\newcommand{\docbundle}[1]{\bgroup
+ \def\thisDoc{\jobname}\count\z@=0 %
+ \edef\@tmpexp{\noexpand\@for\noexpand\@arg:=#1}%
+ \@tmpexp\do{%
+ \advance\count\z@ by 1\relax
+ \edef\@tmpexp{\noexpand\xbmk@recordDoc{\@arg}}\@tmpexp
+ }%
+ \xdef\xbmk@cnt{\the\count\z@}\egroup
+}
+\newcommand{\xbmk@recordDoc}[1]{%
+ \xbmk@csarg\xdef{xbmk@doc\the\count\z@}{#1}}
+\InputIfFileExists{xbmks.cfg}{}{}
+\@ifpackageloaded{bookmark}{\PackageWarningNoLine{xbmks}{The
+ bookmark package is not supported;\MessageBreak
+ this package does nothing, as a result}}
+{\InputIfFileExists{\xbmk@driver}{}{}}
+
+\endinput
+%%
+%% End of file `xbmks.sty'.
diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check
index ab0a51fe2cc..8d0efb791e0 100755
--- a/Master/tlpkg/bin/tlpkg-ctan-check
+++ b/Master/tlpkg/bin/tlpkg-ctan-check
@@ -693,7 +693,7 @@ my @TLP_working = qw(
widetable williams withargs witharrows
wnri wnri-latex wordcount wordlike
wrapfig wsemclassic wsuipa wtref
- xargs xassoccnt xcharter xcite xcjk2uni xcntperchap
+ xargs xassoccnt xbmks xcharter xcite xcjk2uni xcntperchap
xcolor xcolor-material xcolor-solarized
xcomment xcookybooky xdoc xduthesis
xebaposter xechangebar xecjk xecolor xecyr xeindex xellipsis
diff --git a/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc b/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc
index 7106b1249d8..a4ea0b0d137 100644
--- a/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc
+++ b/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc
@@ -1165,6 +1165,7 @@ depend wrapfig
depend wtref
depend xargs
depend xassoccnt
+depend xbmks
depend xcntperchap
depend xcolor-material
depend xcolor-solarized
diff --git a/Master/tlpkg/tlpsrc/xbmks.tlpsrc b/Master/tlpkg/tlpsrc/xbmks.tlpsrc
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlpsrc/xbmks.tlpsrc