\documentclass[11pt]{article}
% \usepackage[utf8]{inputenc}
\usepackage[urw-garamond]{mathdesign}
\usepackage[T1]{fontenc}

\usepackage[margin=1.2in]{geometry}
\usepackage{multicol}
\setlength{\columnsep}{2em}

\usepackage{graphicx}  % needed for \XeLaTeX command
\usepackage{listings}
\lstset{basicstyle = \small\ttfamily,
        keepspaces=true,
        columns=fullflexible,
        xleftmargin=10pt}

% Get ISO dates
\usepackage[style=iso]{datetime2}

% Color for links
\usepackage{xcolor}
% Color theme from Rodryggo Sylva
% https://color.adobe.com/explore?page=2
\definecolor{darkblue}{HTML}{023059}
\definecolor{lightblue}{HTML}{023E73}
% \definecolor{papyrus}{HTML}{D9D8D7}
\definecolor{papyrus}{HTML}{E4E4E4}
\definecolor{darkred}{HTML}{BF1E0F}
\definecolor{lightred}{HTML}{F24141}
\pagecolor{papyrus}

\usepackage{microtype}
\usepackage[breaklinks,hidelinks,pdfa]{hyperref}
\hypersetup{
    colorlinks=true,
    linkcolor=darkred,
    filecolor=darkred,      
    urlcolor=darkred,
}


