Linux und LaTeX im Chemiestudium

Nachdem ich die schier unendlich große Hürde, Arial in \LaTeX zu verwenden, überwunden hatte, ging es nun um den Inhalt des Protokolls. Hierzu wollte ich etwas bei SciFinder recherchieren. Mein Uni-Account für SciFinder funktioniert allerdings nur aus dem Universitätrechennetz heraus. Da ich gerade zu Hause war, brauchte ich also eine VPN-Verbindung. Natürlich funktioniert SciFinder nur mit aktiviertem JavaScript, sodass eine WebVPN-Verbindung der Universität nicht ausreicht. Es ist eine Verbindung über einen VPN-Client erforderlich.

Ich habe also unter Uni-Seite beide Versionen des VPN-Clients für Linux heruntergeladen, beide ausprobiert, aber nicht zum Laufen bringen können. Im Netz auf der Suche nach neueren Versionen fand ich heraus, dass das Debian-Paket vpnc es genauso tut. Ich installierte es mit aptitude, holte mir von der Uni-Seite die PCF-Datei, ließ mit
sudo pcf2vpnc uni-leipzig-vpn_cisco_windows_macos.pcf /etc/vpnc.conf
die Konfigurationsdatei in eine für vpnc lesbare Datei umwandeln, editierte diese Datei mit
sudo mousepad /etc/vpnc.conf
eine Datei, wobei ich die Zeilen
# Xauth username <your username>
# Xauth password <your password>

ihrer Kommentarzeichen berauchte und <your username> mit meiner Uni-Mail-Adresse sowie <your password> mit dem dazugehörigen Passwort ersetzte. Es fehlte noch
sudo chmod 600 /etc/vpnc.conf,
um die Datei vor unberechtigtem Zugriff zu schützen (was unwahrscheinlich ist, da mein komplettes Betriebssystem verschlüsselt ist, aber man kann ja nie wissen). Mit
sudo vpnc
hatte ich dann meine VPN-Verbindung und konnte recherchieren.

Advertisements

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}

Ich, Toshiki Ishii, studiere seit Herbst 2012 an der Universität Leipzig Chemie (jetzt im 4. Semester). Mein großes Vorwissen zu Beginn des Studiums nutzte ich, um die ersten Vorlesungen dazu zu zweckentfremden, das Mitschreiben am Computer zu lernen – um das zu einer echten Herausforderung zu machen, wählte ich dazu das Satzsystem LaTeXwiki, mit welchem ich zu diesem Zeitpunkt nur wenig Erfahrung hatte. Entsprechend bedurfte es einer Recherche und Nacharbeit, die ersten Mitschriften zunächst in eine syntaktisch korrekte und dann später in eine lesbare, ästhetisch akzeptable Form zu bringen. Aufgrund des hohen Aufwandes schaffte es dabei nur eine Mitschrift in das Endstadium.

Meine Kenntnisse konnte ich dann im zweiten Semester weiter verbessern. Die Mitschriften hatten von Anfang an eine höhere Qualität und weniger Fehler. Außerdem wurden in dieser Zeit die ersten Protokolle geschrieben. Insbesondere das 76-seitige Protokoll zum Praktikum „Instrumentelle Analytik“ wäre ohne diesen Kenntnisstand innerhalb der 7-Tage-Frist nicht zu bewerkstelligen gewesen. Extra für dieses Projekt schrieb ich mir noch ein Programm, mit dem ich Diagramme mit Datenpunkten leichter in das LaTeX-Paket TikZwiki übernehmen konnte. Dieses verbesserte ich dann bei mehreren Gelegenheiten, zuletzt im Praktikum „Physikalische Chemie“.

Im 3. Semester bin ich dann auf die Grenzen des Machbaren gestoßen. Das Mitschreiben in LaTeX gab ich in der Vorlesung „Organische Chemie“ nach wenigen Tagen auf – das Übernehmen aller Strukturformeln und Skizzen in einer druckreifen Form wäre in der Kürze der Zeit hier einfach nicht möglich gewesen und eine Einbindung aller Grafiken erschien mir zu aufwendig. Da ich nachträglich gebeten wurde, auch aus dieser Vorlesung meine Notizen zur Verfügung zu stellen, habe ich mich dann mit dem Scannen und der nachträglichen verlustbehafteten Datenreduktion meiner eingescannten Mitschriften beschäftigt.

Angesichts der Stunden, die ich über das Semester verteilt allein mit dieser Aufgabe verbracht hatte, wollte ich in den Semesterferien ein Programm schreiben, mit dem sich dieser Prozess automatisieren ließe. Die Aufgabe erschien zunächst sehr reizvoll und ich hatte viele Ideen zur Umsetzung. Die ersten Testläufe waren dann aber doch eher ernüchternd. Ich bin zu dem Schluss gekommen, dass diese Aufgabe in der Kürze der Semesterferien nicht zu schaffen wäre und dass es auch unverhältnismäßig wäre, diese Menge an Arbeit in das Projekt zu stecken. Stattdessen entschied ich mich, ein Convertible Netbook zuzulegen, mit dem ich dann handschriftliche Notizen direkt in einem Vektorformat aufzeichnen wollte. Auf meiner Suche nach einem Programm, das Vektorgrafiken als TikZ-Code exportiert, bin ich dann jedoch nicht fündig geworden, sodass ich in der letztne Woche der Semesterferien daran machte, mir selbst ein solches Programm zu schreiben. Nach ersten Testläufen war ich von der schlechten Lesbarkeit insbesondere chemischer Strukturformeln sehr enttäuscht, sodass ich kurzerhand einen QnD-Chemiemodus einfügte. Dieser ist momentan noch so umständlich zu bedienen, dass ich ihn noch einmal werde überarbeiten müssen, bevor ich damit wirklich glücklich werden kann. Erste Gedanken für eine einfache und (hoffentlich) intuitive Oberfläche habe ich jedoch bereits, sodass ich, so mich nicht Quelltextfehler stundenlang verfolgen, die Oberfläche im Laufe des Tages in eine nutzbare Form werde bringen können.

Warum fange ich jetzt mit diesem Blog an? – Weil ich festgestellt habe, dass ich es mir zeitlich nicht leisten kann, keinen zu haben. Klingt paradox, ist aber einfach zu erklären: Ich habe im letzten und auch in diesem Semester immer wieder festgestellt, dass ich mich immer wieder mit den gleichen LaTeX- und Linux-Problemen herumschlage, aber jedes Mal aufs Neue stundenlang eine Lösung recherchieren/finden muss, weil ich bereits wieder vergessen habe, wie ich ein Problem in der Vergangenheit gelöst habe. Neulich habe ich einen Blog von einem Ubuntu-Nutzer gefunden, dem vielfach für seine hilfreichen Posts gedankt wurde. Darauf antwortete er an einer Stelle schlicht, dass es ihn freue, dass sein Blog anderen Leuten hilfreich wäre, dass er ihn aber hauptsächlich für sein zukünftiges Selbst schreibe. Genau dieses Ziel verfolge ich mit diesem Blog auch.