Linux und LaTeX im Chemiestudium

Posts tagged ‘chemfig’

Arial in LaTeX/XeLaTeX mit TeXstudio unter GNU/Linux Debian Wheezy

Für das 4. Semester ist unter anderem das Grundpraktikum „Organische Chemie“ vorgesehen. Die Anforderungen an die Protokolle sind – soweit ich das beurteilen kann, ohne ein Protokoll geschrieben zu haben – nicht so hoch wie dies beispielsweise im Praktikum „Physikalische Chemie“ im letzten Semester der Fall war. Hierzu trägt vor allem die Tatsache bei, dass zu den meisten Experimenten keine aufwendige Auswertung notwendig ist. Was an Inhalt weniger anspruchsvoll ist, wird jedoch an Form mehr verlangt.

Zwei Forderungen lauten, dass als Schriftart für den gesamten Text und Strukturformeln Arial zu verwenden ist und dass chemische Strukturformeln mit ChemDraw gezeichnet werden sollen. Letzterer Forderung könnte ich nachkommen, da ich zur Not noch einen Windows-Rechner habe, mit dem ich die Strukturformeln in ChemDraw zeichnen könnte. Das Einbinden der Formeln wäre sicherlich auch irgendwie machbar. Bis jetzt sieht aber mein Plan so aus, dass ich weiterhin Chemfiglink verwende, was mir die gleichzeitige Verwendung mehrerer Rechner und Programme ersparen würde. Spannender ist dagegen die erste Forderung, die für mich eine relativ große Hürde darstellt, da ich bisher nur \LaTeX-Schriftarten verwendet habe.

Arial in \LaTeX mit TeXstudio unter Debian Wheezy. Geht das überhaupt? – Die ernüchternde Antwort, die ich im Internet gefunden habe, war erst einmal: Schwierig, denn Arial ist eine proprietäre TrueType-Schriftart, \LaTeX dagegen arbeitet nur mit OpenType-Schriftarten. Ich habe jedoch die Empfehlung gefunden, statt \LaTeX XeTeX zu verwenden. Dies erstaunte mich zunächst, da ich nicht gewusst hatte, dass XeTeX zu \LaTeX überhaupt kompatibel ist. Um auszuprobieren, ob es tatsächlich so einfach sein kann, installierte ich erstmal XeTeX. Hierzu habe ich unter Debian Wheezy im Paketmanager „aptitude“ nach „xetex“ gesucht. Das Paket „texlive-xetex“, welches als einziges gefunden wurde, habe ich dann installiert. Da ich TeXstudio 2.3 verwende, hatte ich dann das Problem, dass dieses XeTeX nicht standardmäßig unterstützt. Ich habe jedoch diese Seite gefunden und bin nach der Anleitung vorgegangen. Da es nicht auf Anhieb funktionierte, habe ich ein wenig herumprobiert und schließlich folgende Änderungen gegenüber der Standardkonfiguration vorgenommen. Unter dem Menüeintrag „Options“ habe ich „Configure TeXstudio“ gewählt und im Reiter „Commands“ den Eintrag für „PdfLaTeX“ mit dem Befehl
xelatex -interaction=nonstopmode %.tex
ersetzt. Als „Quick Build“-Option verwende ich nach wie vor „PdfLaTeX + Pdf viewer“. Damit wäre erst einmal XeTeX unter TeXstudio zum Laufen gebracht.

Dann brauchte ich Arial. Da ich glücklicherweise über eine Windows-Installation verfüge, habe ich mir einfach die TTF-Dateien aus dem Ordner C:\Windows\Fonts einer Windows-Installation auf einen USB-Stick kopiert und von dort aus auf den Linux-Rechner in den Ordner /usr/share/fonts/truetype/windows übertragen. (Ohne Administratorrechte können die Schriftarten auch in den Ordner /home/~/.fonts installiert werden. Die Tilde steht hierbei für den eigenen Benutzernamen und der Ordner „.fonts“ ist versteckt, sodass gegebenenfalls versteckte Ordner eingeblendet werden müssen, um ihn öffnen zu können. Es kann auch sein, dass der Ordner noch nicht existiert. Dann muss er vorher erstellt werden.)

