Die Wiimote


Sowas finde ich sehr interessant:

Head Tracking for Desktop VR Displays using the WiiRemote

Low-Cost Multi-touch Whiteboard using the Wiimote

Automatic Projector Calibration with Embedded Light Sensors

… was sich hier für Kombinationsmöglichkeiten und Anwendungsfälle ergeben finde ich überaus beeindruckend!

Gruß,
Dominik

LaTeX und Fonts


Ich kann sehr gut verstehen, dass der per Default eingesetzte Computer-Modern-Font am Bildschirm zumindest gewöhnungsbedürftig ist. Menschen, die wie ich den Bildschirmtext beim Lesen markieren, ärgern sich bei Verwendung der Standardschrift, dass Umlaute und Sonderzeichen manchmal für eine unschöne Darstellung sorgen.

Glücklicherweise gibt es aber ein paar Pakete, die hier helfen:

  • Gegen die unschöne Markierung hilft das Paket lmodern. Hier muss allerdings das Font-Encoding auf T1 gesetzt werden (\usepackage[T1]{fontenc}).
  • Sollen gänzlich andere Schriften eingesetzt werden, bietet sich diese Übersicht an. Hier wird auch erklärt, wie man diese einsetzt.

Wem das noch nicht genügt, kann mit dem \selectfont- und dem \usefont-Befehl Dinge wie

\fontencoding{T1}%      obsolet bei \usepackage[T1]{fontenc}
\fontfamily{lmr}%       Latin Modern Font
\fontseries{bx}%        b: Fett, x: Extended (breitere Schrift)
\fontshape{n}%          n: normale Form
\fontsize{92}{80}%      92pt Schriftgröße, 80pt Zeilenabstand (zu wenig...)
\selectfont%            Änderungen anwenden
Ganz große Sache\par%   Text
\normalsize\normalfont% und wieder alles auf Anfang...

anstellen. Da bei der Fontwahl allerdings weniger ist mehr gilt, sollte dies wann immer es geht vermieden werden. Ich empfehle dringend bei den Standardpaketen zu bleiben — die darin getroffenen Entscheidungen zu Schriftgrößen, Abständen, etc. sind mit oft guten Gründen getroffen worden, und das meist von Menschen mit mehr Erfahrung ;-)

Grüße
Dominik

Das Geheimnis der LaTeX-Kommandos


Für wiederkehrende Textteile eignen sich Kommandos besonders gut. Wissenswert ist, dass LaTeX (bzw. TeX) bei den Nicht-Primitiven reine Textersetzung vornimmt: \section{eine Überschrift} zum Beispiel kaskadiert sich über \startsection{...} und \addcontentsline{...} irgendwann zu einer Überschrift und gegebenenfalls einem Inhaltsverzeichniseintrag. Der Text »eine Überschrift« wird dabei immer weiter durch gereicht und erscheint dabei natürlich entsprechend formatiert als Überschrift (und evtl. im Inhaltsverzeichnis…). Das Kommando \maketitle ist ein weiteres schönes Beispiel: es nutzt (zumindest bei der Dokumentenklasse article) die zuvor angegebenen \title- und \author-Befehle und generiert daraus ein mehr oder weniger ansprechendes Titelbild.

Manchmal ist es auch sinnvoll, sich eigene Kommandos zu schreiben. Beispielsweise möchte man ein wiederkehrendes Textstück mit immer derselben Formatierung angeben; im Folgenden sei dies der Text »UniversitätBremen«. Der (noch) recht übersichtliche LaTeX-Befehl (bei Verwendung von der Pakete babel und xcolor) dazu wäre dieser:

