Das Beispiel im September zeigt, wie man mit dem Paket siunitx
Zahlen und Einheiten bequem eingeben und im ganzen Dokument einheitlich darstellen kann. Dabei betrachten wir die vom Paket zur Verfügung gestellten Befehle und einige der vielen Optionen, um die Darstellung zu verändern.
Einleitung
Bevor wir uns mit dem Paket beschäftigen, fragen wir uns, wozu es überhaupt notwenig ist, ein solches Paket zu benutzen und seine Befehle zu lernen. Schließlich kann man noch auch einfach $42,2 km$
schreiben. Kann man das? – Mitnichten! Denn die dazugehörige Ausgabe weißt gleich mehrere Fehler auf:
- Nach dem Dezimalkomma hat LaTeX einen kleinen Abstand eingefügt, da es – von englischer Typografie ausgehend – annimmt, es handle sich dabei um eine Werte-Liste wie
$n_1, n_2, n_3$
. - Ein Abstand zwischen Wert und Einheit fehlt dagegen.
- Außerdem sind die Einheitenzeichen kursiv, was den Konventionen widerspricht: Man schreibt Einheiten recto (normal) und Variablen kursiv.
Streng genommen entspricht $42,2 km$
also einer Liste mit den Elementen „Zweiundvierzig“ und „Zwei mal k mal m“.
Die zu einem typografisch und inhaltlich korrektem Ergebnis wie im folgenden Bild gezeigte Eingabe müsste $42{,}2\,\mathrm{km}$
lauten.
Die Ausgabe ist nun korrekt, die Eingabe aber wenig übersichtlich und spätestens, wenn Zehnerpotenzen und kompliziertere Einheiten benötigt werden, auch ziemlich umständlich. Da wäre es doch schön, wenn es ein Paket gäbe, das die Formatierung der Ausgabe übernimmt und die Eingabe vereinfacht. Und genau hier betritt siunitx
die Bühne.
Datei zahlen_und_einheiten.tex
Für das Beispiel legen wir die Datei zahlen_und_einheiten.tex
an und speichern diese ab.
Basics
Wir beginnen das Dokument mit dem Laden von ein paar Paketen.
Das Paket booktabs
laden wir, um die Beispieltabelle schöner gestalten zu können.
\usepackage{booktabs}
siunitx
laden
Nun laden wir das zentrale Paket dieses Beispiels und setzen einige Optionen.
\usepackage{siunitx}
Für das Setzen der Optionen verwenden wir den Befehl \sisetup
, dessen Argument eine kommagetrennte Liste von Optionen ist.
\sisetup{
Mit der ersten Option stellen wir das Paket auf deutsche typografische Konventionen ein. Dadurch wird beispielsweise das Komma als Dezimaltrenner aktiviert.
locale = DE,
Als nächstes stellen wir ein, dass gebrochene Einheiten als Bruch dargestellt werden. Die Darstellung kann u. a. auch auf negative Exponenten (reciprocal
) oder einen Schrägstrich (symbol
) geändert werden.
per-mode = fraction,% | reciprocal | symbol | …
Der Fehler eines Wertes soll als ±-Angabe dargestellt werden, was wir durch diese Option erreichen.
separate-uncertainty,
Mithilfe dieser Option aktivieren wir, dass eine Zehnerpotenz automatisch in einen Einheitenpräfix umgewandelt bzw. sogar auf einen eventuell vorhandenen angerechnet wird.
exponent-to-prefix,
Durch Angabe dieser Option verlangen wir, dass Einheitenpräfixe als zusammengefasste Zehnerpotenz ausgegeben werden.
prefixes-as-symbols = false,
Bezieht sich eine Einheit auf mehrere Werte, kann diese entweder wiederholt (repeat
) werden oder die Werte werden geklammert (brackets
). Mathematisch nicht ganz korrekt kann die Einheit auch nur hinter dem letzen Wert stehen (single
).
Mit list-units
stellen wir Wertelisten und mit range-units
-bereiche ein. Für Werte mit Fehlerangabe verwenden wir multi-part-units
.
list-units = brackets,% | single | repeat range-units = brackets,% | single | repeat multi-part-units = brackets,% | single | repeat
Mithilfe der letzen Optionen richten wir Einheiten (ohne Wertangabe) in Tabellen linksbündig aus.
table-unit-alignment = left,
Ende von \sisetup
}
Nach dieser Vorarbeit können wir ausprobieren, wie man Zahlen und Einheiten eingeben muss und wie sich die gemachten Einstellungen auf die Ausgabe auswirken. Dazu können wir einzelne Optionen auskommentieren.
\begin{document}
Zahlen ohne Einheit
Zunächst betrachten wir einheitenfreie Zahlen, die mit dem Befehl \num
eingegeben werden. Außerdem probieren wir \ang
für Winkel aus.
\section{Zahlen ohne Einheit}
Komma und Punkte werden als Dezimaltrenner akzeptiert und in der Ausgabe je nach Sprache einheitlich dargestellt.
\num{12345,67} oder \num{12345.67}
Eine führende Null können wir weglassen.
\num{,1234567}
Die Makros funktionieren übrigens sowohl im Text- als auch im Mathe-Modus.
$a$ ist \num{1,2} oder $a = \num{1,2}$
Wertebereiche werden mit \numrange
und -listen mit \numlist
angegeben, wobei die Elemente einer Liste mit Semikola getrennt werden.
\numrange{1,234}{5,678} und \numlist{1,2;3,45;6,7}
Die Zehnerpotenz kann einfach nach einem e
angegeben werden. Alternativ könnten wir auch E
, d
oder D
benutzen. Ein +
wird in der Voreinstellung ignoriert.
\num{-1,23e45} und \num{+1,23e45}
+-
beziehungsweise -+
werden in ± respektive ∓ umgewandelt.
\num{+-1,2e-3} oder \num{-+1,2e-3}
Auch Multiplikationen oder Divisionen können innerhalb von \num
angeben werden, allerdings keine Addition oder Subtraktion!
\num{1,2 x 3,4 x 5,6} und \num{1,2 / 3,4}
Ein Fehler kann entweder mit Klammer oder +-
angegeben werden. Wie beim Dezimaltrenner wird die Ausgabe vereinheitlicht. Zum Vergleich können wir die Option separate-uncertainty
(de)aktivieren.
\num{1,23(4)} oder \num{1,23+-0,04}
Der Befehl \num
hat ein optionales Argument, mit dem wird alle Einstellungen auf eine Zahl beschränken können. Dies ist sinnvoll, wenn wir eine Zahl automatisch runden lassen wollen. Dabei müssen wir sowohl die Genauigkeit als aus den Modus angeben.
\num[round-precision = 3, round-mode = places]{1,23456}
Bei Winkeln mit Minuten- und/oder Sekundenangaben, werden diese durch ein Semikolon getrennt, wobei die Angabe immer zwei Semikola enthalten muss. Alternativ kann ein Winkel auch dezimal angegeben werden.
\ang{12} genauer \ang{12;3;} noch genauer \ang{12;3;4} oder \ang{12,05}
Einheiten ohne Wert
Als nächstes experimentieren wir mit „wertlosen“ Einheiten.
Die Einheiten können wir unmittelbar als Buchstaben oder über Makros eingeben, wobei es für gängige Einheiten Abkürzungen gibt. Allerdings funktionieren viele Optionen nur, wenn man eine der beiden letzten Methoden benutzt.
\si{km} oder \si{\km} oder \si{\kilo\meter}
Auch komplexere Einheiten können wir direkt eingeben, wobei wir die einzelnen Einheiten mit einem Punkt voneinander trennen müssen, um einen kleinen Abstand dazwischen zu erhalten. Grundsätzlich sollte aber die Eingabe über Macros bevorzugt werden!
\si{kg.m^2/mA.s^3}
Für Einheiten mit den Potenzen 2 und 3 gibt es die Befehle \square
/\squared
und \cubic
/\cubed
, die entweder vor oder nach der betreffenden Einheit benutzt werden können. Beide Formen werden äquivalent ausgewertet.
Das Präfix „Milli“ im Divisor können wir mit prefixes-as-symbols = false
automatisch in eine Zehnerpotenz umwandeln lassen. Das „Kilo“ in „Kilogramm“ bleibt davon unberührt, weil „kg“ die Basiseinheit ist.
\si{\kg\m\squared\per\milli\A\per\s\cubed} oder \si{\kilogram\meter\squared\per\milli\ampere\per\second\cubed} oder \si{\kg\square\m\per\milli\A\per\cubic\s} oder \si{\kilogram\square\meter\per\milli\ampere\per\cubic\second}
Für höhere Potenzen stehen uns \tothe
bzw. \raiseto
zur Verfügung.
\si{\per\meter\tothe{5}} oder \si{\per\raiseto{5}\meter}
Allen Einheiten unter dem Bruchstrich muss ein \per
vorangestellt werden, sofern nicht die Option sticky-per
gesetzt ist. In diesem Fall bezieht sich \per
auf alle folgenden Einheiten.
Zu Demonstrationszwecken setzen wir die Option hier lokal über das optionale Argument von \si
.
\si{\kg\m\squared\per\milli\A\s\cubed} ungleich \si[sticky-per]{\kg\m\squared\per\milli\A\s\cubed}
Werte mit Einheit
Nun kommen wir zur wichtigsten Funktion, nämlich der Formatierung von Werten mit Einheiten. Dazu verwenden wir den Befehl \SI
, der die Funktionen von \num
und \si
kombiniert.
\section{Zahlen mit Einheiten}
Im ersten Argument können wir alles eingeben, was wir bei \num
kennengelernt haben, und das zweite Argument funktioniert analog zu dem von \si
. Auch hier können wir die Auswirkung von separate-uncertainty
probieren.
\SI{1,234(5)}{\celsius}
Mit der Option exponent-to-prefix
wird die Zehnerpotenz korrekt auf das Präfix „Mega“ angerechnet und „Terra“ ausgegeben
\SI{1,23e6}{\mega\watt}
Auch \SI
hat ein optionales Argument, das wir für lokale Einstellungen benutzen können. Wenn wir beim Runden keine Genauigkeit angeben, wird die Voreinstellung (zwei Stellen) benutzt.
\SI[round-mode = places]{12,34567}{\kJ}
Bereiche und Listen können wir mit \SIrange
bzw. \SIlist
angeben, wobei wir die Auswirkungen der Optionen range-units
bzw. list-units
beobachten können.
\SIrange{1,234}{2,456}{\mega\volt} oder \SIlist{1,2;3,456;7,89}{\micro\angstrom}
Zahlen und Einheiten in Tabellen
Zuletzt wollen wir noch die Funktion betrachten, die es erlaubt, Zahlen (am Dezimaltrenner ausgerichtet) und Einheiten in Tabellen zu schreiben. Dafür stellt siunitx
zwei neue Spaltentype S
und s
zur Verfügung.
\section{Zahlen und Einheiten in Tabellen}
Wir setzen die Tabelle in eine Gleitumgebung und zentrieren sie darin.
\begin{table}[hb] \centering
Die Tabelle soll drei Spalten haben: eine linksausgerichtet Textspalte (l
), eine für Zahlen (S
), wobei wir das Runden der Zahlen einstellen, und eine für Einheiten (s
), in der gebrochene Einheiten mit einem Schrägstrich dargestellt werden sollen.
\begin{tabular}{ l S[round-mode=places] s[per-mode=symbol] }
Mit \toprule
aus dem Paket booktabs
erzeugen wir eine dicke Linie am Anfang der Tabelle. Auf vertikale Linien verzichten wir aus Gründen der besseren Lesbarkeit.
\toprule
In der Kopfzeile müssen wir „Wert“ durch Klammern vor der Auswertung durch siuntix
verbergen.
Name & {Wert} & Einheit \\
Auf die Kopfzeile lassen wir eine dünnere Linie folgen.
\midrule
Nun können wir exemplarisch drei Naturkonstanten eingeben …
Lichtgeschwindigkeit $c$ & 2,99792458e8 & \m\per\s \\ Gravitationskonstante $\gamma$ & 6,67428e-11 & \N\m\squared\per\kg\squared \\ Elementarladung $e$ & 1,602176487e-19 & \coulomb \\
Und die Tabelle dann mit einer dickeren Linie abschließen.
\bottomrule
\end{tabular}
Mit \caption
fügen wir der Tabelle noch eine Beschriftung hinzu.
\caption{Naturkonstanten} % Werte aus Demtröder: Experimentalphysik 1, Berlin 2008. \end{table}
Ende der Datei
\end{document}
Schlussbemerkung
Dieses Beispiel sollte einen kleinen Einblick in die Möglichkeiten von siunitx
geben und dazu einladen, sich mit dem Paket und seinen Funktionen auseinander zu setzen. Die (englische) Anleitung ist sehr gut und leicht verständlich, weswegen im Beispiel nicht auf alle Funktionen im Detail eingegangen wurde. Außerdem wurden die Möglichkeiten, eigene Einheiten- oder Potenz-Makros zu definieren, sowie der Umgang mit Schriftarten nicht weiter berücksichtigt.
Um die Auswirkungen der Optionen unmittelbar vergleichen zu können, hätte man diese auch jeweils über das optionale Argument angeben können, wie das in der Dokumentation der Fall ist, allerdings setzt man in der Praxis die Optionen normalerweise global in der Präambel, weshalb wir das hier auch so gemacht haben.
Die Datei beginnt wie üblich mit der Angabe der Dokumentklasse (FAQ 2), der wir zwei Optionen übergeben:
ngerman
für deutsche Textvariablen und Silbentrennung undparskip
, um einen Absatzabstand statt -einzug einzustellen. Dann laden wir ein paar Standardpakete (FAQ 3 und FAQ 4). Dabei müssen wir beiinputenc
die zur Datei passende Kodierung angeben. Außerdem laden wir das Paketbabel
, dem wir über die Klassenoptionngerman
die gewünschte Sprache bereits mitgeteilt haben (FAQ 5).