14

I am interested in your opinion regarding the recommend packages for a standard technical document (Engineering, Physics). I normally use the following header:

\documentclass{article}
% Basic Packages for Encoding (Input AND Output) and Langauge Support
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[english]{babel}

% Change Layout with a User-Friendly Interface
\usepackage{geometry}

% Include Pictures with a User-Friendly Interface
\usepackage{graphicx}
\usepackage{float}

% Extended Math Support from the Famous 'American Mathematical Society'
\usepackage{amsmath}

% Just for Demonstration Purposes
\usepackage[math]{blindtext}

\begin{document}

\blinddocument
\blindmathpaper

\end{document}

Which leads to

enter image description here enter image description here

I am wondering which other packages are recommended nowadays by the specialists here in this community. I found the following packages and I think they are debatable candidates:

I didn't mention tikz on purpose. It's great but I don't consider it as a standard package for the average user.

Important for me is that packages like fixltx2e do normally not require to configure/code much or anything. Which is important for average users.

The class memoir (Link) and the koma-script classes (Link) are very important of course. But I want to discuss this without document classes.

I am looking for stable and good packages - not the newest ones. I want to use the information here to help students who are new to LaTeX.

And of course it's always a compromise between too much packages and not using the appropriate packages.

I think a collection/list of good packages (that you use very often) with a very brief description would be a good outcome of this question.

What do you think?


Reaction so far

  • Is this for an article for a journal? Then for example it is recommended not to change the layout at all as you are only the content provider not the layouter – daleif Mar 08 '15 at 12:51
  • Hi. Sorry that I wasn't clear enough. I don't mean a journal paper. Just a general document. – Dr. Manuel Kuehner Mar 08 '15 at 12:54
  • 5
  • Then also define stable. I tend to use amsmath,amssymb,mathtools,bm plus inputenc,fontenc in all my docs. – daleif Mar 08 '15 at 13:06
  • @daleif: I mean established. Maybe stable is the wrong term :). – Dr. Manuel Kuehner Mar 08 '15 at 13:13
  • 1
    I distribute my My One Page Dictatorial Guide to LaTeX Packages to my students. Since I'm a linguist, it includes lots of specialized packages for linguistics, but all of the basic packages are generic. – Alan Munn Mar 08 '15 at 13:17
  • 4
    I think you should use utf8 as input encoding. Note the biber understands utf8, unlike bibtex. mathtools is a highly recommendable extension of amsmath, and it's point less to load amsmath, since mathtools does it for you. Personally, I prefer to use titleps, from titlesec rather than fancyhdr (easier to customise, in my opinion). – Bernard Mar 08 '15 at 13:20
  • Rule of thumb, to use as few packages as possible, but as much as necessary. Depending on the doc-class, that can be more or less (thinking of memoir). As a KOMA-user, i wouldn't dare to load package float or fancyhdr, not even in my worst nightmare. – Johannes_B Mar 08 '15 at 14:55
  • 1
    With the next LaTeX-update, you will have the fixltx2e updates by default. ;-) – Johannes_B Mar 08 '15 at 14:56
  • Thinking about it, this question is quite opinion based or too broad. I never load inputenc or fontenc. In contrast to @Alan, i don't need linguistigs stuff, but packages like chemformula, booktabs or siunitx. – Johannes_B Mar 08 '15 at 14:58
  • 1
    And last but not least, please, please don't make some kind of template. Do it for Gunnar. – Johannes_B Mar 08 '15 at 14:59
  • @Johannes_B: Thanks for your comments. I thing inputenc and fontenc are important for 'everybody'. For example if you have 'Umlaute' or other special characters in your text. If you do it wrong then in some cases you cannot search for these characters in the resulting PDF as far as I know. – Dr. Manuel Kuehner Mar 08 '15 at 16:40
  • XeTeX and LuaTeX are unicode aware engines. If your input is utf8-encoded, which is the common default nowadays, you don't have to care about package inputenc. Package fontspec deals with font encoding stuff. – Johannes_B Mar 08 '15 at 16:46
  • 2
    I like fancyhdr. (Just saying because it seems to be getting a hard time here.) I also almost always load cfr-lm (possibly to be expected). I wouldn't think xcolor was needed in a typical article. I always load babel and it is probably better to specify the variant of English for clarity. I also always load enumitem and microtype. But this is all very, very dependent on what you *need*. That a package is stable and good is no reason to load it if you don't need it. chemformula and siunitx may be excellent but I've never used them because I don't need them. – cfr Mar 08 '15 at 17:11
  • Can you add some explanations on what you think misses? The question , or rather the answer, will be opinion based. Linguists will load linguistics packages, physicists package physics chemists package chemformula mathematicians package mathtools engineers a wild mixture of the above. May i ask about the intention of the question? You are always welcome in our little chat. – Johannes_B Mar 29 '15 at 12:31
  • There is also a more general question on often loaded packages. This is clearly not a duplicate! – strpeter Apr 02 '15 at 16:43
  • @strpeter Thx! I will look into it. – Dr. Manuel Kuehner Apr 03 '15 at 21:35
  • I don't agree with @AlanMunn's dictatorial guide! Note, too, that it depends where you are. If you are writing American English, you may not need babel. If you are writing anything else, you are best using it. – cfr Apr 03 '15 at 23:10
  • @cfr That's why it's dictatorial. :). It probably needs some revision, but other than babel which for most of my students isn't a concern what other things would you change? – Alan Munn Apr 03 '15 at 23:16
  • 1
    @AlanMunn I wouldn't even tell them about applemac and stuff. I'd tell them to use utf8 with an editor which supports it. And I wouldn't give natbib, multicol, parskip or setspace as essential or always-load, for sure. I'm allergic to titlesec but if I was recommending it, I'd recommend titleps rather than fancyhdr. I'd also at least mention forest and probably mathtools rather than amsmath. I'd probably list the KOMA classes rather than memoir but that's presumably personal preference. memoir's documentation annoys me is all. I'd add textcomp. – cfr Apr 03 '15 at 23:42
  • @AlanMunn Also, I realise that's why it is dictatorial. But, fortunately, I'm not subject to your dictatorship and can therefore disagree with a certain degree of impunity (and equally dictatorial views, no doubt). – cfr Apr 03 '15 at 23:44
  • 1
    You need none of the mentioned packages, the \input opmac is sufficient. See opmac-prospectus: http://petr.olsak.net/opmac-letak.pdf – wipet Apr 04 '15 at 05:14
  • 1
    @wipet Come on that's the definition of a package :) Don't hide behind the plain TeX syntax. – percusse Apr 04 '15 at 21:23

