Tag Archives: LaTeX

LaTeX zurück an den Start bringen

Neuer Tag, neue Geschichte, die ich einrichten muss. Heute ist LaTeX auf dem System dran. Wir reden immernoch von Debian Squeeze.

Erster Schritt:

aptitude install texlive-full vim-latexsuite

Ja ich weiß, das ist das Rundum-Sorglos-Paket, was mir auch sehr viel Kram auf die Platte spült, was ich nie nutzen werde. Macht nichts, so ist das halt mit Rundum-Sorglos-Paketen. vim-latexsuite will noch aktiviert werden – wie, musste ich auch erst im Netz wiederfinden. Sehr hilfreich:

man vim-addons

Soweit so gut, als nächstes habe ich dann den Ordner ~/texmf aus meinem Backup zurückgespielt. Einfach mal `texhash` eingeben hat dann allerdings noch nicht dazu geführt, dass das System da was mit anfangen wollte, also wieder Doku wälzen. Ergebnis:

mktexlsr ~/texmf

Führte erstmal dazu, dass ich das gewünschte Dokument kompilieren konnte, aber ich bekam noch Warnungen, dass was mit den Fonts nicht stimmte:

LaTeX Font Info:    Try loading font information for OMS+lmss on input line 110
.
LaTeX Font Info:    No file OMSlmss.fd. on input line 110.

LaTeX Font Warning: Font shape `OMS/lmss/m/n' undefined
(Font)              using `OMS/cmsy/m/n' instead on input line 110.