Nun kam der lustige Teil mit den Kompatibilitätsproblemen der einzelnen Pakete untereinander. Ich fügte zunächst die Zeilen
\usepackage{fontspec}
\setmainfont[Mapping=tex-text, BoldFont={Arial Bold}, ItalicFont={Arial Italic}]{Arial Unicode MS}

hinzu. Danach funktionierte gar nichts mehr. Es hat eine Weile gedauert, die Datei wieder in eine syntaktisch einwandfreie Form zu bringen. Danach musste ich aber feststellen, dass die Mathematikumgebung immer noch in der Standardschriftart war. Dies habe ich mit
\usepackage{unicode-math}
\setmathfont{Arial Unicode MS}
\setmathfont[range=\mathit]{Arial Italic}

zu korrigieren versucht. Die Datei war dann sogar noch setzbar, nur leider mit dem Problem, dass mathematische Symbole wie \sum und \int fehlten und \sqrt{~} nicht mehr lesbar war.
Ich will den Problemlösungsprozess, der zehn Stunden in Anspruch genommen hat, nicht in voller Gänze ausführen. Letztlich waren aber die Hauptverursacher meiner Probleme Pakete, auf die ich nur sehr ungern verzichten will, besonders prominent darunter chemmacros und babel und ein Codierungsproblem, welches ich bis jetzt noch sehr seltsam finde, momentan aber erst einmal umgangen habe: Meine ersten vier Zeilen der Datei lauten
% !TeX encoding = utf8
\documentclass[10pt,a4paper,bibtotocnumbered]{article}
\usepackage[latin1]{inputenc}
\usepackage[margin=2.5cm]{geometry}

Genau, ich zeige einerseits TeX die UTF-8-Codierung an, andererseits aber inputenc die Latin1-Codierung. Die Datei selbst ist UTF-8-codiert. Alle anderen Kombinationen führen dazu, dass entweder die Datei nicht setzbar ist, weil sie Nicht-UTF-8-Zeichen enthält oder die Datei zwar gesetzt wird, die Nicht-ASCII-Zeichen als Kätschen mit Fragezeichen angezeigt werden. Wenn ich irgendwann einmal eine Lösung für dieses Rätsel gefunden haben sollte, werde ich an dieser Stelle darauf verweisen.

Nun zur Mathematik: Da ich ja Arial verwenden soll, fallen amsfonts und amssymb (die ich sonst immer verwendet habe) aus dem Katalog der verwendbaren Pakete heraus. Stattdessen verwende ich nun mathspec, stelle Arial als Schriftart ein und verwende mdsymbol, welches Sans-Serif-Mathematiksymbole zur Verfügung stellt.
% Mathematik
\usepackage{amsmath}
\usepackage{mathspec}
\setmathsfont(Digits,Latin,Greek)[Numbers={Lining,Proportional}]{Arial}
\usepackage{mdsymbol}

Als Naturwissenschaftler verwende ich natürlich noch siunitx, welches ich mit
% siunitx für SI-Einheiten (Befehle \SI \si \num ...)
\usepackage{siunitx}
\sisetup{
output-decimal-marker={,},
per-mode=reciprocal,
exponent-product=\cdot,
retain-explicit-plus,
range-phrase = {\dots},
separate-uncertainty,
list-separator={; },
list-final-separator={; }}

