
\documentclass{article}


% \documentclass[twocolumn]{article}
\usepackage{lmodern}
\usepackage{erewhon}
% \usepackage[type1,scaled=.95]{cabin} % sans serif like Gill Sans, full styles
\usepackage{sourcesanspro}
\usepackage[varqu,varl]{inconsolata} % typewriter
% \renewcommand{\familydefault}{\sfdefault}

\usepackage[T1]{fontenc} 
\usepackage[utf8]{inputenc}

\usepackage[bottom=1in]{geometry}

\usepackage{graphicx}

\usepackage{needspace}

\usepackage[nottoc,numbib]{tocbibind}

\setcounter{secnumdepth}{0}

% colored section headers:
\usepackage[x11names]{xcolor}
\usepackage[compact,pagestyles]{titlesec}

\definecolor{sectioncolor}{rgb}{.38,.59,.77}
\definecolor{sectioncolor}{HTML}{033E8C}
\definecolor{burgundycolor}{HTML}{900020}
\definecolor{plumcolor}{HTML}{8E4585}


\titleformat{\section}
  {\normalfont\sffamily\large\bfseries\color{sectioncolor}}{\thesection}{1em}{}%[\hrule]
\titlespacing*{\section}{0pt}{*2}{*.5}

\titleformat{\subsection}
  {\normalfont\sffamily\normalsize\bfseries\color{sectioncolor}}{\thesubsection}{1em}{}
\titlespacing*{\subsection}{0pt}{*1}{*.5}

\titleformat{\subsubsection}
  {\normalfont\sffamily\normalsize\itshape\color{sectioncolor}}{\thesubsubsection}{1em}{}
\titlespacing*{\subsubsection}{0pt}{*1}{*.5}



\newpagestyle{pageheadfoot}{
	\headrule
	\sethead{Programming \LaTeX\Dash{}A survey of documentation and packages}{}{\thepage}
% 	\renewcommand{\makefootrule}{\rule[2.5ex]{\linewidth}{.4pt}}
	\setfoot{}{}{}
}

\pagestyle{pageheadfoot}


\newcommand*{\XeTeXrevE}
{\protect\hspace{-.1667em}\protect\raisebox{-.5ex}{\protect\reflectbox{E}}\protect\hspace{-.125em}}
\providecommand*{\XeTeX}{\mbox{X\XeTeXrevE\TeX}}
\providecommand*{\XeLaTeX}{\mbox{X\XeTeXrevE\LaTeX}}