\textsf{\textbf{\textcolor{red}{Universit"at}Bremen}}

Man stelle sich nun vor, einen längeren Artikel über die Uni zu schreiben und dieses Ungetüm dabei mehrfach zu verwenden. Und kurz vor der Veröffentlichung dieses Artikels sind die Leitfarben Bremens nicht mehr rot/weiß sondern grün/weiß. Zugegeben: das mag ein wenig an den Haaren herbeigezogen sein, aber es verdeutlicht sehr gut das Problem: Um der neuen Farbgebung nachzukommen, müssen sämtliche Vorkommen von red durch green ersetzt werden. Unschön wird es dann, wenn das Rektorat verlauten lässt, dass in Schriftstücken die Universität nur noch als »UniBremen« bezeichnet werden darf. Hier hätte ein globaler Befehl wie unibremen geholfen, den man dann nur hätte anpassen brauchen:

\newcommand{\unibremen}{
  \textsf{\textbf{\textcolor{green}{Uni}Bremen}}
}

Hierbei wird des Kommando \unibremen angelegt. Jede Verwendung im Text wird beim Kompilieren durch \textsf{\textbf{\textcolor{green}{Uni}Bremen}} ersetzt - im Umkehrschluss heißt dies, dass jede Veränderung an diesem Kommando Auswirkungen auf entsprechenden Textstellen hat. Logisch.

In einer weiteren Ausbaustufe möchte man den Befehl parametrisieren, so dass man die Farbe bei der Verwendung angeben kann. \newcommand bietet hierzu an, bis zu neun Parameter anzugeben, deren Werte man mit #1 bis #9 ansprechen kann. Initial muss angegeben werden, wie viele Parameter erwartet werden:

\newcommand{\unibremen}[1]{
  \textsf{\textbf{\textcolor{#1}{Uni}Bremen}}
}

Das Problem hierbei ist aber, dass man immer \unibremen{red} angeben muss. Schön wäre es, wenn red Defaulteinstellung ist. Gut, dies erreicht man hiermit:

\newcommand{\unibremen}[1][red]{
  \textsf{\textbf{\textcolor{#1}{Uni}Bremen}}
}

Damit wird der erste Parameter zu einem optionalem Argument: Änderungen der Farbe müssen also in der Form \unibremen[green] angegeben werden.

Möchte man nun ein bestehendes Kommando verändern, wird es bei Verwendung von \newcommand zu Fehlern kommen. LaTeX bietet hier \renewcommand (mit identischer) Syntax an. Wenn ihr euch eure pi1.cls (hier eine ältere Version) anschaut, erkennt ihr den Einsatz von \renewcommand am Beispiel von \maketitle. Dass dort aber auch \sf verwendet wird, solltet ihr ignorieren;-)

Gruß,
Dominik

Warum setzt LaTeX die Bilder nicht dahin, wo ich das will?


Um diese Frage zu beantworten, muss man wissen, dass TeX Text so setzt, dass dieser »schön« aussieht. Zwar liegt Schönheit im Auge des Betrachters, allerdings gibt es so ein paar typographische Grundregeln, die sich in den 700 Jahren Buchdruck entwickelt haben. Unter anderem gibt es Regeln, die den Weißraum vor und nach Absätzen, Bildern, Tabellen, Überschriften, etc. beschreiben, welche TeX versucht umzusetzen.

Dies führt dann unter Umständen dazu, dass ein Bild nicht an der Stelle eingebunden wird, wo es definiert wird. Angenommen, wir hätten diesen Codeschnipsel:

\begin{figure}
  \centering
  \includegraphics{irgendeinbild}
  \caption{Untertitel}
  \label{fig:zum-referenzieren}
\end{figure}

Fügen wir diesen nun in ein LaTeX-Dokument ein, erscheint das Bild irgendeinbild womöglich an irgend einer Stelle. Primär liegt das an der figure-Umgebung, die zu der Familie der floating-Umgebungen gehört (wie übrigens auch die table-Umgebung) und beim Setzen dann dorthin fließt, wo sie optisch am Besten passt - notfalls auch einzeln auf eine eigene Seite.

In einem ersten Ansatz kann man der figure- (bzw. table-) Umgebung mitteilen, wo das Bild gesetzt werden soll. Dies hat allerdings nur den Charakter eines Vorschlags, denn die typographischen Regeln gelten ja noch immer. An der Zahl bietet LaTeX vier Optionen an, um den Standort der Umgebung vorzuschlagen:

  • t lässt die Umgebung an das obere Ende einer Seite fließen (top),
  • b lässt die Umgebung an das untere Ende einer Seite fließen (bottom),
  • p veranlasst LaTeX das Bild auf eine eigene Seite zu setzen (page), und
  • h schlägt vor, die Umgebung an Ort und Stelle auszugeben (here).

Angewendet werden diese Vorschläge als Optionen der Umgebung und lassen sich (nach absteigender Priorisierung sortiert) auch kombiniert angeben:

\begin{figure}[htbp]
  ...
\end{figure}

Dies liest sich als »versuche das Bild hier zu setzen, wenn das nicht geht soll das Bild an der oberen bzw. unteren Kante der Seite auftauchen; versuche eine eigene Seite zu vermeiden«. Man sollte immer wenigstens p mit angeben, da LaTeX andernfalls ein merkwürdiges Verhalten zeigt.

Daneben gibt des noch den Modifikator !, der eine Priorität noch ein wenig anhebt, aber ansonsten kaum Auswirkungen hat:

\begin{figure}[h!tbp]
  ...
\end{figure}

Dieses Beispiel gibt an, dass der Wunsch sehr groß ist, dass das Bild an Ort und Stelle ausgegeben wird. Dennoch kann man noch immer nicht verhindern, dass es sich verschiebt.

Jetzt bieten sich zwei Möglichkeiten an: Entweder sucht man sich einen Befehl, der das Bild sofort ausgibt, oder man überlegt sich, ob eine floating-Umgebung wirklich notwendig ist. Letzteres gilt dann auf jeden Fall, wenn man eine Bildunterschrift benötigt und darauf mit \ref{...} und ähnlichem darauf verweisen möchte. Ist dies nicht nötig, kann man die figure-Umgebung auch weglassen, was zu diesem Schnipsel der folgenden Form führt:

\begin{center}
  \includegraphics{irgendeinbild}
\end{center}

Soll das Bild noch nicht mal zentriert werden, kann auch die center-Umgebung entfallen:

\includegraphics{irgendeinbild}

Das klappt dann sogar innerhalb einer Tabelle :-)

Die andere Möglichkeit, sich einen Befehl zu suchen, der die figure-Umgebung sofort ausgibt, ist im Paket float enthalten. Dieses definiert die weitere Option H (HERE), womit dieses Konstrukt möglich wird:

\usepackage{float}
...
\begin{figure}[H]
  \centering
  \includegraphics{irgendeinbild}
  \caption{...}
  \label{...}
\end{figure}

Mein Rat ist es aber sich erstens die Dokumentation zu dem Paket (CTAN: macros/latex/contrib/float) durchzulesen, und zweitens die H-Option nur sparsam einzusetzen, da es ein paar Nebeneffekte gibt (siehe Dokumentation).

Zum Schluss habe ich noch einen lesenswerten Link, der dieselbe Aussage trifft wie ich hier, nur kürzer ;-)

Grüße, Dominik

Fachgesprächprotokoll “Praktische Informatik 3”


Heute hatte ich in PI3 mein (Gruppen-) Fachgespräch. Erwartungsgemäß lief alles sehr locker ab: Man setzt sich Christoph gegenüber und darf aus einem Stapel von Programmieraufgaben ein bis zwei Aufgaben ziehen und diese (handschriftlich) niederschreiben.

Diese Programmieraufgaben waren in unserer Gruppe sehr einfach:

  1. Zähle die Buchstaben x, y und z in einem Wort.
  2. Zähle die Vokale in einem Wort.
  3. Ersetze die Vokale in einem Wort durch das Vokal, einem »b« und nochmal dem Vokal.
  4. Nimm aus einer Liste von Zahlen die ersten k ungeraden Elemente.
countXYZ :: String -> Int
countXYZ [] = 0
countXYZ (x:xs) =
  if elem x "xyz"
  then 1 + (countXYZ xs)
  else countXZY

countVowels :: String -> Int
countVowels [] = 0
countVowels (x:xs) =
  if elem x "aeiou"
  then 1 + (countVowels xs)
  else countVowels xs

replaceVowels :: String -> String
replaceVowels [] = []
replaceVowels (x:xs) =
  if elem x "aeiou"
  then [x] ++ "b" ++ [x] ++ (replaceVowels xs)
  else replaceVowels xs

-- replace-/countVowels/countXYZ hätte
-- man auch mit foldl/foldr lösen können

takeOdd :: (Integral a) => Int -> [a] -> [a]
takeOdd k list = take k (filter odd list)
-- Trivial und Fehlerfälle werden durch
-- filter und take abgefangen

Diese Aufgaben mussten nach dem »Programmieren« noch kurz erläutert werden, und wenn es noch (offensichtliche) Verbesserungsvorschläge gab, hat Christoph danach gefragt.

Die Atmosphäre war sehr entspannt und locker, Christoph gibt ein wenig Hilfestellung/Tipps und beantwortet selbstverständlich auch Verständnisfragen zur Aufgabe.

Ich bin in das Fachgespräch mit der Erwartung gegangen, dass für Leute mit 1,0 (bei 100,5% eigentlich 0,7 :-D ) Fragen zur Theorie kommen würden. Dem war aber nicht so…

LaTeX ist doch gar nicht so kompliziert…


Sehr oft höre ich über LaTeX, dass es so unendlich schwierig sei, dass es nicht das tut was es soll, dass das Dokument nicht schön anzusehen ist, und noch viele andere Dinge.

Nun habe ich mich im Rahmen des Software-Projektes sehr intensiv mit LaTeX auseinander gesetzt; intensiver noch, als ich es zuvor schon für Praktische, Theoretische und Technische Informatik getan habe. Und je mehr ich mit damit beschäftige, desto weniger kann ich verstehen, warum einige Menschen Probleme damit haben — nur weil sie nicht verstehen, warum LaTeX so arbeitet, wie es arbeitet.

Darum möchte ich an dieser Stelle (nach und nach) meine Erfahrungen mit LaTeX schildern, Probleme aufzeigen, Tipps geben, Erklärungen formulieren und so weiter. Aufruf: Wer etwas spezielles wissen möchte, mag mir das via Kommentarfunktion mitteilen ;-)

Als erstes möchte ich auf allgemeine Informationsquellen verweisen, insbesondere auf die Quelle nahezu sämtlicher Pakete und dazugehöriger Dokumentationen: CTAN - the Comprehensive TeX Archive Network. Diese Seite ist von besonderem Wert, da sehr oft auf »CTAN: Pfad/zu/Hinweisen« verwiesen wird. Dies gilt allgemein als Abkürzung für »ftp://tug.ctan.org/pub/tex-archive/Pfad/zu/Hinweisen«. Und selbst tug.ctan.org ist dabei nur einer unter vielen Spiegelservern, die weltweit zur Verfügung stehen (genauer gesagt: tug.ctan.org ist der zentrale Server) - DANTE, die Deutschsprachige Anwendervereinigung TeX, stellt z.B. den Server dante.ctan.org.

Der zweite Hinweis gilt vornehmlich den Nutzern unixoider Betriebssysteme (eventuell auch für Windows-User; das habe ich noch nicht getestet): Wenn ich weiß, wie ein Paket heißt, dieses bei mir verfügbar ist und ich nur die Dokumentation lesen möchte, ich mich aber scheue den (oft sehr langsamen) CTAN-Server anzusteuern, so kann ich mir mit dem Befehl texdoc Paketname das Dokumentations-PDF öffnen lassen. Das ist, finde ich, sehr bequem. :-)

Wenn ich also in Zukunft davon rede, dass »weiteres der Dokumentation« zu entnehmen ist, wisst ihr, wo ihr nachsehen könnt.

Als Drittes habe ich eine Reihe von Links zu Dokumenten, die mir bei der täglichen Arbeit mit LaTeX ungemein helfen.

  1. LaTeX-Befehlsreferenz von Jürgen Weinelt. Die vorliegende Referenz ist zwar unvollständig und weil für LaTeX2.09 geschrieben teilweise veraltet, aber sehr nützlich, wenn man zu einem bekannten Befehl Alternativen sucht.
  2. l2tabu ist eine Kurzbeschreibung der Befehle, die man als LaTeX-2-Epsilon-Benutzer tunlichst vermeiden sollte (z.B. ist \textbf{...} anstelle von {\bf ...} zu verwenden, u.v.w.m.)
  3. l2kurz ist eine (nicht ganz so) kurze Einführung in LaTeX. Gut für Anfänger geeignet, aber wenig Informationen für Vielnutzer. Dennoch finden sich hier gute Erläuterungen.
  4. Zum Schluss sei der IRC-Channel empfohlen; hier tummle ich mich ab und an auch mal rum ;-)

Im nächsten Teil werde ich mich mit dem wohl größten Hassthema beschäftigen, das ich so in meiner Umgebung mitbekomme: Warum setzt LaTeX die Bilder nicht dahin, wo ich das will?

Danach will ich auch noch das (Neu-) Definieren von Kommandos und Umgebungen anreißen, das Schreiben von eigenen Paketen und Dokumentklassen beschreiben und sinnvolle Pakete vorstellen. Wenn ihr etwas präferiert, schreibt mir ;-)

Grüße, Dominik