\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{\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, the 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[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} \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{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\\\hspace*{-\leftmargin}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 }'' 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{} \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:\\\hspace*{-\leftmargin}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\\\hspace*{-\leftmargin}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[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}. \end{description} \begin{thebibliography}{99} \bibitem{lamport:latex} \LaTeX: A Document Preparation System, Leslie Lamport, second edition, Addison Wesley, 1994, ISBN 0201529831. \bibitem{hokpkadaly:guide} Guide to \LaTeX, Helmut Kopka and Patrick W. Daly, fourth edition, Addison-Wesley, 2004, ISBN 0321173856. \bibitem{gratzer:moremath} More Math Into \LaTeX, George Gr\"{a}tzer, 5th ed., Springer, 2016, ISBN 3319237950. %ISBN-13: 978-3319237954. \bibitem{kottwitz:beginner} \LaTeX\ Beginner's Guide, Stefan Kottwitz, Packt Publishing, 2011, ISBN 1847199860. %ISBN-13 1847199860. \bibitem{kottwitz:cookbook} \LaTeX\ Cookbook, Stefan Kottwitz, Packt Publishing, 2015, ISBN-13 9781784395148, \\ \url{http://latex-cookbook.net/} \bibitem{mittelbachgossens:companion} 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{oetiker:introduction} The Not So Short Introduction to \LaTeXe, Tobias Oetiker, \url{https://ctan.org/pkg/lshort} \bibitem{greenwade:reference} \LaTeXe: An unofficial reference manual, George~D. Greenwade, Stephen Gilmore, Torsten~Martinsen, and Karl Berry, \url{http://home.gna.org/latexrefman} \bibitem{eijkhout:topic} \TeX\ by Topic, A \TeX{}nician's Reference, Victor Eijkhout, Addison-Wesley UK, 1991, ISBN 0201568829, \url{http://eijkhout.net/texbytopic/texbytopic.html} \bibitem{pakin:list} The Comprehensive \LaTeX\ Symbol List, Scott Pakin, \url{https://ctan.org/pkg/comprehensive} \bibitem{robertson:mathsymbols} Every symbol (most symbols) defined by unicode-math, Will Robertson, \\ \url{https://ctan.org/pkg/unicode-math} \bibitem{UK:FAQ} UK TUG FAQ, UK \TeX\ Users Group, \url{http://www.tex.ac.uk/} \bibitem{pakin:visual} The Visual \LaTeX\ FAQ, Scott Pakin, \url{https://ctan.org/pkg/visualfaq} \bibitem{texdocnet} TeXdoc Online, \url{http://texdoc.net/} \bibitem{latexteam:sources} 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} List of internal \LaTeXe\ Macros useful to Package Authors, Martin Scharrer, \\ \url{https://ctan.org/pkg/macros2e} \bibitem{ctan} Comprehensive \TeX\ Archive Network (CTAN), \url{https://ctan.org} \bibitem{pakin:dtxtut} How to Package Your \LaTeX\ Package, Scott~Pakin, \url{https://ctan.org/pkg/dtxtut} \bibitem{latexteam:class} \LaTeXe\ for class and package writers, \LaTeX3 Project, \url{https://ctan.org/pkg/clsguide} \bibitem{mittelbach:doc} The doc and shortvrb packages, Frank Mittelbach, \url{https://ctan.org/pkg/doc} \bibitem{mittelbach:docstrip} The DocStrip program, Frank Mittelbach, Denys Duchier, Johannes Braams, Marcin Woli\'nski, and Mark Wooding, \url{https://ctan.org/pkg/docstrip} \bibitem{flynn:article} 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} 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} 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}