ausgiebig meinen Präferenzen anpasse:

  • output-decimal-marker bestimmt das Dezimaltrennzeichen, als welches wir ja in Deutschland das Komma (und nicht den Punkt) verwenden.
  • per-mode gibt die Art und Weise an, wie der Befehl /per interpretiert wird; im Fall von reciprocal ist es eine hochgestellte -1, Alternativen sind symbol (ein /) und fraction (Darstellung als Bruch mit Einheiten in Zähler und Nenner).
  • exponent-product ist das Zeichen, welches beispielsweise in 1 \cdot 10^{-4} steht; hier bevorzuge ich den Malpunkt gegenüber dem Malkreuz (Standard).
  • retain-explicit-plus ist dafür da, explizit gesetzte positive Vorzeichen zu erhalten, was zum Beispiel für Angaben wie +0.35 \mathrm{V} ganz nützlich ist.
  • range-phrase definiert die Zeichen, die in den Befehlen \SIrange und \numrange vorkommen; hier finde ich die horizontale Ellipse … wesentlich ansprechender als jedes englische oder deutsche Wort.
  • separate-uncertainty stellt die Unsicherheit beispielsweise wie in (4.525 \pm 0.011)\,\mathrm{m} dar, was ich gegenüber der Standardnotation 4.525(11)\,\mathrm{m} einerseits intuitiver und andererseits auch schöner finde.
  • list-separator und list-final-separator geben schließlich an, welche Trennzeichen in \SIlist und \numlist verwendet werden; auch hier finde ich ein Sonderzeichen wie das Semikolon schöner als jedes Wort.

Zu Schriftart, Sprache und Codierung haben sich folgende Zeilen durchgesetzt:
% Sprache, Codierung und Schrift
%\usepackage[ngerman]{babel}
%\usepackage{fontspec}
%\usepackage[T1]{fontenc}
\setmainfont[Mapping=tex-text, BoldFont={Arial Bold}, ItalicFont={Arial Italic}]{Arial Unicode MS}
\renewcommand{\d}{\mathsf{d}}
\usepackage{setspace}\setstretch{1.33} % Zeilenabstand
\parindent=0pt % Einrückung eines neuen Absatzes
\parskip=10pt % Abstand zwischen zwei Absätzen

Auch wenn diese Konfiguration aktuell funktioniert, besteht insgesamt eindeutig Verbesserungsbedarf. Das Paket fontspec konnte ich auskommentieren, da es bereits von mathspec geladen wird. Schlimmer ist, dass ich auf fontenc und babel ganz verzichten musste. Das Paket babel verträgt sich nicht mit dem Befehl
\setmathsfont(Digits,Latin,Greek)[Numbers={Lining,Proportional}]{Arial}
oder genauer der Einbindung griechischer Arial-Buchstaben mit
\setmathsfont(Greek)[Numbers={Lining,Proportional}]{Arial}
und muss somit erstmal aus der Liste meiner Pakete entfernt werden. Ich habe inzwischen gelesen, dass das Problem ist, dass babel das Zeichen ", welches für die Codierung griechischer Buchstaben verwendet wird. Im Zusammenspiel beider Pakete ergeben sich damit endlose Rekursionen, die dazu führen, dass die Dateien auch nach Stunden nicht gesetzt sind. fontenc dagegen überschreibt auf eine mysteriöse Art und Weise die Schriftart, was im Endeffekt dazu führt, dass die PDF nicht in Arial, sondern in Computer Modern ausgegeben wird. Da ich nicht auf fontenc bestehe, habe ich hier erstmal nicht weiter nachgeforscht und mich damit abgegeben, dass es weg ist.

