I'm preparing a list of package recommendations for an intermediate workshop on LaTeX. I avoided providing such a list at the introductory workshop as the tendency is to then add packages without really understanding why, but it seems appropriate to provide such a list to users who have a little bit of experience with LaTeX under their belts. Participants in the workshop will primarily be postgraduate students in a variety of academic disciplines.

One side of the handout will list general package recommendations, mostly in conditional form. For example, 'enumitem for custom lists'. The other side will list more specialised packages according to academic discipline. This question concerns only the second side of the handout.

My current rather lopsided list is given below. I am trying to adhere to 2 constraints:

  • packages should be available from CTAN, preferably as part of TeX Live and MiKTeX;
  • packages should be compatible with both the LaTeX format and the pdfTeX engine.

What should I add, delete or amend?

Changes to the existing subject lists or suggestions for listings for additional subjects are equally welcome.

Subject specific listings:

packages by subject

[Obviously, the current lopsidedness consists in the length of the list for logic, linguistics and the humanities. That it is not lopsided entirely in favour of logic is thanks to responses in comments on this question!]

Note that mathtools, amssymb and ntheorem are listed under Mathematics on the first, general side of the handout as these are not really specific to mathematicians. Similarly, tikz and pgfplots are listed there under Diagrams. Obviously there are grey areas here and I'm aware that my categories are rather arbitrary. I'm more interested in making sure that key packages are on the list and that I'm not listing things which are best avoided.

Here is the general list for reference:

general packages

Code for handout (2015-05-02)

\documentclass[a4paper,welsh,british,twocolumn]{article}
\usepackage{babel}
\usepackage[utf8]{inputenc}
\usepackage[tt=lining]{cfr-lm}
\usepackage{enumitem,geometry,url}
\usepackage{csquotes}
   \MakeAutoQuote{‘}{’}
   \MakeAutoQuote*{“}{”}
\geometry{scale=.9}
\setlength{\columnseprule}{0.4pt}
\urlstyle{sf}
\title{\LaTeX{} Package Recommendations}
\author{cfr}
\date{}
\pagestyle{empty}
\begin{document}
\pdfinfo{%
  /Title    (LaTeX Package Recommendations)
  /Subject  (LaTeX)
  /Keywords (LaTeX, package)}