\newcommand{\shortTitle}[1]{}
\newcommand{\thisnetaddress}{}
\newcommand{\netaddress}[1]{\renewcommand{\thisnetaddress}{#1}}
\newcommand{\thispersonalURL}{}
\newcommand{\personalURL}[1]{\renewcommand{\thispersonalURL}{#1}}

\DeclareRobustCommand{\cs}[1]{{\tt \char`\\#1}}
\DeclareRobustCommand{\tubbraced}[1]{\mbox{\texttt{\char`\{#1\char`\}}}}
\DeclareRobustCommand{\env}[1]{\cs{begin}\tubbraced{#1}}
\DeclareRobustCommand{\thinskip}{\hskip 0.16667em\relax}
\def\endash{–}
\def\emdash{—}
\def\d@sh#1#2{\unskip#1\thinskip#2\thinskip\ignorespaces}
% \def\dash{\d@sh\nobreak\endash}
% \def\Dash{\d@sh\nobreak\emdash}
\newcommand{\thinbrspace}{\hspace{.16667em}\penalty\exhyphenpenalty\hspace{0pt}}
\newrobustcmd{\Dash}{\unskip\thinspace\textemdash\thinbrspace}
\newrobustcmd{\dash}{\unskip\thinspace\mbox{--}\thinbrspace}
\def\ldash{\d@sh\empty{\hbox{\endash}\nobreak}}
\def\rdash{\d@sh\nobreak\endash}
\def\Ldash{\d@sh\empty{\hbox{\emdash}\nobreak}}
\def\Rdash{\d@sh\nobreak\emdash}
\def\hyph{-\penalty\z@\hskip\z@skip }
% \def\slash{/\penalty\z@\hskip\z@skip }
\renewcommand{\slash}{/\penalty\exhyphenpenalty\hspace{0pt}}
\newcommand{\spslash}{\unskip\kern.085em/\hspace{.085em}\penalty\exhyphenpenalty\hspace{0pt}}


\let\texttub\textsl              % redefined in other situations
% \DeclareRobustCommand{\AllTeX}{(\La\kern-.075em)\kern-.075em\TeX}
% \def\AMS{American Mathematical Society}
% \def\AmS{$\mathcal{A}$\kern-.1667em\lower.5ex\hbox
%     {$\mathcal{M}$}\kern-.125em$\mathcal{S}$}
% \def\AmSLaTeX{\AmS-\LaTeX}
% \def\AmSTeX{\AmS-\TeX}
% \def\ANSI{\acro{ANSI}}
% \def\API{\acro{API}}
% \def\ASCII{\acro{ASCII}}
% \def\aw{\acro{A\kern.04em\raise.115ex\hbox{-}W}}
% \def\AW{Addison\kern.1em-\penalty\z@\hskip\z@skip Wesley}
% \def\Bib{%
%   \ifdim \fontdimen1\font>0pt
%      B{\SMC\SMC IB}%
%   \else
%      \textsc{Bib}%
%   \fi
% }
% \def\BibTeX{\Bib\kern-.08em \TeX}
% \def\BSD{\acro{BSD}}
% \def\CandT{\textsl{Computers \& Typesetting}}
% \def\ConTeXt{C\kern-.0333emon\-\kern-.0667em\TeX\kern-.0333emt}
% \def\CMkIV{\ConTeXt\ \MkIV}
% \def\Cplusplus{C\plusplus}
% \def\plusplus{\raisebox{.7ex}{$_{++}$}}
% \def\CPU{\acro{CPU}}
% \def\CSS{\acro{CSS}}
% \def\CSV{\acro{CSV}}
\def\CTAN{\acro{CTAN}}
% \def\DTD{\acro{DTD}}
% \def\DTK{\acro{DTK}}
% \def\DVD{\acro{DVD}}
% \def\DVI{\acro{DVI}}
% \def\DVIPDFMx{\acro{DVIPDFM}$x$}
% \def\DVItoVDU{DVIto\kern-.12em VDU}
% \def\ECMA{\acro{ECMA}}
% \def\EPS{\acro{EPS}}
% \DeclareRobustCommand{\eTeX}{\ensuremath{\varepsilon}-\kern-.125em\TeX}
% \DeclareRobustCommand{\ExTeX}{%
%   \ensuremath{\textstyle\varepsilon_{\kern-0.15em\cal{X}}}\kern-.2em\TeX}
% \def\FAQ{\acro{FAQ}}
% \def\FTP{\acro{FTP}}
% \def\Ghostscript{Ghost\-script}
% \def\GNU{\acro{GNU}}
% \def\GUI{\acro{GUI}}
% \def\Hawaii{Hawai`i}
% \def\HTML{\acro{HTML}}
% \def\HTTP{\acro{HTTP}}
% \def\IDE{\acro{IDE}}
% \def\IEEE{\acro{IEEE}}
% \def\ISBN{\acro{ISBN}}
% \def\ISO{\acro{ISO}}
% \def\ISSN{\acro{ISSN}}
% \def\JPEG{\acro{JPEG}}
% \def\JTeX{\leavevmode\hbox{\lower.5ex\hbox{J}\kern-.18em\TeX}}
% \def\JoT{\textsl{The Joy of \TeX}}
% \def\LAMSTeX{L\raise.42ex\hbox{\kern-.3em
%                    $\m@th$\fontsize\sf@size\z@\selectfont
%                    $\m@th\mathcal{A}$}%
%     \kern-.2em\lower.376ex\hbox{$\m@th\mathcal{M}$}\kern-.125em
%     {$\m@th\mathcal{S}$}-\TeX}
% \DeclareRobustCommand{\La}%
%    {L\kern-.36em
%         {\setbox0\hbox{T}%
%          \vbox to\ht0{\hbox{$\m@th$%
%                             \csname S@\f@size\endcsname
%                             \fontsize\sf@size\z@
%                             \math@fontsfalse\selectfont
%                             A}%
%                       \vss}%
%         }}
% \def\LyX{L\kern-.1667em\lower.25em\hbox{Y}\kern-.125emX}
% \def\MacOSX{Mac\,\acro{OS\,X}}
% \def\MathML{Math\acro{ML}}
% \def\Mc{\setbox\TestBox=\hbox{M}M\vbox
%    to\ht\TestBox{\hbox{c}\vfil}} %  for Robert McGaffey
% \def\mf{\textsc{Metafont}}
% \def\MFB{\textsl{The \MF book}}
% \def\MkIV{Mk\acro{IV}}
% % \let\TB@@mp\mp
% \DeclareRobustCommand{\mp}{\ifmmode\TB@@mp\else MetaPost\fi}
% \DeclareRobustCommand{\NTG}{\acro{NTG}}
% \DeclareRobustCommand{\NTS}{\ensuremath{\mathcal{N}\mkern-4mu
%   \raisebox{-0.5ex}{$\mathcal{T}$}\mkern-2mu \mathcal{S}}}
% \DeclareTextSymbol{\textohm}{OT1}{'012}
% \DeclareTextSymbolDefault{\textohm}{OT1}
% \newcommand{\OMEGA}{\textohm}
% \DeclareRobustCommand{\OCP}{\OMEGA\acro{CP}}
% \DeclareRobustCommand{\OOXML}{\acro{OOXML}}
% \DeclareRobustCommand{\OTF}{\acro{OTF}}
% \DeclareRobustCommand{\OTP}{\OMEGA\acro{TP}}
% \def\mtex{T\kern-.1667em\lower.424ex\hbox{\^E}\kern-.125emX\@}
% \def\Pas{Pascal}
% \def\pcMF{\leavevmode\raise.5ex\hbox{p\kern-.3\p@ c}MF\@}
% \def\PCTeX{PC\thinspace\TeX}
% \def\pcTeX{\leavevmode\raise.5ex\hbox{p\kern-.3\p@ c}\TeX}
% \def\PDF{\acro{PDF}}
% \def\PGF{\acro{PGF}}
% \def\PHP{\acro{PHP}}
% \def\PiC{P\kern-.12em\lower.5ex\hbox{I}\kern-.075emC\@}
% \def\PiCTeX{\PiC\kern-.11em\TeX}
% \def\plain{\texttt{plain}}
% \def\PNG{\acro{PNG}}
% \def\POBox{P.\thinspace O.~Box }
% \def\PS{{Post\-Script}}
% \def\PSTricks{\acro{PST}ricks}
% \def\RTF{\acro{RTF}}
% \def\SC{Steering Committee}
% \def\SGML{\acro{SGML}}
% \def\SliTeX{\textrm{S\kern-.06em\textsc{l\kern-.035emi}%
%                      \kern-.06em\TeX}}
% \def\slMF{\textsl{\MF}} % should never be used
% \def\SQL{\acro{SQL}}
% \def\stTeX{\textsc{st}\kern-0.13em\TeX}
% \def\STIX{\acro{STIX}}
% \def\SVG{\acro{SVG}}
% \def\TANGLE{\texttt{TANGLE}\@}
% \def\TB{\textsl{The \TeX book}}
% \def\TIFF{\acro{TIFF}}
% \def\TP{\textsl{\TeX}: \textsl{The Program}}
% \DeclareRobustCommand{\TeX}{T\kern-.1667em\lower.424ex\hbox{E}\kern-.125emX\@}
% \def\TeXhax{\TeX hax}
% \def\TeXMaG{\TeX M\kern-.1667em\lower.5ex\hbox{A}%
%    \kern-.2267emG\@}
% \def\TeXtures{\textit{Textures}}
% \let\Textures=\TeXtures
% \def\TeXworks{\TeX\kern-.07em works}
% \def\TeXXeT{\TeX-{}-\XeT}
% \def\TFM{\acro{TFM}}
% \expandafter\ifx\csname XeTeXrevision\endcsname\relax
% \def\Thanh{H\`an~Th\^e\llap{\raise 0.5ex\hbox{\'{}}}~Th\`anh}% non-XeTeX
% \else
% \def\Thanh{H\`an~Th\textcircumacute{e}~Th\`anh}% xunicode drops the acute else
% \fi
% \def\TikZ{Ti{\em k}Z}
% \def\ttn{\textsl{TTN}\@}
% \def\TTN{\textsl{\TeX{} and TUG News}}
% \let\texttub\textsl              % redefined in other situations
\def\TUB{\texttub{TUGboat}}
% \def\TUG{\TeX\ \UG}
% \def\tug{\acro{TUG}}
% \def\UG{Users Group}
% \def\UNIX{\acro{UNIX}}
% \def\VAX{V\kern-.12em A\kern-.1em X\@}
% \def\VnTeX{V\kern-.03em n\kern-.02em \TeX}
% \def\VorTeX{V\kern-2.7\p@\lower.5ex\hbox{O\kern-1.4\p@ R}\kern-2.6\p@\TeX}
% \def\XeT{X\kern-.125em\lower.424ex\hbox{E}\kern-.1667emT\@}
% \def\XML{\acro{XML}}
% \def\WEB{\texttt{WEB}\@}
% \def\WEAVE{\texttt{WEAVE}\@}
% \def\WYSIWYG{\acro{WYSIWYG}}
% \def\tubreflect#1{%
%   \@ifundefined{reflectbox}{%
%     \TBerror{A graphics package must be loaded for \string\XeTeX}%
%   }{%
%     \ifdim \fontdimen1\font>0pt
%       \raise 1.75ex \hbox{\kern.1em\rotatebox{180}{#1}}\kern-.1em
%     \else
%       \reflectbox{#1}%
%     \fi
%   }%
% }
% \def\tubhideheight#1{\setbox0=\hbox{#1}\ht0=0pt \dp0=0pt \box0 }
% \def\XekernbeforeE{-.125em}
% \def\XekernafterE{-.1667em}
% \DeclareRobustCommand{\Xe}{\leavevmode
%   \tubhideheight{\hbox{X%
%     \setbox0=\hbox{\TeX}\setbox1=\hbox{E}%
%     \lower\dp0\hbox{\raise\dp1\hbox{\kern\XekernbeforeE\tubreflect{E}}}%
%     \kern\XekernafterE}}}
% \def\XeTeX{\Xe\TeX}
% \def\XeLaTeX{\Xe{\kern.11em \LaTeX}}
% \def\XHTML{\acro{XHTML}}
% \def\XSL{\acro{XSL}}
% \def\XSLFO{\acro{XSL}\raise.08ex\hbox{-}\acro{FO}}
% \def\XSLT{\acro{XSLT}}

\newcommand{\pub}[1]{\textit{#1}}

\newcommand{\acro}[1]{\textsc{\MakeLowercase{#1}}}


\newcommand{\EDITORnoaddress}{}


\usepackage{microtype}
\usepackage{graphicx}
\usepackage{ifpdf}
\ifpdf
\usepackage[breaklinks,hidelinks]{hyperref}
\else
\usepackage{url}
\fi

\hypersetup{%
pdfinfo={%
Title={Programming LaTeX - A survey of documentation and packages},%
Author={Brian Dunn},%
Subject={LaTeX programming documentation},%
Keywords={LaTeX, programming, documentation, BD Tech Concepts LLC}%
}}


\usepackage{enumitem}
\setlist[description]{style=nextline,font=\small}

\usepackage{multicol}


\usepackage{titling}
\setlength{\droptitle}{-1in}
\predate{\begin{center}\small}


\newrobustcmd*{\pkg}[1]{\textsf{#1}}
\newrobustcmd*{\prog}[1]{\texttt{#1}}
\newrobustcmd*{\LuaLaTeX}{Lua\-\LaTeX}
\newrobustcmd*{\LuaTeX}{Lua\-\TeX}
\newrobustcmd*{\tag}[1]{\texttt{<#1>}}
\newrobustcmd*{\prop}[1]{\textsl{\texttt{#1}}}
\newrobustcmd*{\epub}{\acro{EPUB}}
\newrobustcmd*{\texdoc}[1]{\hspace*{\fill}\mbox{(\texttt{texdoc #1})}}
\newrobustcmd*{\userentry}[1]{%
\leavevmode\par\hspace*{2em}\texttt{#1}\smallskip\\}

\pdfstringdefDisableCommands{
\renewcommand*{\quad}{ }
\renewcommand*{\pkg}[1]{#1}
\renewcommand*{\prog}[1]{#1}
\renewcommand*{\LuaLaTeX}{LuaLaTeX}
\renewcommand*{\XeLaTeX}{XeLaTeX}
\renewcommand*{\TeX}{TeX}
\renewcommand*{\LaTeX}{LaTeX}
\renewcommand*{\Dash}{ --- }
\renewcommand*{\dash}{ -- }
}

\title{Programming \LaTeX\Dash \\ A survey of documentation and packages}

\author{Brian Dunn \\
	\small \href{mailto:bd@BDTechConcepts.com}{bd@BDTechConcepts.com} \\
	\small Copyright 2017--2018 Brian Dunn\thanks{
		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
		\url{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.
	}
}



\begin{document}

\maketitle

\thispagestyle{empty}

\begin{abstract}
\noindent
A survey of programming-related documentation for \LaTeX.
Included are references to printed and electronic books and manuals,
symbol lists, \acro{FAQ}s, the \LaTeX\ source code, CTAN and distributions,
programming-related packages, users groups and online communities,
and information on creating packages and documentation.
\end{abstract}

\tableofcontents

\section{Introduction}

Reinventing the wheel may be useful if you think that you can do it better.
Worse, though, is not even being aware that the wheel has already been
invented in the first place, which can be an embarrassing waste of time.
Such can be the case both for a new \LaTeX\ programmer who isn't aware of
the many ways things may be done, but also for someone, this author included,
who learned \LaTeX\ many years ago but may have missed some of the recent
advancements in package code and documentation.

A wealth of information is available, not
only in print and online, but also directly embedded in the typical \LaTeX\
distribution.
The following is meant to be a broad overview of some of today's resources
for \LaTeX\ programmers.

(The latest version of this document is available in the \pkg{docsurvey} package.)

\section{Printed books}

Even in an electronic/online era, printed books still have the advantage
of being able to be opened for reference without taking up space
on the screen.  Printed books also provide extended discussion of
useful topics, have extensive human-edited indexes which are more useful
than a simple document-wide search function, and some are also available in
electronic format.
\begin{description}
\item[\LaTeX:\ A Document Preparation System:]
	The classic introduction to \LaTeX, in continuous reprint for
	decades.~\cite{lamport:latex}
\item[Guide to \LaTeX:]
	An introduction and more advanced material, including an extensive
	reference guide.
	Fourth edition: 2004.~\cite{hokpkadaly:guide}
\item[More Math into \LaTeX:]
	Updated to a fifth edition in 2016.~\cite{gratzer:moremath}
\item[\LaTeX\ Beginner's Guide:]
	An overview with numerous examples.~\cite{kottwitz:beginner}
\item[\LaTeX\ Cookbook:]
	More examples.~\cite{kottwitz:cookbook}
\item[The \LaTeX\ Companion:]
	Provides extended discussion and examples of the inner workings
	of \LaTeX\ and numerous useful packages.
	Second edition: 2004.~\cite{mittelbachgossens:companion}
\item[Additional books:] Listed at the \acro{UK TUG FAQ}.
\hfill \url{http://www.tex.ac.uk/FAQ-latex-books.html}
\end{description}


\section{Electronic books and documentation}

Most of these are provided with the \TeX\ distribution, and may be updated
with each release.
Access the embedded documentation from a command line using the \texttt{texdoc}
program.

\subsection{\TeX}

\begin{description}
\item[\TeX\ by Topic, A \TeX{}nician's Reference:]
    A reference for \TeX.
    This may be useful for understanding the source code of \LaTeX\ packages,
    many of which are quite old and written in
    low-level \TeX.~\cite{eijkhout:topic}
    \texdoc{texbytopic}
\end{description}

\subsection{\LaTeX}

\begin{description}
\item[Getting something out of \LaTeX:]
    Create your first document in \LaTeX.~\cite{hefferon:first}
    \hfill \url{https://ctan.org/pkg/first-latex-doc}

\item[The very short guide to typesetting with \LaTeX:]
    A four-page introduction.~\cite{flynn:veryshort}
    \hfill \url{https://ctan.org/pkg/latex-veryshortguide}

\item[Formatting Information:]
    A beginner’s introduction to typesetting with \LaTeX.~\cite{flynn:formatting}
    \hfill \url{https://ctan.org/pkg/beginlatex}

\item[\LaTeX for Complete Novices:]
    An extensive introduction for a non-technical person.~\cite{talbot:novices}
    \texdoc{dickimaw-novices}

\item[Using \LaTeX\ to Write a PhD Thesis:]
    A followup to \pub{\LaTeX\ for Complete Novices}, including extensive
    discussion about bibliographies, indexes, and glossaries.~\cite{talbot:phd}
    \texdoc{dickimaw-thesis}

\item[Writing Scientific Documents Using \LaTeX:]
    An introduction to typesetting scientific documents.~\cite{Bennieston:scientific} \\
    \hspace*{\fill} \url{https://ctan.org/pkg/intro-scientific}

\item[The Not So Short Introduction to \LaTeXe:]
	Covers introductory material, customizations,
	and a simple package.~\cite{oetiker:introduction}
	\texdoc{lshort}

\item[\LaTeXe: An unofficial reference manual:]
	A thorough but concise reference manual for \LaTeXe,
	available in several languages.~\cite{greenwade:reference} \\
	\texdoc{-l latex2e-help}

\item[LaTeX WikiBook:] An online book, includes information about
	creating \LaTeX\ packages and classes. \\
	\hspace*{\fill} \url{https://en.wikibooks.org/wiki/LaTeX}

\item[Initiation à LATEX:] A French guide on \LaTeX — for beginners
    or advanced users.~\cite{bouzigues:guide} \\
    \hspace*{\fill} \url{https://ctan.org/pkg/guide-latex-fr}

\end{description}

\subsection{Lua\LaTeX}

\begin{description}
\item [A guide to lua\LaTeX:] An introduction. \texdoc{lualatex-doc}
\item [Lua\TeX\ Reference:] The full manual. \texdoc{luatex.pdf}
\end{description}

\subsection{\XeLaTeX}

\begin{description}
\item [The \XeTeX\ reference guide:] A summary of additional features.
    \texdoc{xetex-reference}
\item [Font-change-xetex:] Macros for using fonts.
    \texdoc{font-change-xetex}
\end{description}

\subsection{\LaTeX3 and \pkg{expl3}}

\begin{description}
\item [The \LaTeX3 Interfaces:] Reference documentation for the \pkg{expl3}
    programming environment.    \texdoc{interface3}
\end{description}

\subsection{Symbol references}

These are lists of the \LaTeX\ commands which produce symbols.

\begin{description}
\item[Comprehensive \LaTeX\ Symbol List:]
More than 14,000 symbols and \LaTeX\ commands.~\cite{pakin:list} \\
\texdoc{symbols-letter} \\ \texdoc{symbols-a4}

\item[Every symbol (most symbols) defined by unicode-math:]
Unicode math symbols.~\cite{robertson:mathsymbols}
\texdoc{unimath-symbols}
\end{description}


\subsection{Source code}

The source code for \LaTeXe\ itself is also included in the distribution.

\begin{description}
\item[The \LaTeXe\ sources:] Occasionally useful for figuring out how
    something really works.~\cite{latexteam:sources} \\
        \hspace*{\fill} \texdoc{source2e}
\item[List of internal \LaTeXe\ macros
      \\\hspace*{-\leftmargin}useful to package authors:]
    A list of the core \LaTeX\ macros, each of which is linked to the
    source code.~\cite{scharrer:listinternal}
    \texdoc{macros2e}
\end{description}



\subsection{FAQs}

%Frequently-Asked Questions

\begin{description}
\item[UK TUG FAQ:] A wide-ranging list of
fre\-quently-asked questions.~\cite{UK:FAQ}
\texdoc{letterfaq}
\texdoc{newfaq}

\item[Visual \LaTeX\ FAQ:] Click on a visual element to learn how
it is programmed.~\cite{pakin:visual} \\
\texdoc{visualFAQ}
\end{description}


\section{Accessing embedded information}

\subsection{\pkg{texdoc}}

A large amount of documentation is included in a \TeX\ distribution.
Most can be accessed with the \prog{texdoc} program.
Enter ``\prog{texdoc -l <name>}'' to search for
matching package, file, or program names.  In some cases the same document
is available in both letter or A4 paper sizes, or in several languages.
\prog{texdoc} is also available online~\cite{texdocnet} at \url{texdoc.net},
with popular packages sorted by category.

\subsection{\prog{kpsewhich}}

The program \prog{kpsewhich} may be used to find out where a file is
located.  \prog{kpsewhich filename} searches for and returns the
path to the given filename.

\prog{kpsewhich} can also return directories, such as:
\begin{verbatim}
        kpsewhich -var-value TEXMFROOT
        kpsewhich -var-value TEXMFDIST
        kpsewhich -var-value TEXMFLOCAL
\end{verbatim}
\medskip

Some package authors choose not to include the source code in the
package documentation.  To view the source code:

\begin{enumerate}
\item To locate and read a package's \verb+.sty+ file:
\userentry{kpsewhich package.sty}
Usually these files have their comments removed,
so it is better to use the \verb+.dtx+ file instead.
\item The \verb+.dtx+ file is usually available,
and will have the package's source code.
\userentry{kpsewhich package.dtx}
If it is not installed on your local system, it will
be necessary to download the \verb+.dtx+ file from
CTAN (see the next section).

The comments are not yet typeset and so
will not be as easily read.
\item To typeset the documentation with the source code,
copy the \verb+.dtx+ file and any associated image files
somewhere local and then look for
\cs{OnlyDescription}
in the source.
This command tells the \pkg{ltxdoc} package not to print the source code.
\item Remove \cs{OnlyDescription}, then process the \verb+.dtx+ file with
\userentry{pdflatex package.dtx}
Barring unusual circumstances, this will create a new documentation
\verb+.pdf+ file with the package source code included.
\end{enumerate}



\section{%
    Obtaining packages \Dash Comprehensive \TeX\ Archive Network \protect\quad (CTAN)%
}

The Comprehensive \TeX\ Archive Network
(\CTAN) provides a master collection of
packages.  A search function is available, which is useful when you know the
name of a package or its author, and a list of topics is also provided.
There are so many topics, however, that finding the right topic can be a
problem in itself.  One useful method to find what you are looking for is
to search for a related package you may already know about, then look at
its description on \CTAN\ to see what topics are shown for it.  Selecting these
topics then shows you related packages.~\cite{ctan}


\needspace{7\baselineskip}
\section{Packages useful for programming \LaTeX}

A number of packages are especially useful for \LaTeX\ programmers:
\texdoc{<packagename>}

\begin{multicols}{2}

\begin{description}[style=unboxed]
\raggedright
\item[\pkg{xifthen}:] Conditionals.
\item[\pkg{etoolbox}:] A wide range of programming tools, often avoiding
	the need to resort to low-level \TeX.
\item[\pkg{etextools}:] Adds to \pkg{etoolbox}.
	Strings, lists, and more.
\item[\pkg{xparse}:] Define macros and environments with
	flexible argument types.
\item[\pkg{environ}:] Process environment contents.
\item[\pkg{arrayjobx}, \pkg{fifo-stack}, \pkg{forarray},
	\pkg{forloop}, \pkg{xfor}:]
	Programming arrays, stacks, and loops.
\item[\pkg{iftex}:] Detect \TeX\ engine.
\item[\pkg{ifplatform}:] Detect operating system.
\item[\pkg{xstring}:] String manipulation.
\item[\pkg{keyval}, \pkg{xkeyval}, \pkg{kvsetkeys}:] Key\slash{}value arguments.
\item[\pkg{pgfkeys}, \pkg{pgfkeyx}:] Another form of key\slash{}value arguments.
\item[\pkg{kvoptions}:] Key\slash{}value package options.
\item[\pkg{expl3}:] \LaTeX3 programming.
\item[\pkg{l3keys}, \pkg{l3keys2e}:] Key\slash{}value for \LaTeX3.
\item[\pkg{chktex}:] Locates typographic errors.
\item[\CTAN\ topic \pkg{macro-supp}:] An entire topic of
	useful programming macros.
\end{description}
\end{multicols}


\section{Creating and documenting new packages}

\subsection{How-to}

Documentation for those interested in creating their own package or class:
\begin{description}
\item[How to package your \LaTeX\ package:] A tutorial.~\cite{pakin:dtxtut}
	\texdoc{dtxtut}
\item[\LaTeXe\ for class and package writers:] Programming a package
	or class.~\cite{latexteam:class}
	\texdoc{clsguide}
\item[The doc and shortvrb packages:] Packages for documenting
	packages.~\cite{mittelbach:doc}
	\texdoc{doc}
\item[The DocStrip program:] The program which processes \verb+.dtx+
	and \verb+.ins+ files to generate documentation and \verb+.sty+
	files.~\cite{mittelbach:docstrip}
	\texdoc{docstrip}
\end{description}

\subsection{Published articles about creating \LaTeX\ packages}

Related articles from \TUB:

\begin{description}
\item[Rolling your own Document Class:
Using \LaTeX\ to keep away from the Dark Side:] An overview of the
	\pkg{article} class.~\cite{flynn:article}
\item[Good things come in little packages: An
	introduction to writing \texttt{.ins} and \texttt{.dtx} files:] How and why
    to create your own \verb+.dtx+ and \verb+.ins+ files.~\cite{pakin:goodthings}
\item[How to develop your own document class\Dash our experience:]
	A comparison of developing class vs.\ package
	files.~\cite{mansfield:class}

\end{description}

\section{Users groups}

\begin{description}[style=unboxed]
\item[\TeX\ Users Group:] \url{http://tug.org}
\item[List of international users groups:] \url{http://tug.org/usergroups.html}
\end{description}

\section{Online communities}

\begin{description}[style=unboxed]
\item[English forums:] \
\begin{description}[style=unboxed]
\raggedright
\item[TeX\Dash \LaTeX\ Stack Exchange:] 
    \url{http://tex.stackexchange.com} \\
    Almost any question has already
	been asked, and a quick web search will find answers, ranked by vote.
\item[\LaTeX\ Community:]   \url{http://www.latex-community.org} \\
    A traditional forum with quick replies
	to your questions
\end{description}

\item[German forums:] \
\begin{description}[style=unboxed]
\item[TeXwelt:] \url{http://texwelt.de/wissen/}
\item[goLaTeX:] \url{http://golatex.de}
\end{description}

\item[French forums:] \
\begin{description}[style=unboxed]
\item[TeXnique.fr:] \url{http://texnique.fr}
\end{description}

\item[Mailing lists:] \url{http://tug.org/mailman/listinfo} \\
    Several dozen, spanning a wide range of \TeX-related topics.
\item[Newsgroup:] \url{comp.text.tex}
\end{description}


\section{Distributions \Dash \LaTeX\ for various operating systems}
\begin{description}[style=unboxed]
\item[TeXLive:] \url{http://tug.org/texlive} \hfill Unix and Windows
\item[MiKTex:] \url{https://miktex.org}  \hfill Windows and Mac
\item[proTeXt:] \url{http://tug.org/protext/}  \hfill Windows
\item[MacTex:] \url{http://tug.org/mactex/} \hfill Mac
\end{description}


\section{Change log}

\begin{description}
\item[2017/03/06:] Initial version.
\item[2017/10/04:] Added users groups, mailing lists,
    distributions, \LuaTeX, \XeTeX, \pkg{chktex}.
    Organization and formatting improvements.
\item[2017/10/14:] More information about accessing embedded documentation.
\item[2018/01/18:] Added \url{texdoc.net}.
\item[2018/01/21:] Added \pkg{la­tex-veryshort­guide}, \pkg{first-latex-doc},
                    \pkg{beginlatex},
                    \pkg{intro-scientific}, \pkg{guide-latex-fr}.
\item[2018/03/24:] Added \pkg{interface3}, \pkg{dickimaw-novices}, \pkg{dickimaw-thesis}.
\item[2018/04/01:] Added TeXnique.fr.
\end{description}


\begin{thebibliography}{99}

\bibitem{lamport:latex}
\pub{\LaTeX: A Document Preparation System},
Leslie Lamport,
second edition, Addison Wesley, 1994, ISBN 0201529831.

\bibitem{hokpkadaly:guide}
\pub{Guide to \LaTeX},
Helmut Kopka and Patrick W. Daly,
fourth edition, Addison-Wesley, 2004, ISBN 0321173856.

\bibitem{gratzer:moremath}
\pub{More Math Into \LaTeX},
George Gr\"{a}tzer,
5th ed., Springer, 2016,
ISBN 3319237950.
%ISBN-13: 978-3319237954.

\bibitem{kottwitz:beginner}
\pub{\LaTeX\ Beginner's Guide},
Stefan Kottwitz,
Packt Publishing, 2011, ISBN 1847199860.
%ISBN-13 1847199860.

\bibitem{kottwitz:cookbook}
\pub{\LaTeX\ Cookbook}, Stefan Kottwitz, Packt Publishing, 2015,
ISBN-13 9781784395148, \\
\url{http://latex-cookbook.net}

\bibitem{mittelbachgossens:companion}
\pub{The \LaTeX\ Companion},
Frank Mittelbach, Michel Goossens, Johannes Braams,
David Carlisle and Chris Rowley,
second edition, Addison-Wesley, 2004,
ISBN 0201362996.
%ISBN-13 0-201-36299-6.

\bibitem{eijkhout:topic}
\pub{\TeX\ by Topic}, A \TeX{}nician's Reference,
Victor Eijkhout,
Addison-Wesley UK, 1991, ISBN 0201568829,
\url{http://eijkhout.net/texbytopic/texbytopic.html}

\bibitem{hefferon:first}
\pub{Getting something out of \LaTeX},
Jim Hefferon, 2009.  \url{https://ctan.org/pkg/first-latex-doc}

\bibitem{flynn:veryshort}
\pub{The very short guide to typesetting with \LaTeX},
Peter Flynn, 2016. \\
\url{https://ctan.org/pkg/latex-veryshortguide}

\bibitem{flynn:formatting}
\pub{Formatting Information}, A beginner’s introduction to
typesetting with \LaTeX, Peter Flynn, 2005. \\
\url{https://ctan.org/pkg/beginlatex}

\bibitem{talbot:novices}
\pub{\LaTeX\ for Complete Novices},
Nicola L. C. Talbot, 2012.
Dickimaw Books.
\url{http://www.dickimaw-books.com}

\bibitem{talbot:phd}
\pub{Using \LaTeX\ to Write a PhD Thesis},
Nicola L. C. Talbot, 2013.
Dickimaw Books.
\url{http://www.dickimaw-books.com}

\bibitem{Bennieston:scientific}
\pub{Writing Scientific Documents Using \LaTeX},
Andrew J. Bennieston, 2009. \\
\url{https://ctan.org/pkg/intro-scientific}

\bibitem{oetiker:introduction}
\pub{The Not So Short Introduction to \LaTeXe},
Tobias Oetiker, 2015. \url{https://ctan.org/pkg/lshort}

\bibitem{greenwade:reference}
\pub{\LaTeXe: An unofficial reference manual},
George~D. Greenwade, Stephen Gilmore,
Torsten~Martinsen, and Karl Berry.
\url{http://home.gna.org/latexrefman}

\bibitem{bouzigues:guide}
\pub{Initiation à \LaTeX}, Pour débutants ou jeunes utilisateurs,
Adrien Bouzigues, 2017. \\
\url{https://ctan.org/pkg/guide-latex-fr}.

\bibitem{pakin:list}
\pub{The Comprehensive \LaTeX\ Symbol List},
Scott Pakin, 2017.
\url{https://ctan.org/pkg/comprehensive}

\bibitem{robertson:mathsymbols}
\pub{Every symbol (most symbols) defined by unicode-math},
Will Robertson, 2018. \\
\url{https://ctan.org/pkg/unicode-math}

\bibitem{latexteam:sources}
\pub{The \LaTeXe\ Sources},
Johannes Braams, David Carlisle, Alan Jeffrey, Leslie Lamport,
Frank Mittelbach, Chris Rowley, and Rainer Sch\"opf,
\url{https://ctan.org/pkg/source2e}

\bibitem{scharrer:listinternal}
\pub{List of internal \LaTeXe\ Macros useful to Package Authors},
Martin Scharrer, \\
\url{https://ctan.org/pkg/macros2e}

\bibitem{UK:FAQ}
UK TUG FAQ,
UK \TeX\ Users Group, 
\url{http://www.tex.ac.uk}

\bibitem{pakin:visual}
\pub{The Visual \LaTeX\ FAQ},
Scott Pakin, 
\url{https://ctan.org/pkg/visualfaq}

\bibitem{texdocnet}
TeXdoc Online, 
\url{http://texdoc.net}

\bibitem{ctan}
Comprehensive \TeX\ Archive Network (CTAN),
\url{https://ctan.org}

\bibitem{pakin:dtxtut}
\pub{How to Package Your \LaTeX\ Package},
Scott~Pakin,
\url{https://ctan.org/pkg/dtxtut}

\bibitem{latexteam:class}
\pub{\LaTeXe\ for class and package writers},
\LaTeX3 Project,
\url{https://ctan.org/pkg/clsguide}

\bibitem{mittelbach:doc}
\pub{The doc and shortvrb packages},
Frank Mittelbach,
\url{https://ctan.org/pkg/doc}

\bibitem{mittelbach:docstrip}
\pub{The DocStrip program},
Frank Mittelbach, Denys Duchier, Johannes Braams,
Marcin Woli\'nski, and Mark Wooding,
\url{https://ctan.org/pkg/docstrip}

\bibitem{flynn:article}
\pub{Rolling your own Document Class:
Using \LaTeX\ to keep away from the Dark Side},
Peter~Flynn,
\TUB\ 28:1 (2007), pp.\,110--123,
\url{http://tug.org/TUGboat/tb28-1/tb88flynn.pdf}

\bibitem{pakin:goodthings}
\pub{Good things come in little packages:
An introduction to writing \texttt{.ins} and \texttt{.dtx} files},
Scott~Pakin,
\TUB\ 29:2 (2008), pp.\,305--314,
\url{http://tug.org/TUGboat/tb29-2/tb92pakin.pdf}

\bibitem{mansfield:class}
\pub{How to develop your own document class\Dash our experience},
Niall Mansfield,
\TUB\ 29:3 (2008), pp.\,356--361.
\url{http://tug.org/TUGboat/tb29-3/tb93mansfield.pdf}

\end{thebibliography}
% \vfilneg


\end{document}
