summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/ltxguidex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/ltxguidex
Initial commit
Diffstat (limited to 'macros/latex/contrib/ltxguidex')
-rw-r--r--macros/latex/contrib/ltxguidex/LICENSE.txt416
-rw-r--r--macros/latex/contrib/ltxguidex/README.md17
-rw-r--r--macros/latex/contrib/ltxguidex/ltxguidex.cls219
-rw-r--r--macros/latex/contrib/ltxguidex/ltxguidex.pdfbin0 -> 64027 bytes
-rw-r--r--macros/latex/contrib/ltxguidex/ltxguidex.tex609
5 files changed, 1261 insertions, 0 deletions
diff --git a/macros/latex/contrib/ltxguidex/LICENSE.txt b/macros/latex/contrib/ltxguidex/LICENSE.txt
new file mode 100644
index 0000000000..2244313901
--- /dev/null
+++ b/macros/latex/contrib/ltxguidex/LICENSE.txt
@@ -0,0 +1,416 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose. The entire risk as to the quality and performance
+of the Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
+
diff --git a/macros/latex/contrib/ltxguidex/README.md b/macros/latex/contrib/ltxguidex/README.md
new file mode 100644
index 0000000000..0185bd14ef
--- /dev/null
+++ b/macros/latex/contrib/ltxguidex/README.md
@@ -0,0 +1,17 @@
+# The `ltxguidex` document class
+
+The ltxguidex document class extends ltxguide with a set of environments and
+commands that make writing beautiful LaTeX documentation easier and more
+natural. Currently, many packages define their own extensions to documentation
+support inline with their packages, leaving everyone to copy/paste their own
+contributions.
+
+This release of ltxguidex is an experimental public beta; it intends to
+demonstrate a hopeful new direction without committing to a stable public API.
+
+Although ltxguidex is now suitable for use in your own documentation, do not be
+surprised if future versions break your docs.
+
+## License
+
+LPPL v1.3c; see `LICENSE.txt`
diff --git a/macros/latex/contrib/ltxguidex/ltxguidex.cls b/macros/latex/contrib/ltxguidex/ltxguidex.cls
new file mode 100644
index 0000000000..2ce25fa8ba
--- /dev/null
+++ b/macros/latex/contrib/ltxguidex/ltxguidex.cls
@@ -0,0 +1,219 @@
+\NeedsTeXFormat{LaTeX2e}[1994/12/01]
+\ProvidesClass{ltxguidex}[2019/04/15 0.2.0 Extended LaTeX documentation class]
+% Description: An improved document class for writing LaTeX documentation
+% with extra tools for authors.
+% Homepage: https://github.com/9999years/ltxguidex
+% https://ctan.org/pkg/ltxguidex
+% Maintainer: Rebecca Turner <637275@gmail.com>
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Rebecca Turner <637275@gmail.com>.
+%
+% This work consists of the files ltxguidex.cls and ltxguidex.tex.
+
+\raggedright
+\parskip=.8ex
+\advance\oddsidemargin-.5cm
+\advance\textwidth1cm
+\addtolength{\textheight}{2cm}
+\addtolength{\topmargin}{-1.5cm}
+
+\LoadClass{ltxguide}
+
+%\RequirePackage{hypdoc}
+%\RequirePackage[
+ %loadHyperref=false,
+ %createIndexEntries=false
+%]{doctools}
+\RequirePackage[colorlinks=true]{hyperref}
+\RequirePackage{xparse}
+\RequirePackage{xkeyval}
+\RequirePackage{xcolor}
+\RequirePackage{framed}
+\RequirePackage{showexpl}
+\RequirePackage{enumitem}
+
+\definecolor{red} {HTML}{BF4C4C}
+\definecolor{green} {HTML}{4CBF67}
+\definecolor{orange} {HTML}{BF8D4C}
+\definecolor{cyan} {HTML}{4CA0BF}
+\definecolor{magenta}{HTML}{594CBF}
+\definecolor{light} {HTML}{F5F5ED}
+
+\definecolor{notes}{named}{red}
+\definecolor{shadecolor}{named}{light}
+
+\lstset{
+ basicstyle=\ttfamily,
+ numbers=none,
+ aboveskip=1em,
+ belowskip=0.5em,
+ breaklines,
+ breakatwhitespace=true,
+ tabsize=4,
+ keywordstyle={\bfseries\color{magenta}},
+ commentstyle={\color{green}},
+ stringstyle={\color{orange}},
+ backgroundcolor={\color{shadecolor}},
+}
+
+% For showexpl
+\renewcommand{\SX@explpreset}{
+ language=[LaTeX]TeX,
+}
+
+%\newcommand{\ltxguidex@suppressindent}{\par\@afterindentfalse\@afterheading}
+
+\newenvironment{desc}
+ {\if@nobreak
+ \vskip-\lastskip
+ \vspace*{-2.5ex}%
+ \fi
+ \decl}
+ {\enddecl}
+
+\newcommand{\noticestyle}{\sffamily\bfseries\color{notes}}
+\def\@begintheorem#1#2{%
+ \list{}{}%
+ \global\advance\@listdepth\m@ne
+ \item[{\noticestyle\MakeUppercase{#1}}]}
+\newcommand{\newnotice}[2]{\newtheorem{#1}{#2}}
+
+\newnotice{warning}{Warning}
+\newnotice{note}{Note}
+\newnotice{example}{Example}
+\newnotice{bug}{Bug}
+
+\let\bblxv\verbatim
+\let\bblexv\endverbatim
+\def\verbatim{\begin{shaded*}\bblxv\vskip-\baselineskip\vskip2.5\parsep}
+\def\endverbatim{\bblexv\vskip-2\baselineskip\end{shaded*}}
+
+\addtolength{\topmargin}{-3pc}
+\addtolength{\textwidth}{6pc}
+\addtolength{\oddsidemargin}{-2pc}
+\addtolength{\textheight}{7pc}
+
+\raggedright
+\parindent1.8em
+\parskip0pt
+
+\newcommand\New[1]{%
+ \colorbox[rgb]{.87, .9, .83}{New #1}\enspace\ignorespaces}
+
+\lstnewenvironment{latexcode}
+ {\lstset{language=[LaTeX]TeX}}{}
+
+% Arguments:
+% Environment defining command (e.g. \newenvironment or \renewenvironment)
+% Environment name
+% \makelabel command
+\newcommand{\@newdescriptionenvironment}[3]
+ {\expandafter#1{#2}%
+ {\begin{description}%
+ \let\makelabel#3}
+ {\end{description}}}
+
+% Arguments:
+% Environment name
+% \item label wrapping command
+\newcommand{\newdescriptionenvironment}[2]
+ {\@newdescriptionenvironment{\newenvironment}{#1}{#2}}
+\newcommand{\renewdescriptionenvironment}[2]
+ {\@newdescriptionenvironment{\renewenvironment}{#1}{#2}}
+
+\newdescriptionenvironment{packages}{\package}
+\newdescriptionenvironment{classes}{\ltxclass}
+\newdescriptionenvironment{options}{\option}
+
+% from lstdoc
+\def\advisespace{\hbox{}\qquad}
+\def\labeladvise{$\to$}
+\def\advisestyle{\footnotesize\sffamily}
+\newenvironment{advise}
+ {\begin{itemize}[
+ label=\labeladvise,
+ itemsep=0pt,
+ ]%
+ \advisestyle
+ \let\Q\item
+ \let\A\advisespace
+ }
+ {\end{itemize}}
+
+% alias `advise' to `faq'
+\let\faq\advise
+\let\endfaq\endadvise
+
+% from ltxdoc; ``iterates down the list and inserts vertical rules'' between
+% items
+\def\alternative#1{\lst@true \alternative@#1,\relax,}
+\def\alternative@#1,{%
+ \ifx\relax#1\@empty
+ \expandafter\@gobble
+ \else
+ \ifx\@empty#1\@empty\else
+ \lst@if \lst@false \else $\vert$\fi
+ \textup{\texttt{#1}}%
+ \fi
+ \fi
+ \alternative@}
+
+\define@cmdkeys{ltxkey}{v, note, default}
+\newenvironment{keys}
+ {\begin{description}[font={}, mode=unboxed]%
+ \def\makelabel##1{}%
+ \providecommand{\bool}{\m{\alternative{true,false}}}%
+ \NewDocumentCommand{\key}{o m o o}{{%
+ \IfValueT{##1}{%
+ \setkeys{ltxkey}{##1}%
+ }%
+ \item[\texttt{##2}]%
+ \leavevmode
+ \@ifundefined{cmdKV@ltxkey@note}{}{%
+ \llap{\footnotesize\textit{\cmdKV@ltxkey@note}\quad}%
+ }%
+ \texttt{\textbf{\color{magenta}##2}}%
+ \IfValueT{##3}{%
+ \texttt{=}##3%
+ }%
+ \IfValueT{##4}{%
+ \hfill\texttt{##4}%
+ }%
+ \@ifundefined{cmdKV@ltxkey@default}{}{%
+ \hfill\texttt{\cmdKV@ltxkey@default}%
+ }%
+ \par
+ }}%
+ }
+ {\end{description}}
+
+\providecommand{\package} [1]{\texttt{#1}}
+\providecommand{\ltxclass} [1]{\texttt{#1}}
+\providecommand{\option} [1]{\texttt{#1}}
+\providecommand{\extension}[1]{\texttt{.#1}}
+\providecommand{\filename} [1]{\texttt{#1}}
+\providecommand{\meta} [1]{\m{#1}}
+
+\newcommand{\docstrip}{\textsc{docstrip}}
+\let\ctanlogo\ctan
+\newcommand{\pipe}{\char"7C}
+\newcommand{\bs}{\char"5C}
+\newcommand{\command}[1]{\texttt{\bs#1}}
+\let\cs\command
+
+\newcommand{\email}[1]{\href{mailto:#1}{#1}}
+\newcommand{\http}[1]{\href{http://#1}{#1}}
+\newcommand{\https}[1]{\href{https://#1}{#1}}
+\renewcommand{\ctan}[1]{\href{https://ctan.org/pkg/#1}{\package{#1}}}
+\NewExpandableDocumentCommand{\Th}{O{l} m}
+ {\multicolumn{1}{#1}{\textbf{#2}}}
diff --git a/macros/latex/contrib/ltxguidex/ltxguidex.pdf b/macros/latex/contrib/ltxguidex/ltxguidex.pdf
new file mode 100644
index 0000000000..af739b268a
--- /dev/null
+++ b/macros/latex/contrib/ltxguidex/ltxguidex.pdf
Binary files differ
diff --git a/macros/latex/contrib/ltxguidex/ltxguidex.tex b/macros/latex/contrib/ltxguidex/ltxguidex.tex
new file mode 100644
index 0000000000..3d5df6cff5
--- /dev/null
+++ b/macros/latex/contrib/ltxguidex/ltxguidex.tex
@@ -0,0 +1,609 @@
+\documentclass{ltxguidex}
+\usepackage{changelog}
+\usepackage{fontspec}
+\setmainfont{Tiempos Text}
+\usepackage{FiraSans}
+\usepackage{FiraMono}
+\def\labeladvise{→}
+
+\newcommand{\ltx}{\ltxclass{ltxguidex}}
+\newcommand{\ltxguide}{\ltxclass{ltxguide}}
+\title{Towards Better \LaTeX\ Documentation With the \ltx\ Document Class}
+\author{Rebecca Turner\thanks{Brandeis University;
+ \email{rebeccaturner@brandeis.edu}}}
+\date{2019/04/15 0.2.0}
+\begin{document}
+\maketitle
+
+\begin{abstract}
+ The \ltx\ document class extends \ltxguide\ with a set of
+ environments and commands that make writing beautiful \LaTeX\
+ documentation easier and more natural.
+
+ \ltx\ is licensed under the \textsc{lppl} version 1.3c, or any later
+ version at your choosing.
+
+ This document is written with the \ltx\ document class.
+\end{abstract}
+
+\begin{note}
+ This release of \ltx\ is an experimental public beta; it intends to
+ demonstrate a hopeful new direction without committing to a stable
+ public \textsc{api}.
+
+ Although \ltx\ is now suitable for use in your own documentation, do
+ not be surprised if future versions break your docs.
+\end{note}
+
+\begin{note}
+ Browse the sources, contribute, or complain at \\
+ \https{github.com/9999years/ltxguidex}
+\end{note}
+
+\tableofcontents
+\vfill
+\pagebreak
+
+\section{The state of the docs}
+
+\LaTeX\ documentation is easy enough to write that --- in general --- nobody
+has bothered to package the improvements made to the \LaTeX documentation
+systems. If one examines the documentation for their favorite package,
+they'll likely find a few command definitions that make some aspect of
+documentation writing more ergonomic. In the case of complex packages like
+\ctan{listings} or --- in an extreme case --- \ctan{pgf}, it's commonplace
+to see packages define their own internal documentation packages containing
+hundreds-to-thousands of lines of documentation macros.
+
+This class repackages useful macros from various packages' documentation,
+often changing their form (e.g.\ the macro's interface) but keeping its
+style. I've tried to balance versatility against specialization (i.e.\
+determining which features are the \textit{most} useful) as well as
+balancing short with descriptive names.
+
+\LaTeX\ documentation is enabled with two document classes and several
+packages. Document classes include:
+\begin{classes}
+ \item[ltxdoc] Defines very little other than a few
+ shorthands for documenting commands. Designed to be integrated with
+ the \docstrip\ system, but I've seen plenty of \extension{dtx} files
+ documented with \ltxguide. However, I haven't yet used
+ \docstrip, so my experience here is limited.
+
+ \item[ltxguide] Provides several ergonomic features absent
+ in \ltxclass{ltxdoc}. However, \ltxguide\ is almost entirely
+ undocumented, a fact which is partially mitigated by the fact that
+ it's only about 150 lines long. \ltx\ is, as the name implies, based
+ on \ltxguide.
+\end{classes}
+And supporting packages include:
+\begin{packages}
+ \item[hypdoc] One of many, many packages by Heiko Oberdiek.
+ \ctan{hypdoc} undertakes the ambitious task of patching the
+ \ctan{doc} package in order to generate better indexes. In my
+ experience, \ctan{hypdoc} is not compatible with
+ \ltxguide; as such, it isn't loaded in \ltx.
+
+ \item[doctools] Provides many useful secondary commands such as
+ |\ltxclass|, |\package|, and so on. Many are duplicated here.
+
+ \item[showexpl] Provides the |LTXexample| environment which typesets
+ \LaTeX\ code and displays it in a listing side-by-side.
+ \ctan{showexpl} provides the functionality of \ctan{listings}'
+ |\lstsample| command and more. \ctan{showexpl} does, however, rely
+ on the fairly hefty \ctan{listings} package.
+
+ Compare to more ``plain'' \LaTeX\ documentation, \ltx\ documentation
+ can be expected to compile somewhat slower. This author is of the
+ opinion that the improvements are so numerous that the slow-down is
+ worth it.
+\end{packages}
+
+\section{The \ltx\ document class}
+Although \ltx\ provides many useful commands, much of its utility is in its
+aesthetics. Much \LaTeX\ documentation is very ugly because producing
+beautiful documentation requires significantly more code than most package
+authors are interested in writing. This document is written with \ltx\ and
+one package loaded (the \ctan{bera} font family). Because \ltx\ is written
+with inherent beauty, it ends up being a bit heavier than its competitors;
+notably, it loads \ctan{xcolor}, \ctan{listings}, \ctan{graphicx}, and
+\ctan{calc} by default.
+
+\section{A note on typefaces}
+
+This document is set in
+\href{https://klim.co.nz/retail-fonts/tiempos-text/}{Tiempos Text} and
+\href{https://bboxtype.com/typefaces/FiraSans/}{Fira Sans} (available on
+\textsc{ctan} as \ctan{fira}).
+
+For your own documents, I would recommend \ctan{bera} or \ctan{plex},
+although neither has small caps, which I consider essential.
+
+When deciding on a serif font for \LaTeX\ documentation, I would recommend
+picking one with a tall x-height, as larger overall glyphs makes documents
+easier to read on small screens (nobody's going to be printing out your
+documentation). This will rule out most old-style serif typefaces, such as
+Garamond and Calson.
+
+\section{Commands provided by \ltxguide}
+
+In \ltxguide, pipe characters (\texttt{\pipe}) mark verbatim text.
+
+However, between two pipes, the angle brackets |<<| and |>>| typeset as
+pretty angle brackets with regular italics between them; therefore,
+\texttt{\pipe}|<<package>>|\texttt{\pipe} typesets as |<package>|.
+
+To write literal angle brackets, simply double the characters;
+\texttt{\pipe}|<<<<|\texttt{\pipe} will render as |<<| and
+\texttt{\pipe}|>>>>|\texttt{\pipe} will render as |>>|.
+
+\begin{desc}
+|\pipe|\\
+|\bs|
+\end{desc}
+To write literal pipe characters, use the |\pipe| command. To write a
+literal backslash, use the |\bs| command.
+
+\begin{LTXexample}
+\pipe \\
+\texttt{\pipe} \\
+\textit{\pipe} \\
+\textbf{\texttt{\pipe}} \\
+\bs \\
+\texttt{\bs} \\
+\textit{\bs} \\
+\textbf{\texttt{\bs}}
+\end{LTXexample}
+
+\ltxguide\ uses \ctan{shortvrb} to activate pipes as a synonym for
+short-verbatim material. There are some small conflicts with \ltx's use of
+the \ctan{listings} package (in particular, pipes are silently gobbled from
+|lstlistings| environments, although they work normally within |verbatim|),
+which will hopefully be resolved with a coming change to \package{listings};
+this simply depends on how quickly Jobst Hoffmann emails me back.
+
+\ltxguide\ also provides the |decl| environment that powers the |desc|
+environment.
+
+\begin{desc}
+|\m{<placeholder>}|\\
+|\meta{<placeholder>}|
+\end{desc}
+
+Prints |<placeholder>| in italics within angle-brackets.
+
+\ltx\ provides |\meta| as a synonym for |\m|.
+
+\begin{LTXexample}
+\m{placeholder}
+\end{LTXexample}
+
+\begin{desc}
+|\arg{<argument>}|
+|\oarg{<argument>}|
+\end{desc}
+
+Shorthands for mandatory and optional arguments.
+
+\begin{LTXexample}
+\arg{foo}\oarg{bar}
+\end{LTXexample}
+
+\begin{desc}
+\begin{tabular}{@{}ll@{}}
+|\NFSS| & \NFSS\\
+|\AmS| & \AmS\\
+|\AmSLaTeX| & \AmSLaTeX\\
+|\babel| & \babel\\
+|\SLiTeX| & \SLiTeX\\
+|\ctanlogo| & \ctanlogo\\
+\end{tabular}
+\end{desc}
+
+Various logos.
+
+\begin{note}
+ \ltxguide\ actually defines the \ctanlogo\ logo as |\ctan|, but this
+ class uses |\ctan| to refer to a package, so the \ctanlogo\ logo is
+ typeset with |\ctanlogo|.
+\end{note}
+
+\begin{desc}
+\begin{tabular}{@{}ll@{}}
+|\clsguide| & \clsguide \\
+|\usrguide| & \usrguide \\
+|\fntguide| & \fntguide \\
+|\cfgguide| & \cfgguide \\
+|\cyrguide| & \cyrguide \\
+|\modguide| & \modguide \\
+|\sourcecode| & \sourcecode \\
+|\LaTeXbook| & \LaTeXbook \\
+|\LaTeXcomp| & \LaTeXcomp \\
+|\LaTeXGcomp| & \LaTeXGcomp \\
+|\LaTeXWcomp| & \LaTeXWcomp \\
+\end{tabular}
+\end{desc}
+
+The names of various documents, presumably intended only for the original
+\ltxguide\ document.
+
+\begin{desc}
+|\eg|\\
+|\ie|
+\end{desc}
+
+Shortcuts for ``e.g.,''\ and ``i.e.,''\ followed by a non-breaking space.
+
+\begin{LTXexample}
+\ie the document class\dots\\
+\eg the package\dots
+\end{LTXexample}
+
+\begin{desc}
+|\NEWfeature{<version>}|\\
+|\NEWdescription{<version>}|
+\end{desc}
+
+\NEWfeature{1.0.0}
+\NEWdescription{1.0.0}
+Typeset their arguments in a |\marginpar|. This paragraph is prepended by
+|\NEWfeature{1.0.0}|
+|\NEWdescription{1.0.0}|.
+
+\begin{desc}
+|\URL{<url>}|
+\end{desc}
+
+Typesets its argument in |\texttt|. Obsolete given that \ltx\ loads
+\ctan{hyperref}.
+
+\section{New commands}
+\ltx\ provides several new commands for convenience.
+
+\begin{desc}
+|\begin{desc}...\end{desc}|
+\end{desc}
+
+Describes a command or environment, setting it out into the margin and
+surrounding it with a frame. Originally written by Javier Bezos for the
+\ctan{enumitem} documenation.
+
+\begin{example}
+ Unfortunately, a side-by-side listing doesn't seem to be possible
+ here because pipes seem to be gobbled by the \package{listings}
+ package (a side-effect of loading both \ctan{listings} and
+ \ctan{shortvrb}, perhaps). However, here's how the |\email| command
+ is described in this document:
+
+\begin{verbatim}
+\begin{desc}
+|\email{<<email>>}|
+\end{desc}
+\end{verbatim}
+\end{example}
+
+\begin{desc}
+|\email{<email>}|
+\end{desc}
+
+Typesets an email address with a |mailto:| link.
+
+\begin{example}
+ Emails, along with other hyperlinks, are colored |magenta|, although
+ \ltx's default magenta is a bit closer to purple.
+\begin{LTXexample}
+\email{rebeccaturner@brandeis.edu}
+\end{LTXexample}
+\end{example}
+
+\begin{desc}
+|\https{<url>}|\qquad|\http{<url>}|
+\end{desc}
+
+Typesets |<url>| with |https://| or |http://| prepended to the link address;
+this makes links display a bit prettier than |\url| might.
+
+\begin{example} The following two listings are equivalent:
+\begin{LTXexample}
+\https{ctan.org}
+\end{LTXexample}
+\begin{LTXexample}
+\href{https://ctan.org}{ctan.org}
+\end{LTXexample}
+\end{example}
+
+\begin{desc}
+|\ctan{<package>}| \\
+|\ctanlogo|
+\end{desc}
+
+Typesets a package name with a link to |ctan.org/pkg/<package>|.
+
+\begin{warning}
+ \ltx's definition of |\ctan| differs from \ltxguide's,
+ which simply typesets ``\ctanlogo'' in small-caps. The \ctanlogo\
+ logo is typeset with |\ctanlogo|.
+\end{warning}
+
+\begin{LTXexample}
+the \ctan{listings} package\dots
+\end{LTXexample}
+
+\begin{desc}
+|\package{<package>}|\\
+|\ltxclass{<document class>}|\\
+|\option{<option name>}|\\
+|\filename{<filename>}|\\
+|\extension{<file extension>}|
+\end{desc}
+
+Typesets a \LaTeX\ package, option, file extension, etc.\ in |\texttt|.
+
+\begin{note}
+ Unlike those defined in the \ctan{doctools} package, these commands
+ don't add entries to the index.
+\end{note}
+
+\begin{LTXexample}
+\extension{tex} files
+\end{LTXexample}
+
+\begin{desc}
+|\begin{warning}...\end{warning}|\\
+|\begin{note}...\end{note}|\\
+|\begin{example}...\end{example}|\\
+|\begin{bug}...\end{bug}|
+\end{desc}
+
+These environments typeset ``notices'' with a hanging indent. Original
+definitions written by Javier Bezos for the \ctan{enumitem} documenation.
+|\noticestyle| is executed before the marker text (``warning,'' ``note,''
+etc.). New notice environments can be created with |\newnotice|.
+
+\begin{bug}
+ If the first content in a notice environment is vertical, the marker
+ text is hidden. This can be avoided by starting the
+ environment with |\leavevmode\\| or by adding some introductory
+ material to the first line.
+
+ This is actually a bug in the |\list| command that the notice
+ environments use.
+\end{bug}
+
+\begin{example}
+ Although this example is short, note that subsequent lines will
+ be indented. These environments only vary by text.
+
+\begin{LTXexample}
+\begin{warning}
+ Lorem ipsum\dots
+\end{warning}
+\end{LTXexample}
+\end{example}
+
+\begin{desc}
+|\newnotice{<environment name>}{<marker text>}|
+\end{desc}
+
+Creates a new notice environment in the style of |warning|, |note|, and so
+on. The marker text is automatically uppercased.
+
+\begin{desc}
+|\begin{LTXexample}[<options>]...\end{LTXexample}|
+\end{desc}
+
+Typesets \LaTeX\ code next to a listing of its source. Providing examples
+makes your user's lives easier, and should be done as much as possible. The
+|LTXexample| environment is provided by the \ctan{showexpl} package.
+Excerpted from \ctan{showexpl}'s documentation as of v0.3o 2016/12/11, valid
+options include:
+
+\begin{keys}
+ \key{attachfile}[\bool][false]
+
+ If set to true the sourcecode will be attached to the
+ \extension{pdf} file---presumed that the document is processed by
+ |pdflatex|.
+
+ \key{codefile}[\m{filename}][\bs jobname.tmp]
+ Name of the (temporary) file that contains the code which will be
+ formatted as source code. The default value is |\jobname.tmp|.
+
+ \key{explpreset}[\m{key val list}][\{language=[LaTeX]TeX,\}]
+
+ A |<key val list>| which serves for presetting the properties of the
+ formatting of the source code, for values see the documentation of
+ the \ctan{listings} package. The default value is
+ empty.\footnote{\ltx\ redefines the default to perform syntax
+ highlighting for \LaTeX, in addition to the general improvements
+ made for all listings in the document.}
+
+ \key{graphic}[\m{filename}]
+
+ If present, includes and displays this file instead of the formatted
+ code.
+
+ \key{hsep}[\m{length}]
+ Defines the horizontal distance between the source code and the
+ formatted text.
+
+ \key{justification}[\m{code}][\bs raggedright]
+ Defines the justification of the formatted text: reasonable values
+ are |\raggedleft|, |\raggedright|, |\centering|.
+
+ \key{overhang}[\m{dimen}][0pt]
+ Defines the amount by which the formatted text and the source code
+ can overlap the print space. The default value is 0\,pt.
+
+ \key{pos}[\m{\alternative{t,b,l,r,o,i}}][l]
+ Defines the relative position of the formatted text relating to the
+ source code. Allowed values are |t|, |b|, |l|, |r|, |o|, and |i| for
+ top, bottom, left, right, outer, and inner. The last values give
+ sense only for two-sided printing, where there are outer and inner
+ margins of a page.
+
+ \key{preset}[\m{code}]
+ Any \TeX\ code executed before the sample code but not visible in
+ the listings area.
+
+ \key{rangeaccept}[\bool][false]
+ If set to true, one can define ranges of lines that will be
+ excerpted from the source code.
+
+ \key{rframe}[[\texttt{single}]][\textrm{\textit{(empty)}}]
+ Defines the form of the frame around the formatted text. With a
+ non-empty value (e.\,g. ``single'') a simple frame will be drawn. In
+ the future more kinds of frames will be supported. The default value
+ is empty (no frame).
+
+ \key{varwidth}[\bool][false]
+ If set to true, the formatted text is set with its ``natural'' width
+ instead of a fixed width as given by the value of the option
+ |width|.
+
+ \key{vsep}[\m{dimen}]
+ Defines the vertical distance between the source code and the
+ formatted text.
+
+ \key{wide}[\bool][false]
+ If set to true, the source code and the formatted text overlap the
+ print space and the margin area.
+
+ \key{width}[\m{dimen}]
+ Defines the width of the formatted text. The default value depends
+ of the relative positions of the source code and the formatted text.
+
+ \key{scaled}[[\m{scale factor}]]
+ Without a value the formatted text will be scaled to fit the given
+ width of the result area. With a number as value the formatted text
+ will be scaled by this number.
+\end{keys}
+
+In addition to these options the kind of the result box (default: |\fbox|)
+can be changed. For example:
+\begin{latexcode}
+\renewcommand\ResultBox{\fcolorbox{green}{lightgray}}
+\setlength\ResultBoxSep{5mm}% default: \fboxsep
+\setlength\ResultBoxRule{2mm}% default: \fboxrule
+\end{latexcode}
+
+\begin{desc}
+|\begin{packages}...\end{packages}|\\
+|\begin{classes}...\end{classes}|\\
+|\begin{options}...\end{options}|\\
+\end{desc}
+
+Frequently, package authors need to describe a series of options, packages,
+or document classes. These environments wrap the |description| environment
+and provide an |\item| which wraps a command like |\package|. In the
+|packages| environment, |\item[listings]| translates to
+|\item[\package{listings}]|.
+
+\begin{LTXexample}
+\begin{options}
+ \item[foo] \dots
+ \item[bar] \dots
+\end{options}
+\end{LTXexample}
+
+\begin{desc}
+|\begin{advise}...\end{advise}| $\equiv$\\
+|\begin{faq}...\end{faq}|\\
+|\Q|\qquad|\A|\qquad|\advisespace|
+\end{desc}
+
+Roughly copied from \ctan{listings}' internal \package{lstdoc} package,
+these environments represent a list of questions and answers.
+
+\begin{LTXexample}
+\begin{faq}
+\Q Lorem ipsum dolor sit amet?
+\A Consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
+
+\Q Ut enim ad minim veniam, quis nostrud?
+\A Exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+\end{faq}
+\end{LTXexample}
+
+Within these environments, |\Q| and |\A| indicate a question and an answer;
+they're defined to |\item| and |\advisespace|, respectively.
+
+\begin{note}
+ |faq| is an exact synonym for |advise|.
+
+ The list label for the |advise| environment is |\labeladvise|.
+
+ The font is set with |\advisestyle|.
+\end{note}
+
+\begin{desc}
+|\alternative{<comma list>}|
+\end{desc}
+
+Prints a comma-separated list delimited by vertical bars. Space around
+commas is not trimmed, and alternates are printed in
+|\textup{\texttt{...}}|.
+
+This environment is from \package{lstdoc}.
+
+\begin{LTXexample}
+\alternative{true,false}
+\end{LTXexample}
+
+\begin{desc}
+|\begin{keys}...\end{keys}|\\
+|\key[<options>]{<key name>}[<key value>][<default value>]|\\
+|\bool|
+\end{desc}
+
+Describes keys. Within a |keys| environment, |\bool| indicates a true/false
+value. This environment is a recreation of \package{lstdoc}'s |syntax|
+environment with a more elegant interface.
+
+|<options>| can include:
+
+\begin{keys}
+ \key{v}[\m{version}]
+ The version a key was introduced.
+
+ \begin{warning}
+ This key is currently ignored.
+ \end{warning}
+
+ \key{default}[\m{default value}]
+ An alias for the final argument; a default value if the key isn't
+ given.
+
+ \key{note}[\m{note}]
+ A note set in the left margin; might note a group of features or
+ something else.
+\end{keys}
+
+\begin{example}
+ Note the use of |\bool|:
+\begin{LTXexample}
+\begin{keys}
+ \key[note=addon]{key}
+ [\m{value}][default]
+ Lorem ipsum\dots
+
+ \key{display}[\bool][true]
+ Lorem ipsum\dots
+
+ \key{foo}[\m{foo}]
+ \key[v=1.3]{bar}
+ Lorem ipsum\dots
+\end{keys}
+\end{LTXexample}
+\end{example}
+
+\begin{changelog}[author=Rebecca Turner]
+\begin{version}[v=0.1.1, date=2019-04-15]
+\added
+ \item Renamed \cs{ltxguidex@noticestyle} to \cs{noticestyle} and committed
+ it to the public \textsc{api}.
+ \item The \cs{cs} and \cs{command} commands.
+\end{version}
+\end{changelog}
+
+\end{document}