\maketitle\thispagestyle{empty}
\newlist{pkgdescription}{description}{1}
\setlist[pkgdescription]{font=\bfseries\ttfamily}
\newcommand*\lpack[1]{\texttt{\bfseries #1}}
\section{General}
You should almost always use:
\begin{pkgdescription}
  \item[babel] Pass \verb|welsh,british| to your class.
  \item[inputenc] Load with option \verb|utf8|; \verb|\input{ix-utf8enc.dfu}|.
  \item[fontenc] Load with option \verb|T1|.
  \item[textcomp]
  \item[microtype]
\end{pkgdescription}
\section{Document Layout}
If you are using a standard class (e.g.\ \lpack{article}, \lpack{book} or \lpack{report}):
\begin{pkgdescription}
  \item[geometry] to change page dimensions.
  \item[fancyhdr] for custom headers/footers.
  \item[titling] to use document metadata after \verb|\maketitle|.
\end{pkgdescription}
\section{Mathematics}
\begin{pkgdescription}
  \item[mathtools] for enhanced \lpack{amsmath}.
  \item[amssymb] for more symbols, scripts.
  \item[ntheorem] for enhanced theorem environments.
\end{pkgdescription}
\section{Quotes \& Quoting}
\begin{pkgdescription}
  \item[csquotes] for context- and language-sensitive quotations and quotation marks. Recommended if using \lpack{biblatex}.
\end{pkgdescription}
\section{Citations \& Bibliographies}
\begin{pkgdescription}
  \item[biblatex] Load with option \verb|backend=biber|.
\end{pkgdescription}
\section{Cross-Referencing}
\begin{pkgdescription}
  \item[fancyref] for enhanced cross-references.
  \item[cleverref] for enhanced cross-references.
\end{pkgdescription}
\section{Lists}
\begin{pkgdescription}
  \item[enumitem] for custom lists.
  \item[glossaries] for glossaries and lists of acronyms.
\end{pkgdescription}
\section{Tables}
\begin{pkgdescription}
  \item[array] for enhanced tabular environments.
  \item[booktabs] for professional quality tables.
  \item[longtable] for multi-page tables.
  \item[tabularx] for tables with specified width.
  \item[threeparttable] for tables with notes.
  \item[multirow] for cells spanning multiple rows.
\end{pkgdescription}
\section{Floats}
\begin{pkgdescription}
  \item[caption] to customise captions.
  \item[float] more options for floats.
  \item[subcaption] for sub-figures, sub-tables and sub-captions.
  \item[floatrow] for aligned sub-figures.
  \item[rotating] to rotate floats.
\end{pkgdescription}
\section{Hyperlinks}
\begin{pkgdescription}
  \item[hyperref] for hyperlinks.
  \item[bookmark] for enhanced bookmarks.
\end{pkgdescription}
\section{Images \& Colour}
\begin{pkgdescription}
  \item[graphicx] to load external images.
  \item[xcolor] for colour.
\end{pkgdescription}
\section{Diagrams}
\begin{pkgdescription}
  \item[tikz] for diagrams.
  \item[pgfplots] for plots of all kinds.
\end{pkgdescription}
\section{External Data}
\begin{pkgdescription}
  \item[datatool] for data manipulation.
  \item[textmerg] for merging text.
\end{pkgdescription}
\section{Version Control}
\begin{pkgdescription}
  \item[svn-multi] for use with \verb|subversion|.
  \item[gitinfo2] for use with \verb|git|.
\end{pkgdescription}
\appendix
\section{Biology}
\begin{pkgdescription}
  \item[texshade] for nucleotide and peptide alignments.
  Can process alignments in \textsc{msf}, \textsc{aln} and \textsc{fasta} formats.
\end{pkgdescription}
\section{Chemistry}
% Ref.: \url{}
\begin{pkgdescription}
  \item[chemformula] for formulae and reactions.
  \item[modiagram] for \lpack{tikz}-based molecular orbital diagrams.
  \item[mychemistry] for reaction schemes.
  The package depends on \lpack{chemfig} for \lpack{tikz}-based molecules.
  \item[tikzorbital] for \lpack{tikz}-based molecular orbitals, inc.\ s, p and d.
  \item[siunitx] for SI units.
\end{pkgdescription}
\section{Computer Science}
% Ref.: \url{}
\begin{pkgdescription}
  \item[algorithms] for pseudo-code.
  \item[algorithm2e] for floating pseudo-code.
  \item[listings] for source code.
  \item[minted] for highlighted source code.
\end{pkgdescription}
\section{Engineering}
% Ref.: \url{}
\begin{pkgdescription}
  \item[bloques] for simple \lpack{tikz}-based control diagrams.
  \item[circuitikz] for \lpack{tikz}-based electrical and electronic circuits.
  \item[siunitx] for SI units.
\end{pkgdescription}
\section{Humanities}
% Ref.: \url{}
\begin{pkgdescription}
  \item[bibleref] for referencing and indexing Bible verses.
  \item[classics] to cite classic works sensibly.
  \item[eledmac] for critical editions and \lpack{eledpar} for parallel texts.
  \item[ednotes] for critical editions of handwritten manuscripts.
  \item[edfnotes] for critical editions of printed texts with footnotes.
  \item[handout] for handouts consisting of textual excerpts.
  \item[poemscol] for critical editions of poetry.
  \item[schemata] for topical schemata of the kind sometimes used to illustrate conceptual structure e.g.~in Scholastic thought.
  \item[verse] for verse without annotations.
\end{pkgdescription}
\section{Linguistics}
% Ref.: \url{www.essex.ac.uk/linguistics/external/clmt/latex4ling}
\begin{pkgdescription}
  \item[gb4e] for examples, glosses etc.
  \item[expex] for enhanced examples, glosses etc.
  \item[leipzig] for standard and custom glossing abbreviations.
  \item[ot-tableau] for optimality-theoretic tableaux.
  \item[qtree] for syntactic trees without \lpack{tikz}.
  \item[forest] for enhanced \lpack{tikz}-based syntactic trees.
  \item[stmaryrd] for semantics brackets.
  \item[tikz-dependency] for \lpack{tikz}-based dependency graphs.
  \item[tipa] for IPA fonts.
\end{pkgdescription}
\section{Logic}
Ref.: \url{www.latexforlogicians.net}
\begin{pkgdescription}
  \item[algorithms] for algorithms.
  \item[gene-logic] for better spacing of maths symbols.
  \item[bussproofs] for natural deduction/Gentzen sequent proofs.
  \item[prftree] a newer alternative to \lpack{bussproofs}.
  \item[lplfitch] for ‘Fitch’-style proofs.
  \item[logicproof] for ‘Fitch’-style proofs with boxed sub-proofs.
  \item[natded] for Jaśkowski-/Kalish-Montague-style proofs.
  \item[qtree] for tree proofs without \lpack{tikz}.
  \item[forest] for enhanced \lpack{tikz}-based tree proofs.
  \item[tikz-cd] for \lpack{tikz}-based commutative diagrams.
  \item[turnstile] for turnstiles of all kinds.
\end{pkgdescription}
\section{Physics}
% Ref.: \url{}
\begin{pkgdescription}
  \item[feyn] for inline Feynman diagrams.
  \item[feynmp] or \lpack{feynmf} for Feynman diagrams.
  \item[siunitx] for SI units.
\end{pkgdescription}
\section{}
% Ref.: \url{}
\begin{pkgdescription}
  \item[]
\end{pkgdescription}
\end{document}
  • 1
    Some years ago, I created this small showcase for teachers as a printable gift, it might be of some help for you or it could serve as an inspiration, if you don't mind a little bit of Czech language. I can provide the codes if those should help somehow. But these pages don't cover all the key fields and packages, I selected some I like. – Malipivo Apr 6 '15 at 16:22
  • 1
    In philosophy, theology, and classics, classics is useful for avoiding references that suggest Aristotle wrote something new in 2012, and schemata is great for outlining complex texts and arguments. – Thérèse Apr 6 '15 at 17:09
  • 1
    Well, I'd consider putting classics on the list given that it is not tied to a specific (set?) of bibliography styles and given the audience. (However, I think I'll stick to my own xparse-based citation commands for pre-modern texts since xparse offers more flexibility.) – jon Apr 7 '15 at 0:00
  • 1
    Ha, indeed. I have thought about tidying them up. By "flexible" what I secretly meant was I can do all kinds of ad hoc things that are neither wise nor consistent. I have toyed with macro-implementing macros, but they become pretty brittle pretty quickly (my fault, I assume). They're now mostly for medieval law / jurists, too, which is (unsurprisingly) pretty niche ... and very unstandardized/-able. It's on the "long" TODO list though. – jon Apr 7 '15 at 2:47
  • 3
    And you might introduce TeX.SX as a starting point to solve almost all the TeX & friends mysteries. :-) – Malipivo Apr 7 '15 at 8:12
