# LaΤeΧ

### …and ΤΕΧ, and ConTeXt and XeTeX and TeXleMeElmo

(Thanks fun.fnord.eu.)

The least worst mathematical typesetting system. One of the better scoured of the filthy pipes in the academic plumbing. De facto standard for mathematicians, especially those who are not so impertinent as to insist in writing in non-English languages, or are not so shallow as deny the simple delight of the painstaking handicraft of manually setting line breaks, or who have grad students who will deal with all that shit for free. That is, a tool that meets the needs of that endangered animal, the Tenured Academic, that the rest of us survive.

Other alternatives include

1. using MS Word, and
2. stabbing your eyeballs with a pencil

… each of which I regard as similarly undesirable, and, to be clear, both even less desirable than LaTeX itself, which is firm damnation.

Addendum: Yes, I am aware there are differences due to various different engines, formats, macro systems etc, giving us ConTeXT and LaTeX and TeX and pdftex and xetex and luatex, and that they are all refreshingly different in their choices of pain-points in formatting, interoperation, character set handling, compatibility, and community support. However, standards lock-in being what it is, I believe I can avoid arranging the deckchairs on this sinking boat by waiting for incremental improvements to make a difference. I will discretely wait over here, near the lifeboats, for some amped-up scholarly version of Markdown to come save me and render the entire tiresome problem irrelevant.

## History

Eddie Smith, From boiling lead and black art: An essay on the history of mathematical typography; the only thing on this page you might conceivably read for pleasure.

Robert Kosara has an excellent rant:

The tools of the trade for academics and others who write research papers are among the worst software has to offer. Whether it’s writing or citation management, there are countless issues and annoyances. How is it possible that this fairly straightforward category of software is so outdated and awful?

Grad students, Robert, and their zero-marginal-cost labour. The same labour undervaluation that keeps slave economies from developing the steam engine.

Here is a more fannish, upbeat and pious take by Graham Douglas, What’s in a name: a guide to the many flavours of Tex.

## Unicode

Put this at the start of every file you touch.

% !TEX encoding = UTF-8 Unicode

then after the documentclass

\usepackage[utf8x]{inputenc}

Then, actually use utf8.

This is actually not too painful in modern LaTeX. However, the 💩 will hit the fän if you try to use non-ascii ©haracters in the BibTeX; don’t. Us BibLaTeX instead.

## Math size

I forget this all the time. Explained by overleaf, Math font size ordering is

\displaystyle       % Size for equations in display mode
\textstyle          % Size for equations in text mode
\scriptstyle        % Size for first sub/superscripts
\scriptscriptstyle  % Size for subsequent sub/superscripts

## Defining new operators

“Without Limits”, i.e. limits on the side, $${\mathop{\mathrm sech}\nolimits}^2 x$$

Plain style (works everywhere including old mathjax)

\newcommand{\sech}{\mathop{\mathrm sech}\nolimits}

amsmath style: (works in AMSMath environments)

\DeclareMathOperator{\sech}{sech}

“With Limits”, i.e. limits underneath $${\mathop{\rm arg\,max}}_{x\to\infty} x$$

plain style:

\newcommand{\sech}{\mathop{\rm sech}\limits}

amsmath style:

\DeclareMathOperator*{\argmin}{arg\,min}

## Include LaTeX in python

Including arbitrary LaTeX in python scripts, jupyter notebooks, Pweave literate documents? Use an ingenious script called using latex_fragment. It was written by that paragon of coding cleanliness, by that tireless crusader for not-dicking-around, me.

from IPython.display import display_latex, display
import latex_fragment
l = latex_fragment.LatexFragment(r'$$x=y$$')
display(l)

Note also that pandoc markdown already includes LaTeX support.

## Make TeX run like a normal unix program

As opposed to the default pointless-error-interaction-mode-that-briefly-thought-that-it-would-be-hip-in-the-80s.

pdflatex -interaction=nonstopmode -halt-on-error

Bloody-minded compile-my-document-at-all-costs-I-don’t-care-how-it-is-broken:

pdflatex -interaction=batchmode

## Putting dates in your drafts

Malaysian LaTeX User Group, Putting Dates in Watermarks

\usepackage{draft watermark}
\usepackage{datetime2}
\SetWatermarkLightness{.9}
\SetWatermarkText{Draft\[email protected]\DTMnow}
\SetWatermarkScale{.3}

This may need

tlmgr install  draftwatermark everypage datetime2 etoolbox tracklang

You can skimp on the date info if you want but then the watermark is looooooong.

## Spacing

Managing spacing is th ewhole reason for existence for LaTeX, so of course it’s fragine, and unintuitive. Here is a comprehensive guide to LaTeX spacing by Werner.

## Death-or-define macro

Death-or-define is how I think of the trick to force a macro definition redefinition even if there is no definition to be redefined – handy if you are rendering latex from some tricky source such as jupyter, or where you don’t have control over the overall document outside your section but don’t care about wreaking havoc on your collaborators; some other poor sap can deal with the macro mutation weirdness.