LaTeX Font Info:    External font `lmex10' loaded for size
(Font)              <10> on input line 110.
LaTeX Font Info:    External font `lmex10' loaded for size
(Font)              <7> on input line 110.
LaTeX Font Info:    External font `lmex10' loaded for size
(Font)              <5> on input line 110.

Die Suche, wie man das beheben kann, war nicht so super aufschlussreich. Ich hab das dann wie folgt beheben können, wo bei ich nicht weiß, ob das jetzt die eleganteste Lösung ist:

usepackage{textcomp}

Alles in allem, ich schau grad mal auf die Uhr, über eine Stunde, um den Kram zusammenzusuchen, um dann festzustellen, dass ich auch noch das Dokument übersetzen muss, weil es in Englisch geschrieben ist. *sigh*

Speicherlimits von MiKTeX erhöhen

Vor einiger Zeit hatte ich im Beitrag Schicke Grafiken in LaTeX mit pgfplots (1) eine elegante Möglichkeit vorgestellt, größere externe Datenmengen in schicke LaTeX-Plots zu verwandeln. Ich mache das immer noch sehr ähnlich, bin aber heute auf ein Problem gestoßen, das auch in der Dokumentation zu pgfplots Erwähnung findet. Im Kapitel »7 Memory and Speed considerations« heißt es dort:

The default settings of most TEX-distributions are quite restrictive, so it may be necessary to adjust them.

Dieses Limit hatte ich nun offenbar auf meinem Notebook erreicht. Die Doku zu pgfplots schlägt vor, die Limits mit Kommandozeilenparametern beim Aufruf von pdflatex zu erhöhen. Das funktionierte in meinem Fall leider nicht, da ich gleichzeitig auch noch die Funktionalität von pgf/pgfplots zum Wiederverwenden bereits kompilierter Grafiken einsetze, Stichwort externalize. Dort wird aus pdflatex heraus noch ein weiterer Lauf von pdflatex gestartet. Jetzt hätte ich diesen Aufruf anpassen und mit dem entsprechenden Parameter versehen können, aber dann wäre ich unter Linux auf die Nase gefallen, wo ich das Dokument ebenfalls kompilieren will.

Im Hinterkopf aus meinen ersten Experimenten mit pgfplots hatte ich aber, dass man diese Memory Limits auch irgendwo global setzen kann. In einem alten Thread in de.comp.text.tex hatte ich schon fast die richtige Lösung gefunden, aber der Tipp initexmf --edit-config-file=latex auf der Kommandozeile und dann im Editor den Wert anpassen funktionierte nicht.

Auf die richtige Spur kam ich dann als ich in C:\Programme\MiKTeX 2.7 eine Suche in den Dateien nach dem alten Limit ausführte. Ich erwartete eigentlich eine Konfigurationsdatei zu finden, aber ich wurde mit der Nase auf die Dokumentation von MiKTeX selbst gestoßen: C:\Programme\MiKTeX\2.7\doc\miktex\miktex.pdf. Da steht in Abschnitt »5.4 Changing TEXMF run-time parameters« nämlich genau, was zu tun ist:

initexmf --edit-config-file=pdflatex

Man beachte den kleinen Unterschied zu oben. ;-)
In der Datei hab ich dann jedenfalls folgendes eingetragen:

main_memory=3000000

Jetzt kompiliert mein Dokument wieder, ich kann fröhlich weiter arbeiten und schreibe mir selbst nochmal ein dreifaches RTFM hinter die Ohren.

Keysigning auf dem ersten Magdeburger Open-Source-Tag

Das sind ja gleich zwei Themen auf einmal… nun ich fang mit dem kürzeren an. Auf dem Magdeburger Open-Source-Tag 2008 wird es ein Keysigning-Event geben, leider ist die Ankündigung sehr versteckt ganz unten im Programm. Das ganze wird von Jens Kubieziel organisiert und der gute Mann bittet um Anmeldung für den Spaß bis zum 8.10. – also bis Mittwoch. Einfach eine (signierte ;-) ) Mail mit dem eigenen Fingerprint an Jens schicken, schon ist man angemeldet. Alles weitere auf der zuvor genannten Seite.

Der Open-Source-Tag selbst findet zum ersten Mal statt und wird von Stefan Schumacher organisiert. Unterschrieben ist das mit »Entwicklung trifft Anwendung«, die Themenschwerpunkte gehen in Richtung Erziehung, Bildung, Publishing. Natürlich sind auch ein paar thematisch anders gelagerte Vorträge im Programm. Jenes liest sich übrigens sehr interessant, man kann sich kaum zwischen den vier Tracks entscheiden.

Ich persönlich werde mir wohl die Vorträge anhören, die in Richtung LaTeX gehen und ich werde natürlich selbst auch auf der Keysigningparty zugegen sein. Dort sind übrigens auch ein paar Leute anwesend, die Punkte für CAcert vergeben können und wollen. ;-)

Schicke Grafiken in LaTeX mit pgfplots (2)

Ich hatte im Beitrag »Schicke Grafiken in LaTeX mit pgfplots (1)« noch ein zweites Beispiel angekündigt. Diesmal zeige ich wie man mit pgfplots eine Grafik mit horizontalen Balken baut. Als Grundlage dient die Grafik aus einem Paper mit dem Titel »Concrete-based constrained layer damping«. Das Original sieht bereits im Original verpixelt aus:

Mit PGF bzw. besser gesagt mit TikZ lässt sich das nachbauen. Box, Anstriche, Beschriftungen und Balken müssen aber alle komplett von Hand erstellt werden.

begin{tikzpicture}[xcomb,thick]
    % die balken
    draw[color=gray,line width=10pt]
        plot coordinates{(0.75,0.5) (1.125,1) (7.5,1.5) (5.4,2)
        (6,2.5) (0.3,3) (0.05,3.5)};
    % box (rechteck) außen rum
    draw (0,0) rectangle (9,4);
    % die achsenbeschriftung links
    foreach y/ytext in {0.5/mild steel, 1/cast iron, 1.5/granite,
        2/polymer concrete, 2.5/lead, 3/6063 aluminium, 3.5/alumina}
        draw (-2pt,y cm) node[anchor=east] {footnotesizeytext};
    % anstriche für die achse unten
    draw (0,0) -- (-2pt,0);
    foreach x in {0,0.75,...,9}
        draw (x cm,0) -- (x cm,-2pt);
    % achsenbeschriftung unten
    foreach x/xtext in {0/0.000, 1.5/0.001, 3/0.002, 4.5/0.003,
        6/0.004, 7.5/0.005, 9/0.006}
        draw (x cm,-2pt) node[below] {footnotesizextext};
end{tikzpicture}

Das Ergebnis ist schon recht ansprechend, es werden die LaTeX-Schriften verwendet und es ist eine saubere Vektorgrafik:

Mit pgfplots muss man nicht alle Einzelheiten selbst nachbauen sondern definiert im Grunde nur noch Labels und Werte.

begin{tikzpicture}
    begin{axis}[
        xbar,
        width=10cm,
        height=6cm,
        ytick={1,...,7},
        yticklabels={%
            mild steel,
            cast iron,
            granite,
            polymer concrete,
            lead,
            6063 aluminium,
            alumina},
        xmin=0,
        xmax=0.006
    ]
    addplot[draw=darkblue,fill=blue!50!white,semithick] coordinates {
        (4.5e-4,    1)
        (7.5e-4,    2)
        (5e-3,      3)
        (3.6e-3,    4)
        (4e-3,      5)
        (2e-4,      6)
        (3e-5,      7)
    };
    end{axis}
end{tikzpicture}

Da ist erstens der Quelltext übersichtlich und verständlich und das Ergebnis überzeugt ebenso:

Mehr Text gibt’s dann ein ander Mal wieder, ich denke die Code-Beispiele und Bildchen sprechen für sich. ;-)

Schicke Grafiken in LaTeX mit pgfplots (1)

Vor einiger Zeit hatte ich im Beitrag Schicke Grafiken aus Matlab in LaTeX Möglichkeiten ausgelotet aus mit Matlab erzeugten Daten schicke Plots in LaTeX zu generieren. Sehr vielversprechend war dort das Paket pgfplots bei dem sich in den letzten Monaten einiges getan hat. Es liegt mittlerweile in Version 1.1 vor und hat neben dem Einbinden externer Datenquellen noch so manches dazugelernt. Ich möchte in diesem und einem folgenden Artikel an zwei Beispielen zeigen, wie man mit pgfplots tolle Ergebnisse produzieren kann.

Zunächst bleiben wir bei Matlab. Aus Matlab heraus ist es vergleichsweise einfach das .table-Format zu erzeugen, aus dem pgfplots Werte einlesen kann. Im einfachsten Fall benutzt man die Funktion dlmwrite. Will man auch noch Header und Kommentarzeilen in das Zwischenformat packen, muss man bisschen mehr Aufwand betreiben, ein entsprechendes Skript ist aber in kurzer Zeit fertiggestellt und bleibt dem geneigten Leser als Hausaufgabe überlassen. ;-) Meine Datei dahl_2008-08-19_05.table beginnt jedenfalls wie folgt:

time datadownsampled datadecimated dataresampled impactdownsampled impactdecimated impactresampled
7.2 0.0042314 0.0031181 0.0017701 7.6889e-005 7.5995e-005 4.3056e-005
7.201 0.010326 0.0048359 0.0049109 8.081e-005 8.0715e-005 8.7923e-005
7.202 0.013369 -0.0069568 -0.006471 7.9993e-005 8.087e-005 7.8394e-005
7.203 -0.011055 -0.010981 -0.011697 6.9248e-005 7.0035e-005 7.2734e-005

Es folgen knapp fünfhundert weitere Zeilen. Wie man bereits am Header sieht ist es empfehlenswert ein Downsampling der zu plottenden Daten vorzusehen, wenn eine Datenreihe mehr als ein paar hundert Elemente enthält. Diese spezielle Datei enthält in der ersten Spalte die Zeit, in den Spalten zwei bis vier ein Signal und in den Spalten fünf bis sieben ein zweites Signal. Für beide Signale wurden je drei verschiedene Downsampling-Verfahren ausgetestet, das jedoch nur nebenbei und zur Erläuterung, für den Plot werde ich nur die Spalten time und datadownsampled nutzen.

In LaTeX-Dokument sollten die notwendigen Pakete geladen sein, in diesem Fall sieht das bei mir so aus:

usepackage{tikz}
usepackage{pgfplots}
pgfplotsset{every axis plot/.append style={very thick}}

Die Einbindung selbst erfolgt wie gewohnt in einer float-Umgebung, die das ganze zentriert und auch noch label und Bildunterschrift bereit stellt. Statt includegraphics fügt man aber einfach eine tikzpicture-Umgebung ein:

begin{figure}[htb]
	centering
	begin{tikzpicture}
		begin{axis}[
			xlabel=Zeit (s),
			ylabel=Kraft (N),
			width=12cm,
			height=8cm]
		addplot[smooth,color=blue]
			table[x=time,y=datadownsampled] {plots/dahl_2008-08-19_05.table};
		end{axis}
	end{tikzpicture}
	caption{Rohdaten Messung texttt{dahl_2008-08-19_05}}
	label{fig:rohdaten_dahl_2008-08-19_05.txt}
end{figure}

Wichtig für das Lesen aus der externen .table-Datei ist die Anweisung table in der Zeile beginnend mit addplot. Das Ergebnis ist eine Vektorgrafik. Die Achsen sind wunderbar mit der im restlichen LaTeX-Dokument verwendeten Schrift beschriftet und zwar immer in der richtigen Größe. Mit extern als .eps oder ähnlichen Formaten eingebundenen Grafiken ist so etwas kaum möglich. Das Ergebnis spricht für sich:

Schicke Grafiken aus Matlab in LaTeX

Ich arbeite mit LaTeX und ich arbeite mit Matlab. Bei meiner letzten Arbeit habe ich die Grafiken in Matlab einfach als .eps-Datei exportiert und unverändert in meine TeX-Dateien eingebunden. Das funktioniert problemlos, sieht aber nicht so schick aus, wie es könnte. Da ich für andere Grafiken das wunderbare Paket PGF und TikZ von Till Tantau benutze, habe ich heute Möglichkeiten ausgelotet wie man mit PGF Matlab-Grafiken schick machen könnte. Gründe dafür werden in der Doku von PGF genügend angeführt:

However, there are a number of reasons why you may wish to invest time and energy into mastering the PGF commands for creating plots:

  • Virtually all plots produced by »external programs« use different fonts from the one used in your document.
  • Even worse, formulas will look totally different, if they can be rendered at all.
  • Line width will usually be too large or too small.
  • Scaling effects upon inclusion can create a mismatch between sizes in the plot and sizes in the text.
  • The automatic grid generated by most programs is mostly distracting.
  • The automatic ticks generated by most programs are cryptic numerics. (Try adding a tick reading »π« at the right point.)
  • Most programs make it very easy to create »chart junk« in a most convenient fashion. All show, no content.
  • Arrows and plot marks will almost never match the arrows used in the rest of the document.

The above list is not exhaustive, unfortunately.

Neben PGF selbst gibt es das Paket pgfplots von Christian Feuersänger, das es leicht macht, einheitliche Plots zu erstellen und sogar logarithmische oder semi-logarithmische Achsen ermöglicht. Leider scheint man bei pgfplots im Gegensatz zu PGF selbst noch keine externen Dateien mit den zu plottenden Werten einbinden zu können. Das Skript matlab2pgfplots.m funktioniert leider nicht mit dem steinalten Matlab 6.1 hier im Institut, also habe ich noch nach weiteren Möglichkeiten gesucht.

Paul Wagenaar hat zwei interessante Tools geschrieben. Mathfig2pgf ist ebenfalls ein Matlab-Skript zur Umwandlung in PGF, funktioniert aber leider auch nicht mit Matlab 6.1. Das zweite Tool ist Eps2pgf und erinnert nicht von ungefähr an PSfrag. Beispiele für Ergebnisse von eps2pgf kann man sich auf fauskes.net ansehen.

Da ich nicht nur ein paar wenige Werte zu plotten habe, bin ich mir noch nicht sicher, welche Variante ich wählen werde. In Frage kommt außerdem noch die LowLevel-Variante mit PGF allein. Ein Beispiel wie man dort externe Datenquellen, z.B. den Output von gnuplot einbindet ist dokumentiert, allerdings muss man sich dann wieder Achsen etc. alles selbst bauen, also wird es wahrscheinlich die Variante mit eps2pgf werden, es sei denn pgfplots wird um die Funktion zur Nutzung externer Datenquellen erweitert. Kommt Zeit, kommt Rat, so dringend ist das Problem ja nicht.

Ausgabeprofil »LaTeX => HTML« für TeXnicCenter

Angenommen ich möchte ein LaTeX-Dokument mit tex4ht in HTML umwandeln und benutze TeXnicCenter als Editor für das eigentliche Dokument. Da liegt es nahe, sich ein passendes Ausgabeprofil zu basteln, so dass man direkt aus TeXnicCenter die gewünschte Ausgabe produzieren kann. Man muss dabei aber aufpassen, was für Optionen man htlatex.exe mitgibt. Die folgenden zwei Screenshots illustrieren funktionierende Einstellungen.

Ideal wäre natürlich, wenn nicht jedesmal ein neuer Tab im Firefox aufgemacht werden würde, wenn man im TeXnicCenter F5 drückt, sondern der alte aktualisiert/ersetzt würde. Wenn da jemand einen Tipp hätte, wie man das realisieren kann, würde ich mich freuen.