1 Answers1

19

I just ran a workshop on LaTeX for postgraduate students. Here is the list of packages which I recommended they all load in every document:

%

This is, I think, the right answer. This is not to say that I did not tell them about packages - I did. Nor is it to say that I made no recommendations - I did. But I made conditional recommendations. I wanted them to understand that packages extend LaTeX in particular ways. You load them if you need those extensions. I also made very few such recommendations.

This workshop was introductory. It assumed no prior experience with LaTeX. No participant had used LaTeX before. (One had used Scientific Word but had never seen LaTeX code.)

When I run the follow-up, I plan to recommend loading a small number of packages routinely. Right now, my planned list includes the following

  • babel with british or welsh or welsh,british passed to the document class;
  • inputenc with option utf8;
  • fontenc with option T1.

I will also, probably, give them a list of 'what if I want to...?' with suggested packages, and I may try to give them a list of discipline-specific packages, if I can manage it or if I can get people here to volunteer the information.

Why so minimal? Because the huge temptation is to add packages with abandon, and the result is a mess. Better to load fewer packages initially, as a beginner, and learn which ones you need later.

Note that this is very different from the list of packages which I always, or almost always, load. Even if I cleaned up my code (which I should), that list would be a significant one. But I know why I load those packages, I'm aware that I load them, and I have at least some sense of some of the problems they may cause. I want custom page layouts and diagrams and finer-grained control over fonts and microtypography and fancy cross-references and other fiddly bits. Those are not, in my view, things which somebody who has just started to use LaTeX should be thinking about.

I realise that this is not the answer you want. It is, however, the answer which I think is correct. I may be wrong but, for whatever it is worth, that is what I recommend.