\providecommand{\foo}{}
\renewcommand{\foo}[1]{bar: #1}

## Algorithms / pseudocode / real code

Convention dictates explaining your algorithm with pseudocode. This remove the problem of the uncertain semantics of particular programming languages, by replacing them with the semantics of no programming language at all.

There is a confusing profusion of options for doing this and they are all, IMO, deeply inadequate, since none of them allow you to typeset higher order functions.

tl;dr: use

• a hip markup such as

• algorithmicx + algpseudocode (a nice default syntax that comes with algorithmicx), or

• program

• inside an algorithm float.

\usepackage{algorithmicx}
\usepackage{algpseudocode}
\usepackage{algorithm}
\begin{algorithm}
\caption{Euclid’s algorithm}
\label{euclid}
\begin{algorithmic}[1] % The argument is the first line number
\Procedure{Euclid}{$$a,b$$} \Comment{The g.c.d. of a and b}
\State $$r\gets a \bmod b$$
\While{$$r\not=0$$} \Comment{We have the answer if r is 0}
\State $$a \gets b$$
\State $$b \gets r$$
\State $$r \gets a \bmod b$$
\EndWhile\label{euclidendwhile}
\State \textbf{return} $$b$$\Comment{The gcd is b}
\EndProcedure
\end{algorithmic}
\end{algorithm}

Are you running minimalist TeX? You’ll need

tlmgr install algorithmicx algorithms

or you can do without algorithms if you do

\usepackage{float}
\newfloat{algorithm}{t}{lop}

Or perhaps you wish to typeset real code in a real language?

minted enables this, allowing colour-highlighted math-enabled code rendering, bringing to LaTeX documents the conveniences that have been available to everyone else for some decades now.

## tlmgr

TeX has a packagemanager, tlmgr.

On debian/ubuntu it’s messed up. In addition to the basic system install, on Debian/Ubuntu you set it up via

tlmgr init-usertree

and possibly

sudo apt-get install xzdec

If that doesn’t work you might need alternate methods such as manual install. My current recommendation is to manually install if you want this; it’s a mess otherwise, since only supports releases for one year (and your ubuntu distro is supported for much longer, so likelyhood is that you will rapidly find you ubutnu-supported texlive no longer compatible with your texlive-supported tlmgr)

## Minimalist TeX

MacTeX wastes your hard disk space if you install the whole gigantic thing. 5Gb for a 1980s typesetting system is cheeky, especially from people who delight in claiming that Microsoft Word is over-engineered, and that they are keeping it serious with their svelte, elegant, professional alternative. But LaTex is not “serious typesetting”, except in the sense that driving a panzer to work is “serious commuting”. (In this metaphor, Microsoft Word is some kind of polka-dotted clown car, as far as mathematics is concerned.)

However! You can install what you need via the tlmgr using the minimal distribution, basictex. Which is still hundreds of megabytes, but we are going to have to take what breaks we can here. Then you take the bare bones setup and install the extra things you need.

For example, to render jupyter notebooks, you’ll need:

tlmgr install \
collectbox \
collection-fontsrecommended \
enumitem \
logreq \
ucs \
xstring

To handle fancier jupyter notebook via ipypublish, we also need

tlmgr install \
latexmk \
translations

To handle biblatex:

tlmgr install biblatex

To handle modern referencing:

tlmgr install placeins \
todonotes \
chngcntr \
doi \
mdframed \
needspace \
cleveref
tlmgr install amsfonts \
amsmath \
lm \
unicode-math \
ifxetex \
ifluatex \
listings  \  # (if the --listings option is used)
fancyvrb \
longtable \
booktabs \
graphicx \
grffile \
xstring \
logreq \
biblatex \  # if biblatex is used
biber \  # if biber is used
fontspec \  # if xelatex or luatex
polyglossia  \  # if xelatex
xecjk \  # if xelatex
bidi   # if xelatex

To handle Anki flashcard rendering:

tlmgr install bbm-macros \
dvipng

To handle latex_fragment:

tlmgr install standalone \
preview

To handle .eps files.

tlmgr install epstopdf

To handle Tom Pollard’s markdown thesis:

tlmgr install truncate \
tocloft \
wallpaper \
morefloats \
sectsty \
siunitx \
threeparttable \
l3packages \
l3kernel \
l3experimental

You keep it up to date in a the obvious way:

tlmgr update --self
tlmgr update --all

The non-obvious thing is that this works for approximately one year, then you are cut off from updates, and have to do a crazy tedious procedure to get another year’s life out of TeX.

## No TeX at all

You just want equations? You don’t need TeX-the-software, just TeX-the-markup. Lots of things can render TeX math.

### Mathjax

Mathjax allows you to put LaTeX equations online easily without bothering with the rest of that bullshit.

### KaTeX

Katex is a faster competitor to Mathjax, but is not yet as widely supported. Additional pain point was that you couldn’t define macros inline which was tedious because macros are ubiquitous in real mathematics work. Katex supports macros since 0.10.rc1. You can either inject them via config, or use the esoteric low-level \gdef to get LaTeX-like behaviour, since \renewcommand exists but doesn’t persist between equations AFAICT, which makes it pointless for anything except trialling individual macro definitions. KaTex support of math markup is not as complete as Mathjax. In particular

• I miss the split environment.
• You can’t put math markup inside \text{}

## Diagrams

How to include SVG in LaTeX. PGFPlots is a native diagramming/plotting package which supports PDF output.

## Editors

• Mathematica can export mathematics to TeX and is a good, if colossally overengineered, editor

• TeXStudio has image drag-n-drop support

• latex-workshop is the VS Code LaTeX extension. It’s slick, although overeager to try and typeset every document you open.

• atom-latex and the atom latex package both bring LaTeX support to the Atom editor though I haven’t yet worked out the difference. The latter supports literate coding so is morally superior.

• texshop is the open-source stalwart editor on e.g. OSX.

• TeXmacs – if you want to integrate a beautiful but obscure and poorly maintained notebook-style interface with your typesetting. Many do. I’d rather use knitr etc for integrating my diagrams and keep the GUIs separate, but this is personal preference.

## Posters

a0poster is popular, as expounded by Morales de Luna, but I secretly feel that it sounds like a nightmare of legacy postscript nonsense and doesn’t even look good. sciposter is a popular a0poster variant.

tikzposter and beamerposter are both highlighted on sharelatex and are truly fugly. Why would anyone who claims to care about design inflict this on the world?