Für Chemie habe ich besonders die Pakete chemstyle, chemmacros und chemfig zu schätzen gelernt, die ich mit
% Chemie
\usepackage{chemstyle}
\usepackage{chemmacros}
\chemsetup[ox]{explicit-sign=true,roman=false}
\chemsetup[phases]{pos=sub}
\usepackage{chemfig}
\setatomsep{0.4cm}
\setcrambond{0.1cm}{}{}
\renewcommand*\printatom[1]{\scriptsize \ensuremath{\mathsf{#1}}}

einbinde. Das Paket chemstyle verwende ich tatsächlich nur, um das mit dem Befeh \standardstate definierte Zeichen, welches den Standardzustand symbolisiert, einzubinden. Das Paket chemmacros ist für chemische Gleichungen sehr nützlich und chemfig ist natürlich für Strukturformeln äußerst elegant zu verwenden und klappt in der Regel besser als externe Formeln einzubinden (auch wenn es einer gewissen Einarbeitung bedarf). Die meisten Probleme machte mir hier leider chemmacros, da es – wie auch mathspec – amsmath lädt, jedoch anscheinend mit anderen Optionen. Die Lösung war hier, chemmacros vor mathspec zu laden. Aber auch dann bekam ich einen netten Fehler
! LaTeX Error: Too many math alphabets used in version normal.
Die einzige Möglichkeit, dieses Problem zu „lösen“, war, die Zeile
\usepackage{mdsymbol}
auszukommentieren – und so waren meine mühsam gefundenen Sans-Serif-Mathematiksymbole auch schon wieder verloren… bis ich diese Seite gefunden habe. Von dort habe ich den Code-Fetzen
% Too many math alphabets used? Not anymore!
\usepackage{etoolbox}
\makeatletter
\def\new@mathgroup{\alloc@8\mathgroup\mathchardef\@cclvi}
\patchcmd{\document@select@group}{\sixt@@n}{\@cclvi}{}{}
\patchcmd{\select@group}{\sixt@@n}{\@cclvi}{}{}
\makeatother

ohne Sinn und Verstand kopiert und voilà – es funktioniert!

Wir sehen: Einige Limitationen hat dieses Vorgehen noch, aber ich habe jetzt immerhin eine Präambel, die mir erlaubt, meine OC-Protokolle in Arial zu schreiben:
% !TeX encoding = utf8
\documentclass[10pt,a4paper,bibtotocnumbered]{article}
\usepackage[latin1]{inputenc}
\usepackage[margin=2.5cm]{geometry}
% Too many math alphabets used? Not anymore!
\usepackage{etoolbox}
\makeatletter
\def\new@mathgroup{\alloc@8\mathgroup\mathchardef\@cclvi}
\patchcmd{\document@select@group}{\sixt@@n}{\@cclvi}{}{}
\patchcmd{\select@group}{\sixt@@n}{\@cclvi}{}{}
\makeatother
% Chemie
\usepackage{chemstyle}
\usepackage{chemmacros}
\chemsetup[ox]{explicit-sign=true,roman=false}
\chemsetup[phases]{pos=sub}
\usepackage{chemfig}
\setatomsep{0.4cm}
\setcrambond{0.1cm}{}{}
\renewcommand*\printatom[1]{\scriptsize \ensuremath{\mathsf{#1}}}
% Mathematik
\usepackage{amsmath}
\usepackage{mathspec}
\setmathsfont(Digits,Latin,Greek)[Numbers={Lining,Proportional}]{Arial}
\usepackage{mdsymbol}
% Sprache, Codierung und Schrift
\setmainfont[Mapping=tex-text, BoldFont={Arial Bold}, ItalicFont={Arial Italic}]{Arial Unicode MS}
\renewcommand{\d}{\mathsf{d}}
\usepackage{setspace}\setstretch{1.33} % Zeilenabstand
\parindent=0pt % Einrückung eines neuen Absatzes
\parskip=10pt % Abstand zwischen zwei Absätzen
% siunitx für SI-Einheiten (Befehle \SI \si \num ...)
\usepackage{siunitx}
\sisetup{
output-decimal-marker={,},
per-mode=reciprocal,
exponent-product=\cdot,
retain-explicit-plus,
range-phrase = {\dots},
separate-uncertainty,
list-separator={; },
list-final-separator={; }}
\begin{document}
Dieser Text ist in Arial und Mathe jetzt auch:
\begin{align}
\sum\limits_{i=0}^n i = \frac {i(i+1)} 2
\end{align}
\end{document}