Perhaps I should also say that, if I had not been answering questions here for a while, my list of recommendations would have been much closer to the list of packages I use. That would, I think, have been a bad thing - indeed, I am convinced that it would have been a Bad Thing - and so I think that my answer is at least a minimally informed one.

EDIT

At the intermediate workshop I'm scheduled to run in June, I do plan to give students a conditional package list.

I would on NO account give this to students when introducing LaTeX.

Right now, my draft list looks as follows:

\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)}
\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|; \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[footmisc] for customised footnotes.
  \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.
  \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}
\end{document}

EDIT

I've decided to add a second page with discipline-specific packages. Hence, turnstile and forest have been removed from my general list. The above now represents the first page which lists general packages. The next page is currently the subject of this question and so I'm removing that part of the code from here, since it is not relevant to the core of this question anyway.

Here is the first page of the handout:

general package recommendations for intermediate users

Thanks to ManuelKuehner for adding screen shots from an earlier version of this answer.

cfr
  • 198,882
  • I really like this answer, and I agree with it almost completely. I also realize from your comments about my dictatorial guide that you took mine to be much more of a "you must load these packages" list, whereas I intended it to be much more like your "what if I want to..." list. So I'll adjust my wording accordingly. Thanks. (Also, my use of 'dictatorial' is reflecting the fact that I don't justify my choices; I don't require my students to use anything (or LaTeX at all, for that matter.)) – Alan Munn Apr 04 '15 at 03:58
  • @cfr Thanks a lot for your thoughts. And indeed, that's not the answer I was looking for. I assume we just have different opinions and/or experiences on the subject. I upvote it of course - since it is a good answer - but I won't award it with the bounty :) (no hard feelings, ok?! :). And thanks for mentioning the 'forest' package. – Dr. Manuel Kuehner Apr 04 '15 at 07:37
  • @AlanMunn Thanks. That makes sense to me. I also got a lot of 'what if I want to?' questions, so individual students also got recommendations responding to those. (In one case, a recommendation for something I've never even used but which I hope will work!) – cfr Apr 04 '15 at 13:39
  • @ManuelKuehner Fine with me. I half expected you to down vote it, to be honest. forest is great. – cfr Apr 04 '15 at 13:40
  • 2
    @cfr -- since you incorporate amsmath with mathtools, you should do the same withamsfonts-- it is loaded byamssymb`. – barbara beeton Apr 05 '15 at 03:12
  • @barbarabeeton Thanks. I always manage to forget that. – cfr Apr 05 '15 at 03:28
  • Just saw that answer now, very very good. I agree completely. – Johannes_B Apr 11 '15 at 13:43
  • I don't like the float package very much... Nevertheless: newfloat (from the same author as caption) does some of the things float does. (otherwise good list :) ) – cgnieder Jun 08 '15 at 22:09
  • @clemens Why not float? (I'm not disagreeing - I'm just not very familiar with the options in this area.) – cfr Jun 09 '15 at 14:26
  • 1
    @cfr basically I don't like it because it provides the H specifier but also because it has far less options when declaring a new float. – cgnieder Jun 09 '15 at 14:40
  • Note that the final version is posted here (looks identical, mind). @clemens You may be right. I can't change it for this time, though. I do think that fewer options may be an advantage with more inexperienced users. Some packages are excellent but just too much for beginners. These users may only have been using LaTeX for a couple of months. – cfr Jun 09 '15 at 15:37
  • 1
    @cfr maybe it's not necessary to change it. Certainly not just because I don't like float... :) – cgnieder Jun 12 '15 at 22:17
  • What of this packages are not needed anymore if we use memoir or KOMA? – skan Nov 19 '16 at 13:16
  • 1
    I think there is a typo in package name: it should be "cleveref" instead of "cleverref":) – andselisk Dec 23 '19 at 20:37
  • 2
    @andselisk You are quite right. Indeed. Thank-you! Now, should I edit for that or wait ... and, if I wait, will I forget ...? – cfr Dec 24 '19 at 00:21
  • Is your workshop on LaTeX for postgraduate students available online? – Dr. Manuel Kuehner Feb 09 '20 at 09:04