up vote 6 down vote accepted

Here is the final version, updated July 2016:

\pdfminorversion=7
\documentclass[a4paper,welsh,british,twocolumn]{article}
\usepackage{babel}
\usepackage[utf8]{inputenc}
\usepackage[tt=lining]{cfr-lm}
\usepackage{enumitem,geometry,url,fancyref}
\usepackage{csquotes}
   \MakeAutoQuote{‘}{’}
   \MakeAutoQuote*{“}{”}
\geometry{scale=.9}
\setlength{\columnseprule}{0.4pt}
\urlstyle{sf}
\title{\LaTeX{} Package Recommendations}
\author{cfr}
\date{}
\usepackage{fancyhdr}
\fancyhf{}
\renewcommand*\headrulewidth{0pt}
\fancyhf[cf]{%
  Find packages in the Comprehensive \TeX{} Archive Network (CTAN) at \url{ctan.org}.
  Browse by topic at \url{ctan.org/topic}.}
\pagestyle{fancy}
\begin{document}
\pdfinfo{%
  /Title    (LaTeX Package Recommendations)
  /Subject  (LaTeX)
  /Keywords (LaTeX, package)}
\pdfcatalog{%
  /URL      ()
  /PageMode /UseOutlines}   % other values: /UseNone, /UseOutlines, /UseThumbs, /FullScreen