% ? This worked for a while and then it didn't, so I wrapped \url{..}
\newcommand{\pkg}[1]{\href{https://ctan.org/pkg/#1}{\texttt{#1}}}

% Logos and acronyms, some of them to match TUGboat commands
\RequirePackage{mflogo} % for MetaPost \MP
 
\newcommand\pdfLaTeX{pdf\LaTeX}
\newcommand\PDFLaTeX{\pdfLaTeX}
\newcommand\LuaLaTeX{Lua\LaTeX}
\newcommand{\Asymptote}{\textit{Asymptote}} % as per the manual
\newcommand{\TikZ}{Ti{\em k}Z}  % from TUB

% Stuff from ltugboat.cls
\makeatletter
\def\smc{\sc}
\def\ninepoint{\small}
\DeclareRobustCommand{\SMC}{%
  \ifx\@currsize\normalsize\small\else
   \ifx\@currsize\small\footnotesize\else
    \ifx\@currsize\footnotesize\scriptsize\else
     \ifx\@currsize\large\normalsize\else
      \ifx\@currsize\Large\large\else
       \ifx\@currsize\LARGE\Large\else
        \ifx\@currsize\scriptsize\tiny\else
         \ifx\@currsize\tiny\tiny\else
          \ifx\@currsize\huge\LARGE\else
           \ifx\@currsize\Huge\huge\else
            \small\SMC@unknown@warning
 \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
}
\newcommand{\SMC@unknown@warning}{\TBWarning{\string\SMC: nonstandard
    text font size command -- using \string\small}}
\newcommand{\textSMC}[1]{{\SMC #1}}
\newcommand{\acro}[1]{\textSMC{#1}\@}

\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}}
\makeatother

\def\Bib{%
  \ifdim \fontdimen1\font>0pt
     B{\SMC\SMC IB}%
  \else
     B\textsc{ib}%
  \fi
}
\def\BibLaTeX{\Bib\kern.02em \LaTeX}
\def\BibTeX{\Bib\kern-.08em \TeX}

\newcommand{\PDF}{\acro{PDF}}
\newcommand{\CTAN}{\acro{CTAN}}
\newcommand{\URL}{\acro{URL}}

% Style I chopped out of ltugboat.cls
\usepackage{dash}

% Section title styling
\usepackage{titlesec}
\titleformat{\section}[hang]{\color{darkblue}\large\bf}{}{0pt}{}
% \titlespacing{\section}{0pt}{2ex plus 0.1ex minus 0.05ex}{0.85ex plus 0.05ex}
\titlespacing{\section}{0pt}{*2.0}{*0.85}

% Give paras just a bit of room
\setlength{\parskip}{0.45ex}


\pagestyle{empty}
\begin{document}\thispagestyle{empty}
\begin{center}
  {\color{darkblue}\Large\bf A First Set of \LaTeX\ Packages}  \\[1.5ex]
  {\color{darkblue}\large Jim Hef{}feron}  
\end{center}
\vspace{1.5ex}

\begin{multicols*}{2}
If you are a \LaTeX{} beginner and ask, 
``How do I \ldots{}\,?'' 
then often you will be told that there is a package for that.
You may well next ask, 
``How would I know that?  
And if there is more than one package then which should I use?''

This list covers most of what
beginners want to do.
Its goal is to cite one 
package in each area that is capable and reliable, and 
that is in
% \textsf{Mac}\kern-0.35pt\TeX, 
Mac\kern-0.35pt\TeX, 
MiK\TeX, and \TeX\ Live.
(There are some extra comments in parentheses that
often come up along with the recommendations.)



% ==============================
\section{Introduction}
For \LaTeX{} users, the canonical archive is 
the Comprehensive \TeX{} Archive Network, 
\href{https://ctan.org}{\color{darkblue}\CTAN}.
It has the latest official versions of 
the packages in the distributions,
with documentation.
And, \href{https://ctan.org/topics/cloud}{\color{darkblue}searching by topic}
is very handy.

You can also see the package documentation installed on 
your computer by typing 
\verb!texdoc <packagename>! % space too wide?
in a terminal window.

Before the list, one more note.
If you are writing for a journal or 
institution that has its own package then of course you should 
use that.
Look on their web page and on \CTAN.



% ===================================
\section{Every document}
To change page size, margins, and orientation, use 
\pkg{geometry}.
Get multiple columns with \pkg{multicol}.

Any document containing significant amounts of mathematics should use 
the American Mathematical Society's packages
\pkg{amsmath}
and 
\pkg{amssymb}.
I also use \pkg{amsthm}
for producing theorem environments.
Notes: (1)~\pkg{amssymb} inputs \pkg{amsfonts} so you don't need to load
the latter,
(2)~many authors also use the caligraphic characters in \pkg{rfsf},
(3)~get bold math symbols with \pkg{bm}, 
(4)~load \texttt{amsthm} after \texttt{amsmath},
and (5)~don't load \texttt{amsmath} directly, instead get it by loading 
\pkg{mathtools} for some useful improvements.

You can toss in 
\pkg{microtype}.
My eye can't spot the improvements but I appreciate that
it means there are fewer awkward lines.


% ===================================
\section{Inside a document}
To tweak lists, use \pkg{enumitem}.

Enhance captions with 
\pkg{caption}
and control floating environments with 
\pkg{float}.
(In particular, this package provides the option `\texttt{H}' 
to override automatic float placement and put something
exactly where you ask.)

Get hyperlinks and turn references into links with 
\pkg{hyperref}
(this should be the last or next to last package
that you load).
Make cross-references say `Theorem~1.2' instead of just `1.2'
with the one-r-ed \pkg{cleveref}
(load it after \texttt{hyperref}).
Have \acro{URL}'s and file paths that can linebreak with 
\pkg{url}.
(If you use \texttt{hyperref} then note that it has its own 
commands for the \texttt{cleveref} and \texttt{url} functions.)

I do code listings with 
\pkg{listings},
although \pkg{minted} is also great. 
Make single quotes inside verbatim text come out correctly with 
\pkg{upquote}.

(A tangent:~copy and paste for computer code listings would be especially 
convenient.
This is a start for the \texttt{listings} package.
\begin{lstlisting}
\lstset{basicstyle = \ttfamily,
        keepspaces=true,
        columns=fullflexible}
\end{lstlisting}
But it is not a full solution.  
The results depend on the \PDF{} viewer and 
worse, if your code line begins with
blank spaces then after copy and paste those spaces are gone.) 

If you use Python, 
\pkg{pythontex}
will show code listings, but it also allows you to execute
Python and put the results in your output.
Do the same for 
the \textit{Sage} mathematics software with \pkg{sagetex},
and similar systems exist for R, Haskell, and Scheme.

There are many package that add table capabilities such as
multirow entries and breaking across pages.
I most often use \pkg{array}, which lets you define your own column
types.
To handle units, 
use \pkg{siunitx} 
(which also has a table column type for aligning on a decimal point).

Make boxes that are colored or framed, such as boxes for theorems,
with
\pkg{tcolorbox}.

% Finally, when developing a document I often want some filler text.
% I use 
% \pkg{lipsum}.


% ===================================
\section{Graphics and color}
To include graphics and do simple manipulations such as resizing, 
use \pkg{graphicx}.
Use the \acro{JPG} format for photos,
\acro{PNG} for other kinds of raster graphics,
and \PDF{} for vector graphics.
If your graphic is in another format then convert it to one of these three.
(Usually you give the file name without the extension,
as with \verb!\includegraphics{graph}!.)
Include parts of a \PDF{} document with
\pkg{pdfpages}.
Include video or sound using
\pkg{media9}.

For colors, use 
\pkg{xcolor}
(although the documentation can be hard to make out).

To make plots and graphics, I use 
\href{https://asymptote.sourceforge.io/}{\Asymptote{}},
a development of \MP{} with three dimensional
constructs.
However, many people instead draw graphics 
inside the document with 
\href{https://ctan.org/pkg/pgf}{\TikZ}.


\section{Front and back matter, headers, footers}
To style chapter and section titles, use
\pkg{titlesec}.
For page headers and footers, reach for 
\pkg{fancyhdr}.
You can tweak the format of tables of contents, lists of figures, etc., 
with
\pkg{tocloft}.

Write exercise answers to an external file so that you can read them in 
later with 
\pkg{answers}.
I like footnotes at the page bottom so I use 
\pkg{footmisc}
(but I had to hack to change the space between a footnote mark and 
the footnote).
Make an index with 
\pkg{makeindex}.

Bibliographies are a thorny area.
Often you have strict requirements, such as from the
\pkg{MLA}.
\CTAN{} is a big help here; check out the many styles for both
\href{https://ctan.org/topic/bibtex-sty}{\BibTeX}
and
\href{https://ctan.org/topic/biblatex}{\BibLaTeX}.




\section{Special documents}
Make exams and problem sets with the 
\pkg{exam} class.

There are many, many resume and CV packages.
Start with \acro{CTAN}'s
\href{https://ctan.org/topic/cv}{\textit{cv}} topic.

To make presentations, use the 
\pkg{beamer} class.
(But with this package you are entering another world, where many of the
packages discussed here do not work.
For example, section title styling happens via a completely
different mechanism.)



\section{Fonts and engines}
To see options besides the default Computer Modern fonts,
visit the 
\href{https://www.tug.org/FontCatalogue/}{\LaTeX\ Font Catalogue},
which includes copy and paste code to make each one work.

Beyond that list, you can also use any font that your computer has 
(which usually works well only if your document 
does not have much mathematics).
To convert \LaTeX{} source to \PDF{} there are
three programs, called engines.
Most people use \PDFLaTeX.
The \XeLaTeX{} engine and the \LuaLaTeX{} engine can leverage
the \pkg{fontspec}
package to use your system's fonts.
(A word about the preprint site \texttt{arXiv.org}.
If your document was produced with \XeLaTeX{} or \LuaLaTeX{} then 
you can only submit a \PDF, not the document source.)

\LaTeX{} now defaults to UTF-8 encoded input on all three engines.
Use \pkg{babel} for internationalization, such as changing the 
the title of the abstract or the bibliography.

\vspace*{2ex}
\noindent{\color{lightblue}\rule{\linewidth}{0.4pt}}

\section{Feedback?}
Contact me via 
\href{https://hefferon.net}{\color{lightblue}\texttt{hefferon.net}}.
(This version is from \today.)
% The source is at
% \href{https://gitlab.com/jim.hefferon/latexpackages}{\color{lightblue}my GitLab repository}.)
\end{multicols*}

\end{document}
