Common LaTeX Mistakes
This is a compilation of classic mistakes that I have seen in many LaTeX documents.
Abbreviations
The letters between abbreviations should have half spaces:
z.\,B. d.\,h.
i.e.
is not enough, i. e.
is too much.
Spacing behind Commands
A command has to be ended with a space, LaTeX would otherwise interpret that as belonging to that command:
\LaTeXist \LaTeX ist
The colors tell you that in the first line, the "ist" belongs to the command. That is okay.
The problem is, that the space in front of the "ist" in the second line will
only end the command, but not create a space! The output is "LaTeXist". The
command has to be ended with another method, preferably with an empty token:
{}
:
\LaTeX{} ist
Even if the command \LaTeX
does not take any arguments, you will need braces
here!
Quotation Marks
The correct quotes for German Text are „ and ": 99 and 66. For English text, they are " and ", 66 and 99. With LaTeX, you have several possibilities:
-
Enter the quotes directly. On a German keyboard with Kubuntu they are
Alt-Gr
v
andAlt-Gr
b
{.interpreted-text role="key"} for the German ones, andAlt-Gr
b
andAlt-Gr
{.interpreted-text role="key"}n
for the English ones.On a US International layout, the English ones are on
Alt-Gr
Shift
{.interpreted-text role="key"}[
and]
{.interpreted-text role="key"}. The leading German one has to be entered with the compose key, where you compose"
with,
. -
Use
"
[ and ]{.title-ref}["']{.title-ref}`. This makes the code pretty hard to read, so I would not do that. -
You can work with
\glqq
and\glqq
for the German quotes. The English quotes are without the leadingg
. You have to watch the Spacing behind Commands issue though. For that, I defined myself a German quoting command like so:{.sourceCode .latex} \newcommand[1]{\gqq}{\glqq #1 \grqq}
LaTeX will make \`` and
''English quotes. Additionally, a
"` might become a
diaeresis on the
next letter. See Escaping umlauts.
Overwriting Commands
With \newcommand
, you can define new commands. It could even be a good idea
to create new names for existing commands, wee Semantic
Markup.
It happens that a given name is already taken. The imaginary unit, $\mathrm i$
should be roman, to be able to distinguish it from the index $i$. Since
\mathrm i
is a lot to write and is not semantic, a new command should be
created:
\newcommand{\i}{\mathrm i}
The problem is that the command \i
already exists. It is important to use
another name (\iup
or \ii
). Do not overwrite that command with
\renewcommand
! If the command \i
is needed, it would not exist any more.
Missing commands can be added easily, overwritten commands are lost.
The overwriting is allowed, if it does not change anything with the semantics.
It is allowed to overwrite \vec
to change for bold vectors. It would not be
okay if it was used for something else.
Decimal separator
In German texts, the decimal separator has to be a comma, not a period. The
package siunitx
supports that with the option output-decimal-marker={,}
.
All numbers have to be printed with the command \num{123.45}
\usepackage[output-decimal-marker={,}]{siunitx}
Units
Physical units must be printed in roman (non-italic) font and with a thin space
(\.
) after the number. This works great with the siunitx
package.
eqnarray
Use align
from the amsmath
package instead of eqnarray
. The latter has
wrong spacing and might overwrite the equation number.
Fixed numbers and references
Numbered equations, like equation
, get a number like "(1)". If you refer to
that equation, it might be convenient to just write "(1)" in your text. This
number will change whenever you add another equation before the first one.
One should use \label
to assign an internal name to the equation and refer to
it with \eqref
later on. Other things can be referred to with \ref
.
\section{Feldstärketensor} \label{section:Feldstärketensor} \begin{equation} \label{eq:Bianchi} \nabla^{[\alpha} F^{\beta\gamma]} = 0 \end{equation} % Viel Text, ein anderer Abschnitt vielleicht … Mit der Identität \eqref{eq:Bianchi} aus Abschnitt \ref{section:Feldstärketensor} ...
It might be a good idea to use namespaces for each type of object, like eq:
,
section:
, theorem:
, example:
.
Formula numbers for multiple formulas
If multiple formulas should have the same label (like a system of equations),
one should use the subequations
package:
\begin{subequations} \label{eq:Axiome} \begin{gather} \label{eq:Axiom2} F = m a \\ \label{eq:Axiom3} F_{1,2} = F_{2,1} \end{gather} \end{subequations} Die Newton'schen Axiome \eqref{eq:Axiome} bestehen aus dem zweiten Axiom \eqref{eq:Axiom2} und dem dritten Axiom \eqref{eq:Axiom3}.
Let the equations be numbered with (1a) and (1b). The text will be rendered to:
Die Newton'schen Axiome (1) bestehen aus dem zweiten Axiom (1a) und dem dritten Axiom (1b).
Manual accumulation has the problem that your number will not become a label and that it will not be displayed right next to the formula. So do not do the following:
\begin{equation*} \left. \begin{gathered} F = m a \\ F_{1,2} = F_{2,1} \end{gathered} \right\rbrace \quad \text{(1)} \end{equation*} Die Newton'schen Axiome (1) …
Ordered lists
There are unordered and ordered lists. The former just have a bullet point in front of each element, the latter have numbers in front. The numbers can be Arabic numerals, roman numerals or roman letters. In every case, the numbering should be done automatically.
An ordered list can be created like so:
\begin{enumerate} \item erster Listenpunkt \item zweiter Listenpunkt \end{enumerate}
It will appear like this:
- erster Listenpunkt
- zweiter Listenpunkt
Under no circumstances should one try to number the list by hand. I have seen the following, where each list item of an unordered list got a number like this:
\begin{itemize} \item[a)] erster Listenpunkt \item[b)] zweiter Listenpunkt \end{itemize}
Numbering the points by hand is too much work. It is error prone. It also
invites to refer via "a)" instead of using proper references. Better use
enumerate
right away. If your desired style is not included, try the
paralist
package.
\begin{enumerate}[a)] \item \label{enum:erster} erster Listenpunkt \item zweiter Listenpunkt \end{enumerate} Der Punkt \ref{enum:erster} ist der erste in der Liste.
Semantic markup
LaTeX source code should be written with "What does this mean?" in mind, not with "How should it look in the end?".
A striking example: Headings should be big and bold (and maybe sans-serif). Almost everybody uses the correct command:
\section{Ăśberschrift}
One could also do the following (but should not):
{\large\bf Ăśberschrift}
There are the following problems:
-
The result looks similar, except that it is not a heading. It is big, bold text. If you use the package
hyperref
, it will appear in the PDF table of contents with the correct version. The incorrect version will not get put into the table of contents.If you use
\tableofcontents
, the latter will not show up either. One might think about creating the table of contents by hand ... -
The section number is missing. This could be added manually, but see Fixed numbers and references on why you should not do this.
- In the source code, the heading does not appear as one. TeXMaker offers an outline, which does not pick up the wrong version either.
- Headings cannot be formatted differently at a central spot, because they
are not headings in the first place. If all headings should be without
serifs, you will have to add a
\sffamily
to every single one. -
\bf
is TeX, you should use\bfseries
instead.
One should use commands that show which structure something has, not which appearance.
There are a lot more examples like this:
Implications
A mathematical implication is shown with a $\implies$ arrow. Often, people use
\Rightarrow
$\Rightarrow$, that is too short and does not have enough
spacing. Therefore, you must use the \implies
command. That not only is the
right symbol, but also the correct name in the source code.
With \Rightarrow
:
$$a \Rightarrow b$$
With \implies
:
$$a \implies b$$
The \Longrightarrow
$\Longrightarrow$ is longer, but the spacing does not fit
either:
$$a \Longrightarrow b$$
Equivalence
Similarly, the equivalence is denoted by $\iff$. Some use \Leftrightarrow
$\Leftrightarrow$ or \Longleftrightarrow
$\Longleftrightarrow$. Correct is
\iff
.
Text in math mode
Text within math mode should be roman:
$$F_\text{Schwerkraft}$$
It might be tempting to use \mathrm
instead. It does not display umlauts
correctly and does not show any spacing. \mbox
does not do that, but is not
semantic. One should use \text
.
F_\text{Schwerkraft}
Emphasis
Emphasis on the blackboard is done with underlines, italic and bold are not
possible. LaTeX is able to print italic text, which is the first choice for
simple emphasis. But do not use \textit
. Use \emph
instead, because it is
semantic.
Mathematical proofs
A mathematical proof should be withing the proof
environment from the
amsthm
package:
\begin{proof} … \end{proof}
Please do not use a contraption like this:
\textit{Beweis}. \ \ … \square
TeX instead of LaTeX
Unnumbered equations are done with \[
and \]
in LaTeX. TeX uses $$
on
both sides. If you use LaTeX (with pdflatex
for example), only use the LaTeX
style. Document options like fleqn
do not affect TeX style equations.
Escaping umlauts
Like every other programming language, umlauts and other special characters can cause trouble, if the encoding is not selected properly. It is extremely useful to use UTF-8. The editor has to be set to UTF-8, but LaTeX has to be told as well:
\usepackage[utf8]{inputenc}
With that, umlauts can be entered as such.
Back in the day (or if you have not set it up correctly) the umlauts did not
work right. You can enter a "ĂĽ" with "u
or "u
. This has the minuscule
advantage that your document can be rendered correctly with wrong encodings,
but it is unreadable and breaks spell checking.
Nested lists
If two lists are nested, i. e. a list is used as a list element, you have to
fill the line with \hfill
.
Without \hfill
:
\begin{description} \item[objektorientiert] \begin{itemize} \item Java \item C++ \end{itemize} \item[Templatesprache] \begin{itemize} \item PHP \item Jinja 2 \end{itemize} \end{description}
It looks the following:
With \hfill
:
\begin{description} \item[objektorientiert]\hfill \begin{itemize} \item Java \item C++ \end{itemize} \item[Templatesprache]\hfill \begin{itemize} \item PHP \item Jinja 2 \end{itemize} \end{description}
The same principle applies if a list should be first in a theorem or a proof:
\begin{proof}\hfill \begin{itemize} \item … \end{itemize} \end{proof}
Line break after align
The last line of an align
or gather
environment must not be ended with
\\
. This is a line separator, not a line ending. Correct is the following:
\begin{gather*} x = 1 \\ y = 0 \\ z = 1 \end{gather*}
Spacing after a period
If you use "english spacing", that is more spacing between sentences, you have
to be careful when using a full stop (".") within the sentence. The space
behind that has to be marked as an inter-sentence-space with \@
like so:
This is a period.\@ within a sentence. That was not.
Too large parentheses, spacing
With the commath
package, you get a simple \del
command which will create
\left(
and \right)
for you. It is tempting to use this for things like
\del x
where you try to get $(x)$. However, there will be too much space in
front of the $($ when you do this that way:
$$f(x) \quad f \left( x \right)$$
The first is f(x)
, the latter is f \left( x \right)
.
So just use \left(
or \del
if you need bigger parentheses.