Inhaltsverzeichnis

LaTeX

Mathematik-Umgebungen

Code Bemerkung
\begin{equation}
x^2 = 1
\end{equation} 
  • Abgesetzte Formel mit Nummerierung
\begin{align}
x^2 &= 1\\
y^2 &= 2
\end{align} 
  • mehrere Formeln in einer Umgebung mit Ausrichtung an &-Zeichen
  • jede Zeile nummeriert
  • aus dem Paket amsmath
\begin{equation}
\begin{split}
    a =&{} b + c + d\\
       & + e + f + g
\end{split}
\end{equation}
  • mehrzeilige Formel mit einer Formelnummer
  • Ausrichtung am &-Zeichen
  • kann auch mit align-Umgebung kombiniert werden
  • aus dem Paket amsmath
\begin{equation}
\begin{aligned}
x^2 &= 1\\
y^2 &= 2
\end{aligned}
\end{equation}
  • mehrere Formeln in einer Umgebung mit Ausrichtung an &-Zeichen
  • nur eine Formelnummer
  • aus dem Paket amsmath
\begin{equation}
   f(x) =
   \begin{cases}
     2x^{2} & \text{für} x > 4 \\
     2x^{3} + 4^{2} & \text{für } x < 4  \\
   \end{cases}
\end{equation}
  • Fallunterscheidung mit geschweifter Klammer links von der Fallunterscheidung
  • Ausrichtung an &-Zeichen
  • aus dem Paket amsmath
\begin{equation}
   \begin{rcases}
     2x^{2} & \text{für} x > 4 \\
     2x^{3} + 4^{2} & \text{für } x < 4  \\
   \end{rcases}
   = f(x)
\end{equation}
  • Fallunterscheidung mit geschweifter Klammer rechts von der Fallunterscheidung
  • Ausrichtung an &-Zeichen
  • aus dem Paket mathtools
\begin{equation}
 \vec x = 
   \begin{pmatrix}
     x_1\\
     x_2\\
   \end{pmatrix}
\end{equation}
  • Matrix mit runder Klammer drumherum
  • gut auch zum Darstellen von Vektoren, besser als Verwendung von Array 1)
  • aus dem Paket amsmath
  • für Inline-Mathematik gibt es die Umgebung smallmatrix (aus amsmath) und bsmallmatrix usw. (s.u.) aus dem Paket mathtools

Varianten:

UmgebungDarstellung
\begin{matrix}…ohne Klammerung/Striche a
\begin{pmatrix}…runde Klammern (a)
\begin{Bmatrix}…geschweifte Klammern {a}
\begin{bmatrix}…eckige Klammern [a]
\begin{Vmatrix}…Querstriche |a|
\begin{vmatrix}…Doppelstriche ||a||

Eigene Operatoren oder Funktionen definieren

Braucht man eigene Operatoren oder Funktionsnamen aus mehreren Zeichen, z.B. $lnexp()$, kann man einen Operator mit \DeclareMathOperator in der Präambel deklarieren. Damit wird der Name normal und nicht kursiv wie Variablen dargestellt. Ein Vorteil von \DeclareMathOperator ist außerdem, dass auch die Abstände vor und hinter dem Operator sinnvoll gesetzt werden.

\DeclareMathOperator{\befehl}{Name_mit_mehreren_Zeichen}
\DeclareMathOperator{\lnexp}{lnexp}

4. Gliederungsebene oder ''\subsubsubsection''

Eine 4. oder 5. Gliederungsebene lässt sich durch \paragraph oder \subparagraph erzeugen. Die Befehle \subsubsubsection bzw. \subsubsubsubsection existieren nicht.

Bilder über zwei Spalten

In zweispaltigen Texten können Bilder über beide Spalten dargestellt werden, in dem man figure* statt figure verwendet. Die Option h kann dabei nicht verwendet werden, da das Bild nur oberhalb oder unterhalb der Spalten eingefügt werden kann.

\begin{figure*}[tb]
    \includegraphics{file.eps}
\end{figure*}

Metadaten im PDF

Benutzt man den Flow dvi→ps→pdf und bindet in sein Dokument eps-Grafiken ein, die mit dem epslatex-Terminal von Gnuplot erzeugt wurden, werden die per hyperref oder pdfmark gesetzten Metadaten für das PDF überschrieben, da die Grafiken selbst entsprechende Anweisungen enthalten. Als Abhilfe kann das pdfmark Kommando nach dem ersten Setzen umdefiniert werden:

\special{! /pdfmark where
  {pop} {userdict /pdfmark /cleartomark load put} ifelse
  [ /Author (Norbert Niemand)
    /Title (Sinnvolle Sinnleere im Spannungsfeld der Wirtschaftkrise)
    /Keywords (Stichwort1, Stichwort2)
    /DOCINFO pdfmark
  userdict /pdfmark /cleartomark load put  }

Umlaute oder andere spezielle Zeichen in PDF-Bookmarks

Um Nicht-ASCII-Zeichen in PDF-Bookmarks verwenden zu können muss das hyperref-Paket mit der Option unicode geladen werden:

\usepackage[unicode]{hyperref}

Damit lassen sich Evince-Fehlermeldungen wie

Entity: line 12: parser error : Input is not proper UTF-8, indicate encoding !
Bytes: 0xE4 0x72 0x67 0x65

vermeiden.

Verhalten bei Zeilenumbrüchen

Um das Umbruchverhalten von LaTex etwas lockerer zu machen, soll kein \sloppy mehr verwendet werden (siehe LaTex-Sündenregister). Empfohlen wird sowas:

  \tolerance 1414
  \hbadness 1414
  \emergencystretch 1.5em
  \hfuzz 0.3pt
  \widowpenalty=10000
  \vfuzz \hfuzz
  \raggedbottom 

Verwendet man pdflatex, kann man auch das Paket microtype verwenden:

\usepackage{microtype}

Einige Features können auch mit dem DVI-Output von pdftex verwendet werden (siehe Tabelle 1 der Doku).

Silbentrennung und Umbruch

Es gibt zwei Möglichkeiten Trennungen und Umbrüche zu definieren, lokal für ein einzelnes Wort und global für das gesamte Dokument.

Lokale Trennungsregel

BefehlBedeutung
\-
Trennung nur an der angegebenen Stelle
\mbox{Texttrennung}
Keine Trennung erlauben
~
Leerzeichen, an dem keine Umbruch erfolgen soll (geschütztes Leerzeichen)
\,
halbes Leerzeichen, an dem keine Umbruch erfolgen soll (halbes geschütztes Leerzeichen, z.B. bei Abkürzungen)
"-
Zusätzliche Trennstelle
"=
Bindestrich, der sonstige Trennstellen weiterhin erlaubt
""
ermöglicht Umbruch ohne Bindestrich (z.B. wenn bereits einer verhanden ist)
"~
Bindestrich, an dem nicht getrennt werden soll

Beispiele zur Verwendung

Die letzten vier Befehle benötigen die Pakete ngerman bzw. german

Globale Trennungsregel

\hyphenation{Text-tren-nung Test-string}

Damit hier Worte mit Umlauten erlaubt sind, muss das Paket

\usepackage[T1]{fontenc}

geladen sein.

Die einzelnen Wörter müssen durch Leerzeichnen getrennt werden. Werden Kommas verwendet, erhält man den Fehler Not a letter.

Optionen für ps2pdf

alle Fonts als Subset einbetten, Bilder nicht komprimieren

ps2pdf -dPDFSETTINGS=/prepress -dSubsetFonts=true -dEmbedAllFonts=true -dAutoFilterColorImages=false -dAutoFilterGrayImages=false -dColorImageFilter=/FlateEncode -dGrayImageFilter=/FlateEncode -dMonoImageFilter=/FlateEncode 

Bilder nebeneinander platzieren

Mit dem Paket subcaption lassen sich Bilder oder andere Floats nebeneinander platzieren. Die Pakete subfig und subfloat sollten nicht mehr verwendet werden.

\begin{figure}
  \begin{subfigure}[b]{0.3\textwidth}
    \includegraphics{image1}
    \caption{Image 1}
  \end{subfigure}%
  \begin{subfigure}[b]{0.3\textwidth}
    \includegraphics{image2}
    \caption{Image 2}
  \end{subfigure}
\end{figure}

Abstände zwischen Subfigures

Um die Abstände zwischen zwei Subfigures um eine Länge zu vergrößern, kann ein \hspace eingefügt werden:

\begin{figure}
  \begin{subfigure}[b]{0.3\textwidth}
    \includegraphics{image1}
    \caption{Image 1}
  \end{subfigure}%
  \hspace{1em}
  \begin{subfigure}[b]{0.3\textwidth}
    \includegraphics{image2}
    \caption{Image 2}
  \end{subfigure}
\end{figure}

Weitere Möglichkeiten: gleiche oder maximale Längen

Horizontale Ausrichtung unterschiedlich hoher Subfloats

Damit die Bildunterschriften auch von unterschiedlichen hohen Subfloats gleich ausgerichtet sind, kann man diese Lösung mit \savebox verwenden. Die vertikale Ausrichtung des kleineren Floats wird bestimmt, indem \vfill vor oder nach \includegraphics geschrieben wird (oder an beide Stellen zur Zentrierung).

\documentclass{article}
\usepackage{graphicx}
\usepackage{subcaption}
\newsavebox\mybox
\begin{document}
\begin{figure}
  \savebox{\mybox}{\includegraphics[width=3cm,height=4cm]{example-image-a}}
  \begin{subfigure}{0.45\textwidth}
    \centering        
    \usebox{\mybox}
    \caption{Caption 1}
  \end{subfigure}
  \begin{subfigure}{0.45\textwidth}
    \centering        
    \vbox to \ht\mybox{%
      \includegraphics[width=3cm,height=2cm]{example-image-b}
      \vfill
    }
    \caption{Caption 2}
  \end{subfigure}
  \caption{Main caption}
\end{figure}
\end{document}

Quelle minipage durch subfigure Umgebung ersetzt

Alle Floats zentrieren

Standardmäßig werden alle Floats (Figure, Table, usw.) linkbündig gesetzt. Um nicht in jeder Float-Umgebung \centering schreiben zu müssen, kann man mit

\usepackage{floatrow}

das Paket floatrow laden. Damit werden standardmäßig alle Floats zentriert, andere Ausrichtungen sind über die Paketoptionen möglich. Dies wirkt nicht auf Subfloats, die mit dem subcaption-Paket erstellt wurden. Eine Möglichkeit zu ihrer Zentrierung ist:

\usepackage{xpatch}
\makeatletter
% \subcaption@minipage is the last macro call in \subfigure (and \begin{subfigure})
\xapptocmd{\subcaption@minipage}{\centering}{}{}
\makeatother

Diese und eine andere (aufwändigere) Lösung ausschließlich mit dem Paket floatrow wird hier beschrieben.

Floats positionieren

LaTeX verwendet zur Positionierung von Floats Defaultwerte, die nicht jedem gefallen. Eine mögliche Alternative sind diese Werte:

% Alter some LaTeX defaults for better treatment of figures:
% See p.105 of "TeX Unbound" for suggested values.
% See pp. 199-200 of Lamport's "LaTeX" book for details.
% General parameters, for ALL pages:
\renewcommand{\topfraction}{0.9}	% max fraction of floats at top
\renewcommand{\bottomfraction}{0.8}	% max fraction of floats at bottom
% Parameters for TEXT pages (not float pages):
\setcounter{topnumber}{2}
\setcounter{bottomnumber}{2}
\setcounter{totalnumber}{4}     % 2 may work better
\setcounter{dbltopnumber}{2}    % for 2-column pages
\renewcommand{\dbltopfraction}{0.9}	% fit big float above 2-col. text
\renewcommand{\textfraction}{0.07}	% allow minimal text w. figs
% Parameters for FLOAT pages (not text pages):
\renewcommand{\floatpagefraction}{0.7}	% require fuller float pages
% N.B.: floatpagefraction MUST be less than topfraction !!

Quelle
Details zum Positionierungs-Algorithmus enthält der Artikel How to influence the position of float environments like figure and table in LaTeX?.

Mit dem Paket flafter werden Floats immer nach ihrer Definition (nicht nach der ersten Referenz auf sie!) platziert.

Captions einheitlich positionieren

Mit

\usepackage{floatrow}

werden alle Captions unter die Floats gesetzt, egal, wo sie im Text stehen. Möchte man dies für Tabellen ändern, kann man dies mit

\floatsetup[table]{style=plaintop}

erreichen.

Hängender Einzug von Bild- und Tabellenunterschriften (Captions)

Das KOMA-Paket setzt den Einzug bei Bild- und Tabellenunterschriften (erzeugt mit \caption) automatisch hängend. Ist der Einsatz von KOMA nicht möglich, kann das Paket caption verwendet werden. caption2 sollte nicht verwendet werden, caption in Version 3 ist aktueller.

\usepackage[format=hang]{caption}

Weitere Optionen finden sich in der Dokumentation.

Kurze Bildunterschriften (Captions) im Abbildungsverzeichnis

Um nicht die vollständige Bildunterschrift sondern nur eine kurze Version davon ins Abbildungsverzeichnis zu übernehmen, kann \caption mit einem optionalen Parameter verwendet werden:

\caption[Kurze Version]{Lange Version, die unter dem Bild erscheint}

Das gleiche gilt für Tabellen und Tabellenverzeichnisse.

Tabellen

Automatischer Umbruch

Mit dem Paket tabulary kann eine feste Breite für Tabellen angegeben werden. Ist der Inhalt breiter, wird der Inhalt in den Zellen automatisch umgebrochen.

\usepackage{tabulary}
\begin{tabulary}{0.7\textwidth}{LCL}
   Kurzer Satz & \#  & Ganz langer Satz mit ganz vielen Worten\\
\end{tabulary}  

Manueller Umbruch

Mit dem Paket pbox kann ein manueller Umbruch in einer Tabelle durchgeführt werden:

\usepackage{pbox}
 
\begin{tabular}{ll}
    \pbox{20cm}{Dies ist die Zelle\\ mit dem Umbruch} & zweite Zelle\\
\end{tabular}

Die angegebene Breite ist die Maximalbreite, ist der Inhalt der Zelle kürzer, wird diese kürzere Länge verwendet.

Gedrehte/Vertikale Tabellenüberschriften

Um gedrehte oder vertikale Tabellenüberschriften zu erzeugen, definiert man sich am besten ein Makro \rot:

\usepackage{graphicx}
\usepackage{xparse}
% Rotation: \rot[<angle>][<width>]{<stuff>}
\NewDocumentCommand{\rot}{O{90} O{1em} m}{\makebox[#2][l]{\rotatebox{#1}{#3}}}

Dies wird dann wie folgt benutzt:

\begin{tabular}{cc}
  & \rot{Heading}
  Cell 1& Cell 2\\
\end{tabular}

Tabellen aus CSV-Dateien

Um Tabellen direkt aus CSV-Dateien zu erzeugen, kann das Paket csvsimple benutzt werden. Eine erste Ausgabe kann mit

\usepackage{csvsimple}
\csvautotabular{data.csv}

erzeugt werden. Mit dem \csvreader Befehl, kann die Ausgabe angepasst werden.

\begin{table}
\csvreader[
  before reading=\centering,
  tabular=lc,
  table head=\toprule,
  table foot=\bottomrule]
  {data.csv}{}
  {\csvcoli & \csvcolii}
\end{table}

In Zusammenarbeit mit dem Paket siunitx und dem Spaltentyp S können Zahlen auch automatisch gerundet werden:

\usepackage{siunitx}
\begin{table}
\csvreader[
  before reading=\centering \sisetup{table-number-alignment=center, table-format=2.1, table-auto-round, table-number-alignment=center},
  tabular=lS,
  table head=\toprule,
  table foot=\bottomrule]
  {data.csv}{}
  {\csvcoli & \csvcolii }
\end{table}

Trennzeichen

Standardmäßig wird beim Einlesen ein Komma als Trennzeichen verwendet. Dies kann mit der Option separator angepasst werden:

\csvreader[
  separator = tab]
  {data.csv}{}
  {\csvcoli & \csvcolii }

Mögliche Werte sind:

WertBedeutung
commaKomma ,
semicolonSemikolon ;
tabTabulator
pipesenkrechter Strich, Pipe |

Stimmt die Anzahl der Spalten im Header nicht mit der Anzahl der Datenspalten überein, wird mit \csvreader nur eine leere Tabelle (mit den richtigen Headern, wenn konfiguriert) angezeigt. \csvautotabular zeigt die fehlerhafte CSV-Datei dagegen korrekt an.

Einzelne Zellen anders ausrichten

Standardmäßig werden alle Zellen in einer Tabelle gleich ausgerichtet. Um einzelne Zellen anders auszurichten, kann man \multicoulmn benutzen:

\begin{tabular}{ll}
Zelle 1 Links & Zelle 2 Links\\
  \multicolumn{1}{c}{Zelle 3 zentriert} & \multicolumn{1}{r}{Zelle 4 rechts}\\
\end{tabular}

Einheiten

Um Einheiten automatisch richtig zu setzen, existieren mehrere Pakete, das empfohlene ist siunitx. Ältere wie units oder siunits sollten nicht mehr verwendet werden.

Beispiele:

Code Bemerkung
\SI{300}{\kelvin}
Zahlenwert mit Einheit
\num{1.2}
Zahlenwert
bei der Eingabe kann sowohl Punkt als auch Komma als Dezimaltrenner verwendet werden, die Ausgabe wird durch die Option output-decimal-marker bestimmt
\si{\kilo\gram}
Nur Einheit

Paketoptionen

Paketoptionen werden global mit \sisetup gesetzt:

\sisetup{
  output-decimal-marker = {,}
}

Lokale Änderungen sind bei den einzelnen Makros möglich:

\num[output-decimal-marker = {,}]{1.3} % Ausgabe: 1,3

Lokale Änderungen können auch innerhalb einer Umgebung mit \sisetup gesetzt werden:

\begin{equation}
  \sisetup{round-mode = places, round-precision = 4}
  y = \num{0.123456}
\end{equation}

Bei Umgebungen, die & zur Ausrichtung benutzen (wie z.B. align oder tabular), wirkt dies allerdings nur bis zum ersten Auftreten von &, da alignment cells TeX Gruppen sind. Mit geschweiften Klammern lässt sich aber eine äußere Gruppe um die Umgebung herum realisieren:

{
  \sisetup{round-mode = places, round-precision = 4}
  \begin{align}
    x &=\num[]{0.123456}\\
    y &= r
  \end{align}
}
Option Bedeutung
output-decimal-marker Dezimaltrennzeichen für die Ausgabe
exponent-product Malzeichen vor dem Exponenten 1x103, standardmäßig \times, Alternative z.B. \cdot
binary-units erlaubt die Verwendung von binären Einheiten wie \giga\byte

Algorithmen

Um Algorithmen im Pseudocode darzustellen, verwende ich im Moment das Paket algorithmicx. Es stellt selber keine Float-Umgebung bereit, diese kommt aus dem Paket algorithm. Um anstelle von „Algorithm 1“ eine deutsche Bezeichnung zu benutzen, wird der gewünschte String als Option übergeben.

\usepackage[Algorithmus]{algorithm} %Paket für die Float-Umgebung algorithm, zeige Algorithmus anstelle von Algorithm
\usepackage{algpseudocode} %Paket für Algorithmen im Pseudocode (Teil von algorithmicx)

Befehlsübersicht

BefehlHinweis
\State $x = 1$
  • Erzeugt neue Zeilennummer
  • nicht vor \For, ForAll, \If, \Procedure (und den entsprechenden \EndXY) verwenden, diese erzeugen automatisch eine eigene Zeile
\Statex $x = 1$
  • Erzeugt keine neue Zeilennummer
  • nicht vor \For, \If, \Procedure (und den entsprechenden \EndXY) verwenden, diese erzeugen automatisch eine eigene Zeile
\For{<bedingung>}
  <text>
\EndFor
\ForAll{<bedingung>}
  <text>
\EndFor
  • \EndFor nicht \EndForAll
\If{<bedingung>}
  \Elsif{<bedingung>}
  \Else
\Endif
  • \ElsIf nicht ElseIf
  • keine Klammer nach Else
\Call{<name>}{<parameter>}
  • Parameter muss angegeben werden, kein Parameter entspricht daher {}
\Procedure{<name>}{<parameter>}
\EndProcedure
  • Parameter muss angegeben werden, kein Parameter entspricht daher {}
\Return
  • kein Rückgabewert möglich
\While{<bedingung>}
<text>
\EndWhile
\Repeat
<text>
\Until{<bedingung>}

Fehler "Do not use float package with floatrow"

Wird das Paket algorithm zusammen mit floatrow benutzt, muss floatrow vor algorithm geladen werden:

\usepackage{floatrow}
\usepackage{algorithm}

Andernfalls kommt es zu folgendem Fehler:

! Package floatrow Error: Do not use float package with floatrow.
(floatrow)                The latter will be skipped.

See the floatrow package documentation for explanation.

Fehler "destination with the same identifier has been already used, duplicate ignored"

Wird das Paket algorithmic bzw. algpseudocode zusammen mit dem Paket hyperref benutzt, muss hyperref zuerst geladen werden

\usepackage{hyperref}
\usepackage{algpseudocode}

und der Zähler umdefiniert werden:

\makeatletter
\newcounter{algorithmicH}% New algorithmic-like hyperref counter
\let\oldalgorithmic\algorithmic
\renewcommand{\algorithmic}{%
  \stepcounter{algorithmicH}% Step counter
  \oldalgorithmic}% Do what was always done with algorithmic environment
\renewcommand{\theHALG@line}{ALG@line.\thealgorithmicH.\arabic{ALG@line}}
\makeatother

Quelle
Andernfalls stimmen die Links nicht und es erscheint diese Warnung:

pdfTeX warning (ext4): destination with the same identifier 
(name{ALG@line.2}) has been already used, duplicate ignored

Quellcode

Quellcode lässt sich in Latex mit dem Paket listing einbinden. Dabei wird auch ein Syntaxhighlighting durchgeführt.

\usepackage{listings} %used to include listings
\lstloadlanguages{C++}
\lstset{numbers=left, language=C++, showstringspaces=false} %show line numbers, do not show whitespace as symbol

Der Code kann auch aus externen Dateien eingefügt werden:

\lstinputlisting{somefile.cpp}

Unterschiedliche Schriftgrößen in \lstinline und \lstinputlisting

Wenn man unterschiedliche Schriftgrößen in Listings in \lstinputlisting und \lstinline verwenden möchte, kann man die Schriftgröße von \lstinline so verändern:

\makeatletter
  \lst@AddToHook{TextStyle}{\let\lst@basicstyle\normalsize\ttfamily}
\makeatother

Die Schriftgröße von \lstinputlisting wird regulär über \lstset gesetzt.

TODOs und Anmerkungen

TODOs und Anmerkungen lassen sich mit dem Paket todonotes setzen:

\usepackage{todonotes} 
\todo{Note in box on border of the page}
\todo[inline]{Note highlighted in text}

Mit der Packetoption disable wird das Erzeugen der Anmerkung deaktiviert, z.B. für die Erzeugung des fertigen Dokuments.

\usepackage[disable]{todonotes} 

Für längere Texte sind außerdem die Befehle

\listoftodos %create list of TODOS
\todototoc %add list of TODOs to TOC

nützlich, die eine Liste der TODOs erstellen und sie dem Inhaltsverzeichnis hinzufügen.

Aufzählungen oder Gleichungen in den Anmerkungen

Für Aufzählungen oder Gleichungen in den Anmerkungen muss die Option caption gesetzt sein:

\todo[caption={Liste mit Punkten}]{
  \begin{itemize}
    \item Punkt 1
    \item Punkt 2
  \end{itemize}
}
\todo[caption={Gleichung}]{
  \begin{equation}
    a + b
  \end{equation}
}

Die Option inline kann, aber muss nicht gesetzt sein.

Floats mit Kommentaren versehen

Um Floats, wie z.B. die figure-Umgebung mit Kommentaren versehen zu können, muss die Option inline gesetzt werden:

\begin{figure}
\includegraphics{example-image-a}
\caption{test caption}
\todo[inline]{testing todo note}
\end{figure}

Andernfalls kommt des zu folgendem Fehler:

! LaTeX Error: Float(s) lost.

Eine andere Möglichkeit ist die Redefinition von \todo mit \marginnote wie im folgenden Abschnitt beschrieben.

Align-Umgebung kommentieren

Um Gleichungen in einer Align-Umgebung zu kommentieren, kann der Befehl \todo mit \marginnote aus dem Paket marginnote umdefinert werden:

\makeatletter
\if@todonotes@disabled%
\else
\renewcommand{\@todonotes@drawMarginNoteWithLine}{%
\begin{tikzpicture}[remember picture, overlay, baseline=-0.75ex]%
    \node [coordinate] (inText) {};%
\end{tikzpicture}%
\marginnote[{% Draw note in left margin
    \@todonotes@drawMarginNote%
    \@todonotes@drawLineToLeftMargin%
}]{% Draw note in right margin
    \@todonotes@drawMarginNote%
    \@todonotes@drawLineToRightMargin%
}%
}
\fi
\makeatother

Quelle, erweitert so dass die Option disable funktioniert

Diese Umdefinition kann Probleme verursachen, z.B. werden mehrere TODOs in der selben Zeile aufeinander gesetzt und sind dann nicht mehr sichtbar 2). Außerdem wird für die korrekte Positionierung der Verbindungsstriche zwischen Text und TODO ein weiterer pdflatex-Lauf benötigt. Dies wird jedoch nicht durch „LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right. “ angezeigt, sodass Latexmk oder andere automatische Lösungen einen Lauf zu wenig ausführen. Weitere mögliche Probleme werden in der marginnote-Doku, Abschnitt „Known Problems“ genannt.

Leerzeichen nach eingefügtem Text mit \input

Texte aus anderen Dateien lassen sich mit \input einfügen. Steht ein Zeilenumbruch am Ende, wird im Dokument ein Leerzeichen daraus. Bei längeren Texten ist das unkritisch, will man nur einzelne kürzere Passagen einbinden, kann man mit \unskip das Leerzeichen vermeiden. Am einfachsten definiert man sich ein eigenes Kommando dafür:

\newcommand{\myinput}[1]{\input{#1}\unskip

KOMA-Script: You've used obsolete option XY

Warnung wie diese weisen auf veralte Optionen von KOMA hin:

Class scrbook Warning: You've used obsolete option `liststotoc'.
(scrbook)              Usage of this option indicates an old document and
(scrbook)              changes compatibility level using
(scrbook)              `listof=totoc,version=first'.
(scrbook)              If you don't want this, you should simply replace
(scrbook)              usage of option `liststotoc' by `listof=totoc'.

Eine Übersicht über obsolete Optionen und ihre neuen Entsprechungen findet sich in der KOMA-Doku (via Wayback Machine)

KOMA-Script: Warnung "\float@addtolists detected!"

Eine Warnung im Zusammenspiel von KOMA mit älteren Paketen wie float, floatrow oder listings wie diese hier

Class scrreprt Warning: \float@addtolists detected!
(scrreprt)              You should use the features of package `tocbasic'
(scrreprt)              instead of \float@addtolists.
(scrreprt)              Support for \float@addtolists may be removed from
(scrreprt)              `scrreprt' soon .

lässt sich durch ein Laden des Pakets scrhack

\usepackage{scrhack} %used to avoid warnings with older packages like listings, floatrow, float

vor dem Laden des entsprechenden Pakets vermeiden.

LaTeX-Befehl für Symbol XY

Wer den LaTeX-Befehl für ein bestimmtes Symbol sucht, kann es in einer Symbolliste, z.B. in diesemsehr umfangreichen PDF (>160 Seiten) oder thematisch geordnet suchen, oder zeichnen und automatisch erkennen lassen.

Einheitlich formatierte Referenzen

Möchte man alle Referenzen einheitlich formatieren und den Verweistext (z.B. Abbildung, Gleichung, etc.) nicht manuell vor jede Referenzierung mit /ref{labelname} schreiben, kann man das Paket cleveref benutzen:

\usepackage{cleveref}

Im Gegensatz zu dem Paket prettyref müssen die Marker keinen Formatidentifier wie eqn:Bild1 enthalten. Der Typ wird automatisch bestimmt. Außerdem werden mehrere Marker in einer Referenz unterstützt. Hier ein Beispiel für Abbildungen (und ngerman als Sprachoption in documentclass), andere Typen (und Sprachen) funktionieren analog.

Code Darstellung im Dokument
\cref{Bild1}
Abbildung 1
\cref{Bild1,Bild2,Bild3}

keine Leerzeichen zwischen den Kommas

Abbildungen 1 bis 3
\cref{Bild1,Bild2,Bild3,,Bild5}

keine Leerzeichen zwischen den Kommas

Abbildungen 1 bis 3 und 5
\labelcref{Bild1,Bild2,Bild3,,Bild5

keine Leerzeichen zwischen den Kommas

1 bis 3 und 5
\crefrange{Bild1}{Bild5}
Abbildung 1 bis 5

Referenzen sortieren und zusammenfassen

Um mehrere Verweise ala

\cite{authorC, authorA, authorB}

nicht als „[3,1,2]“ sondern sortiert als „[1,2,3]“ darstellen zulassen, kann das Paket natbib mit der Option sort verwendet werden:

\usepackage[numeric, sort]{natbib}

Mit der Option sort&compress, werden die Referenzen zu „[1-3]“ zusammengefasst:

\usepackage[numeric, sort&compress]{natbib}

Eine Alternative, falls natbib nicht verwendet werden kann/soll, ist das Paket cite:

\usepackage{cite}

Wird statt bibtex das modernere biblatex verwendet, kann das gleiche Ergebnis durch einen Bibliografie-Stil wie numeric-comp oder alphabetic-comp erzielt werden:

\usepackage[style=numeric-comp]{biblatex} 

Glossare erzeugen

Um Glossare zu erzeugen, existiert das Paket glossaries. Das Paket glossary ist veraltet und sollte nicht mehr verwendet werden.

%Paket für Glossare
\usepackage{glossaries} %nach hyperref laden
\makeglossaries
\loadglsentries{glossar} %muss nach makeglossaries stehen

Mit \loadglsentries{glossar} werden die Einträge aus Datei glossar.tex geladen. Die Überschrift des Glossars wird übersetzt, wenn babel geladen ist und die Sprache als Option der Dokumentenklasse gesetzt ist:

\usepackage[ngerman]{babel}
\usepackage{glossaries}
\documentclass[ngerman]{article}

Nützliche Paketoptionen für glossaries sind:

Option Bedeutung
toc Glossar in Inhaltsverzeichnis aufnehmen
nopostdot Keinen Punkt nach Beschreibung anzeigen
nonumberlist Keine Seitenzahlen anzeigen
nogroupskip Keine Abstände zwischen Gruppen mit verschiedenen Anfangsbuchstaben

Um alle Glossareinträge anzuzeigen, auch wenn auf diese nicht verwiesen wird, kann der Befehl

\glsaddall 

verwendet werden. Er muss im Dokument, nicht in der Präambel verwendet werden.

Automatischer Umbruch in Bibliografie

Um einen automatischen Umbruch von langen Einträgen in der Bibliografie zu erreichen, kann man das Paket ragged2e verwendet werden.

\usepackage[newcommands]{ragged2e}

Im Dokument:

\bibliographystyle{unsrt}
{\raggedright
  \bibliography{\jobname}
}


Das Laden des Pakets kann auch andere Stellen verändern, die \raggedright verwenden, wie zum Beispiel den Titel

Bibliografie auf ungenutzte oder undefinierte Einträge prüfen

Mit dem Werkzeug checkcite lassen sich Bibliografien auf ungenutzte oder undefinierte Einträge prüfen. Als Argument muss die *.aux-Datei des Dokuments angegeben werden:

checkcites text.aux

Zur Zeit wird nur eine *.aux-Datei pro Dokument unterstützt, d.h. Dokumente mit \include werden nicht korrekt geprüft (siehe Bugreport). Als Workaround können temporär alle \include durch \input ersetzt werden.

Bibliografie lokalisieren ("and" durch "und" ersetzen)

Um die Bibliografie auf deutsch zu setzen, können verschiedene alternative Wege benutzt werden.

Das Paket germbib (Aktivierung via \usepackage{bibgerm}) ist veraltet und sollte nicht mehr verwendet werden.

Lange Vektorpfeile

Lange Vektorpfeile über Variablen, die aus mehreren Buchstaben bestehen, können mit \vv aus dem Paket esvect erzeugt werden.

\usepackage{esvect}
$\vv{solution}$

Warnung bei veralteten Paketen und Befehlen

Das Paket nag warnt bei veralteten Paketen und Befehlen. Dazu muss

\RequirePackage[l2tabu, orthodox]{nag}

in der ersten Zeile des Dokuments stehen. Die Option orthodox prüft auf häufige Fallen, die aber technisch korrekt sind. Wenn man, weiß was man tut, kann sie auch weg gelassen werden.


Die Ausgabe von nag wird in die Logdatei geschrieben.

Spaltenlängen von zweispaltigem Layout ausgleichen

Um die Spaltenlängen auf der letzten Seite eines Textes mit zweispaltigem Layout auszugleichen, gibt es verschiedene Möglichkeiten:

Debugging

Definition von Makro oder Kommando

Geht beim Aufruf oder der Definition eines Kommandos oder Makros etwas schief, ist der Fehler häufig schwer zu finden. Eine Debuggingmöglichkeit dafür ist das Einschalten des Tracings mit

\tracingcommands=1
\tracingmacros=1

Damit werden zusätzliche Informationen in die *.log-Datei geschrieben.

Overfull \hbox

Die Stelle auf die sich die Warnung Overfull \hbox bezieht, lässt sich gut mit

\showboxdepth=\maxdimen
\showboxbreadth=\maxdimen

oder wenn das zu viel Output produziert

\showboxdepth=5
\showboxbreadth=5

finden. Damit wird eine Repräsentation des Inhalts der \hbox in die *.log-Datei geschrieben. Eine andere Möglichkeit ist das Einschalten einer Markierung mit

\overfullrule=5pt

in der Präambel. Auch eine farbliche Markierung ist möglich. Mit dem Paket showframes lassen sich außerdem die Seitenränder, die durch die zu volle hbox überschritten werden, anzeigen.

Unterschiede zwischen \newline, \linebreak und \\

Die Unterschiede zwischen \newline, \linebreak und \\ werden hier sehr gut beschrieben.

Blindtexte für Minimal Working Example (MWE)

Mit dem Paket blindtext lassen sich Bildtexte erstellen.

BefehlBedeutung
\blindtext
kurzer Blindtext
\Blindtext
längerer Blindtext
\blinddocument
kurzes Blinddokument
\Blinddocument
längeres Blinddokument

Weitere Möglichkeiten wie Blindaufzählungen finden sich in der Paketdoku.

Beispielgrafiken für Minimal working Example (MWE)

Um lauffähige Minimalbeispiele mit Grafiken zu erstellen, können die Grafiken aus dem Paket mwe verwendet werden:

\includegraphics{example-image-a}
\includegraphics{example-image-b}

In der Paketdokumentation werden weitere mögliche Grafiken gezeigt.

Seitenränder anzeigen

Um die Seitenränder anzuzeigen, kann das Paket showframe verwendet werden:

\usepackage{showframe}

Das gleiche kann auch mit der Option showframe des Pakets geometry erreicht werden:

\usepackage[showframe]{geometry}

Rahmen zeichen

Mit dem Befehl \fbox lässt sich ein Rahmen um Texte und Grafiken zeichnen:

\fbox{
  \includegraphics{example-image-a}
  some text
}


Das kann nützlich sein, um Probleme mit Subfigures zu debuggen.

psfrag mit PDFLaTeX

Mit dem Paket psfrag lassen sich Texte in EPS-Grafiken durch beliebige andere Texte (z.B. mit LaTeX gesetzte Formeln) ersetzen. Dazu muss der zu ersetzende Text als echter Klartext, nicht als Kurve, in der Grafik vorhanden sein, hier eine Liste von kompatiblen Programmen. Da psfrag Postscriptbefehle verwendet, die pdflatex nicht kennt, funktioniert die Ersetzung dort nicht und die Warnung „Non-PDF special ignored!“ wird ausgegeben.

Workarounds/Alternativen:

Bewerbungen: Lebenslauf und Anschreiben

Mit dem Paket moderncv lassen sich sehr ansprechende Lebensläufe setzen. Das Anschreiben, das sich damit erzeugen lässt, entspricht jedoch nicht den deutschen Gepflogenheiten. Das Paket koma-moderncvclassic bildet ausschließlich den classic-Stil von moderncv nach, das neuere komacv auch die anderen Stile. Dabei gibt es jedoch Probleme beim Setzen der Abstände zwischen den Sections (Workaround). Außerdem werden die Bullets in Listen nicht farbig gesetzt. Meine Lösung ist daher im Moment moderncv für den Lebenslauf und ein entsprechend angepasstes ''scrlttr2'' für das Anschreiben zu verwenden.

moderncv ist nicht mit biblatex kompatibel. Das war der Hauptgrund für die Entwicklung von koma-moderncvclassic bzw. komacv.

moderncv setzt die PDF-Attribute wie Titel und Autor automatisch. Um die Vorgaben zu ändern, muss \hypersetup innnerhalb von \AfterPreamble gesetzt werden:

\AfterPreamble{\hypersetup{
  pdfauthor={Mein Name},
  pdftitle={Lebenslauf},
}}

C++ setzen

Um den Namen der Programmiersprache C++ schön zu setzen, kann man das folgende Makro benutzen:

\newcommand{\Cpp}{{C\nolinebreak\hspace{-.05em}\raisebox{.4ex}{\tiny\bfseries ++}}\xspace}

Der Befehl \xspace aus dem gleichnamigen Paket verhindert das automatische Entfernen des Leerzeichens nach dem Makro, so dass sowohl \Cpp-Programmierung als auch in \Cpp programmiert mit dem richtigen Abstand zum nachfolgenden Text gesetzt werden.

Links

1)
\begin{equation}
  \vec x = 
     \left(
     \begin{array}
       x_1\\
       x_2\\
     \end{array}
     \right)
\end{equation}
2)
Laut marginnote-Doku ist das ein Feature, kein Bug