%[openaction <actionspec>]
\maketitle\thispagestyle{fancy}
\newlist{pkgdescription}{description}{1}
\setlist[pkgdescription]{font=\bfseries\ttfamily}
\newcommand*\lpack[1]{\texttt{\bfseries #1}}
\section{General}
You should almost always use:
\begin{pkgdescription}
  \item[babel] Pass \verb|welsh,british| to your class.
  \item[inputenc] Load with option \verb|utf8|.
  \item[fontenc] Load with option \verb|T1|.
  \item[textcomp]
  \item[microtype]
\end{pkgdescription}
\section{Document Layout}
If you are using a standard class (e.g.\ \lpack{article}, \lpack{book} or \lpack{report}):
\begin{pkgdescription}
  \item[geometry] to change page dimensions.
  \item[fancyhdr] for custom headers/footers.
  \item[footmisc] for customised footnotes.
  \item[titling] to customise title and use document metadata after \verb|\maketitle|.
  \item[titlesec] for custom sectioning and \lpack{titleps} for headers/footers.
\end{pkgdescription}
\section{Mathematics}
\begin{pkgdescription}
  \item[mathtools] for enhanced \lpack{amsmath}.
  \item[amssymb] for more symbols, scripts.
  \item[ntheorem] for enhanced theorem environments.
\end{pkgdescription}
\section{Quotes \& Quoting}
\begin{pkgdescription}
  \item[csquotes] for context- and language-sensitive quotations and quotation marks. Recommended if using \lpack{biblatex}.
\end{pkgdescription}
\section{Citations \& Bibliographies}
\begin{pkgdescription}
  \item[biblatex] Load with option \verb|backend=biber|.
\end{pkgdescription}
\section{Cross-Referencing}
\begin{pkgdescription}
  \item[fancyref] for enhanced cross-references.
  \item[cleverref] for enhanced cross-references.
\end{pkgdescription}
\section{Lists}
\begin{pkgdescription}
  \item[enumitem] for custom lists.
  \item[glossaries] for glossaries and lists of acronyms.
\end{pkgdescription}
\section{Tables}
\begin{pkgdescription}
  \item[array] for enhanced tabular environments.
  \item[booktabs] for professional quality tables.
  \item[longtable] for multi-page tables.
  \item[tabularx] for tables with specified width.
  \item[threeparttablex] for tables with notes.
  \item[multirow] for cells spanning multiple rows.
\end{pkgdescription}
\section{Floats}
\begin{pkgdescription}
  \item[caption] to customise captions.
  \item[float] more options for floats.
  \item[placeins] to control float placement.
  \item[subcaption] for sub-figures, sub-tables and sub-captions.
  \item[floatrow] for aligned sub-figures.
  \item[rotating] to rotate floats.
\end{pkgdescription}
\section{Hyperlinks}
\begin{pkgdescription}
  \item[hyperref] for hyperlinks.
  \item[bookmark] for enhanced bookmarks.
\end{pkgdescription}
\section{Images \& Colour}
\begin{pkgdescription}
  \item[graphicx] to load external images.
  \item[xcolor] for colour.
\end{pkgdescription}
\section{Diagrams}
\begin{pkgdescription}
  \item[tikz] for diagrams.
  \emph{Many} specialised extensions available.
  \item[pgfplots] for plots.
  Includes \lpack{pgfplotstable} for data tables.
\end{pkgdescription}
\section{External Data}
\begin{pkgdescription}
  \item[datatool] for data manipulation.
  \item[textmerg] for merging text.
\end{pkgdescription}
\section{Version Control}
\begin{pkgdescription}
  \item[svn-multi] for use with \verb|subversion|.
  \item[gitinfo2] for use with \verb|git|.
\end{pkgdescription}
\appendix
\newcommand*\seesci{\emph{See also \fref{sec:sci}.}}
\section{Biology}
\seesci
\begin{pkgdescription}
  \item[bracketkey] for bracketed identification keys.
  \item[dichokey] for dichotomous identification keys.
  \item[shipunov] for identification keys, classification lists and more.
  \item[texshade] for nucleotide and peptide alignments.
  Can process alignments in \textsc{msf}, \textsc{aln} and \textsc{fasta} formats.
  \item[textopo] for shaded membrane protein topology plots.
\end{pkgdescription}
\section{Chemistry}
\seesci
% Ref.: \url{}
\begin{pkgdescription}
  \item[chemfig] for reaction schemes and \lpack{tikz}-based molecules.
  \lpack{chemformula} and \lpack{mhchem} are alternatives.
  \item[chemformula] for formulae and reactions.
  \item[mhchem] for formulae and equations.
  Includes \lpack{hpstatement} (H and P Statements) and \lpack{rsphrase} (R and S Phrases).
  \item[modiagram] for \lpack{tikz}-based molecular orbital diagrams.
  \item[tikzorbital] for \lpack{tikz}-based molecular orbitals, inc.\ s, p and d.
\end{pkgdescription}
\section{Computer Science}
\emph{See also sections \ref{sec:logic} and \ref{sec:sci}.}
% Ref.: \url{}
\begin{pkgdescription}
  \item[algorithms] for pseudo-code.
  \item[algorithm2e] for floating pseudo-code.
  \item[listings] for source code.
  \item[minted] for highlighted source code.
  \item[pgf-umlcd] and \lpack{pgf-umlsd} for \lpack{tikz}-based UML diagrams.
  \item[sa-tikz] for \lpack{tikz}-based switching architectures.
\end{pkgdescription}
\section{Engineering}\label{sec:eng}
\emph{See also sections \ref{sec:phys} and \ref{sec:sci}.}
% Ref.: \url{}
\begin{pkgdescription}
  \item[bloques] for simple \lpack{tikz}-based control diagrams.
  \item[circuitikz] for \lpack{tikz}-based electrical and electronic circuits.
\end{pkgdescription}
\section{Humanities}
% Ref.: \url{}
\begin{pkgdescription}
  \item[bibleref] for referencing and indexing Bible verses.
  \item[classics] to cite classic works sensibly.
  \item[reledmac] for critical editions and \lpack{reledpar} for parallel texts.
  \item[ednotes] for critical editions of handwritten manuscripts.
  \item[edfnotes] for critical editions of printed texts with footnotes.
  \item[handout] for handouts consisting of textual excerpts.
  \item[poemscol] for critical editions of poetry.
  \item[schemata] for topical schemata of the kind sometimes used to illustrate conceptual structure e.g.~in Scholastic thought.
  \item[verse] for verse without annotations.
\end{pkgdescription}
\section{Linguistics}
% Ref.: \url{www.essex.ac.uk/linguistics/external/clmt/latex4ling}
\begin{pkgdescription}
  \item[gb4e] for examples, glosses etc.
  \item[expex] for enhanced examples, glosses etc.
  \item[leipzig] for standard and custom glossing abbreviations.
  \item[ot-tableau] for optimality-theoretic tableaux.
  \item[qtree] for syntactic trees without \lpack{tikz}.
  \item[forest] for enhanced \lpack{tikz}-based syntactic trees.
  \item[stmaryrd] for semantics brackets.
  \item[tikz-dependency] for \lpack{tikz}-based dependency graphs.
  \item[tipa] for IPA fonts. But consider Xe\LaTeX{} or Lua\LaTeX.
\end{pkgdescription}
\section{Logic}\label{sec:logic}
Ref.: \url{www.latexforlogicians.net}
\begin{pkgdescription}
  \item[algorithms] for algorithms.
  \item[gene-logic] for better spacing of maths symbols.
  \item[bussproofs] for natural deduction/Gentzen sequent proofs.
  \item[prftree] a newer alternative to \lpack{bussproofs}.
  \item[lplfitch] for ‘Fitch’-style proofs.
  \item[logicproof] for ‘Fitch’-style proofs with boxed sub-proofs.
  \item[natded] for Jaśkowski-/Kalish-Montague-style proofs.
  \item[qtree] for proof trees without \lpack{tikz}.
  \item[prooftrees] for enhanced \lpack{forest}/\lpack{tikz}-based proof trees.
  \item[tikz-cd] for \lpack{tikz}-based commutative diagrams.
  \item[tikz-inet] for \lpack{tikz}-based interaction nets.
  \item[turnstile] for turnstiles of all kinds.
\end{pkgdescription}
\section{Physics}\label{sec:phys}
\emph{See also sections \ref{sec:eng} and \ref{sec:sci}.}
% Ref.: \url{}
\begin{pkgdescription}
  \item[feyn] for inline Feynman diagrams.
  \item[feynmp] or \lpack{feynmf} for Feynman diagrams.
\end{pkgdescription}
\section{Sciences}\label{sec:sci}
% Ref.: \url{}
\begin{pkgdescription}
  \item[miller] for Miller indices.
  \item[siunitx] for SI units.
\end{pkgdescription}
\section*{Additional Symbols}\label{sec:symbols}
\begin{pkgdescription}
  \item[comprehensive] provides a more-or-less comprehensive list.
  \item[adforn,adfarrows,adfbullets] for ADF symbol fonts.
  \item[dictsym] for dictionary symbols.
  \item[marvosym] for assorted symbols.
  \item[pifont] for Zapf Dingbats.
  \item[wasysym] for the symbol font \texttt{wasy}.
\end{pkgdescription}
\end{document}

final version of package recommendations

In addition, I have a handout listing font packages and a double-sided font sampler which I created to illustrate many of the available fonts. And I've just updated David Carlisle's list of maths symbols although the legality of my version may be questionable since David has not specified a licence according to CTAN's database.

  • 3
    Please don't recommend the mychemistry package! It is obsolete and everything it does is completely covered by chemfig. – clemens Jun 13 '15 at 9:10
  • 1
    Also you could give a note that chemformula and mhchem are alternatives for the same kind of application. I explained this in German in detail in a blog post series (which I'm planning to translate into English some time…) – clemens Jun 13 '15 at 9:14
  • @clemens It is too late for this year, but I will make a note of this for next time. I basically am entirely in the hands of what people told me in comments or what I gleaned from CTAN as chemistry is not something I have ever typeset myself. I'm sorry I didn't realise the status of the package a few days ago, but hopefully people will find out for themselves if it is relevant to them. Thanks very much for letting me know. – cfr Jun 13 '15 at 16:52
  • @clemens Please see 2016 version above, incorporating your suggestions. Thanks again! – cfr Jul 18 '16 at 16:54
  • 1
    @clemens Should I list chemmacros as well as/instead of chemformula? Too late for this year.... – cfr Jul 19 '16 at 21:27

As an applied mathematician / computer science guy, I had the requirement to plot (lots of!) data series, to plot functions given by expression, and to typeset numerical tables (often with additional, automatically generated post-processings). Plotting includes surfaces or contour plots for 2d functions.

pgfplots and pgfplotstable excel at these applications and many guys (not only applied mathematicians) use it to simplify their life.

http://pgfplots.sourceforge.net/

Disclaimer: I wrote pgfplots and pgfplotstable.

EDIT I see that you have already referenced pgfplots under "diagrams". Nevertheless, the combination of both might be a good recommendation for those who have to deal with numerical tables and their postprocessing.

  • Hmmm... yes. I wondered whether pgfplotstable should be listed additionally. I've changed the listing under Diagrams to say 'pgfplots for plots. Includes pgfplotstable for data tables.' I think these packages definitely belong on the general side of the sheet. I've used pgfplots, for example, and I am neither a scientist nor a mathematician ;). (Thanks for the package!) – cfr May 3 '15 at 16:00

miller.sty is very useful in crystal chemistry/crystallography.

asymptote.sty for incorporating asymptote figures.

  • 3
    Welcome to TeX.SX! I think, you should elaborate on your answer. – Christian Hupfer May 3 '15 at 12:06
  • This does not provide an answer to the question. To critique or request clarification from an author, leave a comment below their post - you can always comment on your own posts, and once you have sufficient reputation you will be able to comment on any post. – Henri Menke May 3 '15 at 12:29
  • Thanks! I've added miller to a new section for the sciences in general, along with siunitx. I'm less sure about asymptote because it relies on an external programme which I certainly don't have time to talk about during the workshop (and know nothing about). – cfr May 3 '15 at 13:37
  • 1
    @HenriMenke I disagree that this is not an answer. It is certainly a short answer but it provides information not currently present in the comments and it addresses one aspect of the question in a useful way. It certainly is not either a critique of the question or a request for clarification. A little elaboration would, however, certainly be welcome as Christian Hupfer suggests. – cfr May 3 '15 at 13:40

Your Answer

 

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.