Dateien aus verschlüsseltem Home-Verzeichnis kopieren und löschen

Ich habe mir kürzlich eine neue Festplatte gekauft und darauf ein neues Ubuntu eingerichtet. Nun möchte ich die Daten von meiner alten Festplatte herunterladen und auf die neue Festplatte spielen. Das Problem ist allerdings, dass ich mein Home-Verzeichnis auf der alten Festplatte mit Hilfe von eCryptfs verschlüsselt hatte. In diesem Artikel erkläre ich schrittweise, wie man dennoch die Daten aus einem verschlüsselten Verzeichnis verschieben, kopieren und löschen kann.

  1. Zunächst ist es hilfreich, wenn man sein altes Login-Passwort griffbereit hat. Alternative kann man auch das eCryptfs Mount-Passwort verwenden. Das hat man sich im Optimalfall nach der Installation notiert, oder zu einem späteren Zeitpunkt mit Hilfe des folgenden Befehls angeschaut:

    ecryptfs-unwrap-passphrase
  2. Im Anschluss muss man das Laufwerk/Speichermedium mounten, auf dem sich das verschlüsselte Verzeichnis befindet. Tipp: interne Festplatten und deren Partitionen sind nicht automatisch gemountet – auch nicht, wenn das Symbol in der Seitenleiste von Ubuntu angezeigt wird. In dem Falle muss man einfach einmal auf das Symbol klicken.
  3. Daraufhin gibt man im Terminal einen der beiden folgenden Befehle ein (mit Root-Rechten!; siehe auch UbuntuUsers Forum):

    # Verzeichnis nur mit Leserechten einbinden
    sudo ecryptfs-recover-private
     
    # Verzeichnis mit Schreibrechten einbinden
    # in "man ecryptfs-recover-private" ist die Option --rw etwas versteckt genannt
    sudo ecryptfs-recover-private --rw

    eCryptfs durchsucht nun alle gemounteten Medien nach eCryptfs-verschlüsselten Verzeichnissen. Das kann eine Weile dauern.

    INFO: Searching for encrypted private directories (this might take a while)…

  4. Hat eCryptfs die Suche beendet, wird für jedes gefundene Verzeichnis gefragt, ob es eingebunden werden soll. Dabei sollte man beachten, dass auch das Verzeichnis des angemeldeten Nutzers gefunden wird (in meinem Falle also nicht nur das alte, sondern auch das neue Home-Verzeichnis).

    INFO: Found [/media/neuerusername/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/.ecryptfs/alterusername/.Private].

    Nun wird man zunächst nach seinem Login-Passwort gefragt:

    INFO: Found your wrapped-passphrase
    Do you know your LOGIN passphrase? [Y/n]

    Falls man dieses nicht kennt, wird man nach dem (meist 32-stelligen) Mount-Passwort gefragt:

    INFO: To recover this directory, you MUST have your original MOUNT passphrase.
    INFO: When you first setup your encrypted private directory, you were told to record
    INFO: your MOUNT passphrase.
    INFO: It should be 32 characters long, consisting of [0-9] and [a-f].

    Enter your MOUNT passphrase:

  5. Hat man eines der beiden Passwörter korrekt eingegeben, so wird das Verzeichnis innerhalb des Ordners /tmp eingehängt:

    INFO: Success! Private data mounted at [/tmp/ecryptfs.PW48rluR].

  6. Nun kann man das Verzeichnis im Datei-Browser öffnen – entweder durch klicken, oder durch den Start von nautilus (mit dem Verzeichnis als Parameter) aus dem Terminal heraus:

    nautilus /tmp/ecryptfs.PW48rluR
  7. Hinweis: Sollten sich in dem Verzeichnis nur Dateien befinden, die z.B. mit ECRYPTFS_FNEK_ENCRYPTED. beginnen, hat man das Mount-Passwort sehr wahrscheinlich falsch eingegeben.

Drucker installieren, der an den USB-Port einer FRITZ!Box angeschlossen ist

Meinen Drucker (Brother HL-5270DN) habe ich direkt an den USB-Anschluss meines WLAN-Routers (AVM FRITZ!Box Fon WLAN 7270) angeschlossen. Zum einen musste ich dadurch keine Kabel verlegen, zum anderen kann ich den Drucker von jedem Rechner im Netzwerk aus verwenden. Wie man den Drucker unter Ubuntu Linux 13.10 installiert, zeige ich in der folgenden Anleitung.

  1. Zunächst wählt man in den Systemeinstellungen den Bereich „Drucker“ aus.
    Der Bereich "Drucker" in den Systemeinstellungen von Ubuntu.
    Der Bereich „Drucker“ in den Systemeinstellungen von Ubuntu.
  2. Nachdem man auf „Hinzufügen“ geklickt hat, kann man den Drucker im Netzwerk suchen. Als Host gibt man dabei fritz.box (oder alternativ die IP-Adresse 192.168.178.1) ein. Falls man eine zweite FRITZ!Box betreiben sollte, können Hostname und IP-Adresse anders sein.
    Suche des Druckers im Netzwerk.
    Suche des Druckers im Netzwerk.
  3. Im Anschluss sollte der Drucker gefunden werden (hier als „JetDirect (fritz.box)“).
    Drucker wurde im Netzwerk gefunden, und wird als "JetDirect (fritz.box)" angezeigt.
    Drucker wurde im Netzwerk gefunden, und wird als „JetDirect (fritz.box)“ angezeigt.

    Wird der Drucker nicht gefunden, sollte man zunächst in den Verbindungsinformationen der eigenen FRITZ!Box nachsehen, ob der Drucker korrekt angeschlossen ist.

    In den Verbindungsinformationen auf der Startseite der FRITZ!Box sollte der Drucker als USB-Gerät aufgeführt sein.
    In den Verbindungsinformationen auf der Startseite der FRITZ!Box sollte der Drucker als USB-Gerät aufgeführt sein.

    Anstatt den Drucker zu suchen, kann man auch direkt die Adresse des Druckers (socket://fritz.box:9100) eingeben.

    Die direkte Eingabe der Drucker-Adresse kann die Suche im Netzwerk ersetzen.
    Die direkte Eingabe der Drucker-Adresse kann die Suche im Netzwerk ersetzen.
  4. Nun muss man nur noch die richtiger Drucker-Treiber auswählen.
    Auswahl der Drucker-Treiber.
    Auswahl der Drucker-Treiber.
  5. Im Anschluss steht einem der Drucker zur Verfügung.
    Einstellungen des neu installierten Druckers.
    Einstellungen des neu installierten Druckers.
  6. Nun muss nur noch überprüft werden, ob alle Einstellungen korrekt sind. In meinem Falle musste ich noch den doppelseitigen Druck (DoplexNoTumble: drehen an der langen Seite) sowie den Toner-Sparmodus aktivieren.
    Druckeroptionen für den Drucker "Brother HL-5270DN".
    Druckeroptionen für den Drucker „Brother HL-5270DN“.

LaTeX: Im PDF anzeigen, dass ein Eintrag zum Index hinzugefügt wurde

Wenn man einen langen Text schreibt, vergisst man gelegentlich (an der richtigen Stelle) einen Eintrag zum Glossar hinzuzufügen. Bei der späteren Durchsicht des PDF-Dokumentes kann man leider nicht erkennen, an welchen Stellen Einträge zum Glossar hinzugefügt wurden. Das kann man dadurch ändern, dass man den Befehl \index neu definiert (siehe auch StackExchange).

Durch Änderung des Befehls \index kann im Text angezeigt werden, an welchen Stellen ein Eintrag zum Index hinzugefügt wurde.
Durch Änderung des Befehls \index kann im Text angezeigt werden, an welchen Stellen ein Eintrag zum Index hinzugefügt wurde.
  1. Am Aufruf des Befehls \index innerhalb des Textes muss nichts geändert werden:

    Der Begriff Allel\index{allel} wird zum Index hinzugefügt.
  2. Zunächst muss der ursprüngliche \index-Befehl zwischengespeichert werden (hier in \indexAlt):

    \let\indexAlt\index
  3. Im Anschluss kann mit Hilfe des gespeicherten alten Index-Befehls der Index-Befehl neu definiert werden. In diesem Falle wird im Text ein schwarzes Quadrat an jeder Stelle angezeigt, an der ein Eintrag zum Index hinzugefügt wird:

    \def\index{$\blacksquare$\indexAlt}

    Der Befehl \blacksquare stammt aus dem Paket amssymb und kann über folgenden Befehl in der Präambel verfügbar gemacht werden:

    \usepackage{amssymb}

Transluzente Polygone in R-Plots einzeichnen

Manchmal möchte man Bereiche einer Grafik (z.B. einen Meßbereich) farblich hervorheben. Das kann man z.B. durch Polygone erreichen. Wichtig ist dabei, dass keiner der Datenpunkte vollständig überdeckt wird. Entweder zeichnet man die Polygone vor dem plotten der Datenpunkte ein, oder man verwendet teilweise durchsichtige Polygone (transluzente Polygone), durch die die Datenpunkte immer noch zu sehen sind.

nerv_test

Diese Transluzenz erreicht man in R dadurch, dass man einen achtstelligen hexadezimalen RGB-Farbwert verwendet. Die ersten 6 Stellen sind wie gewohnt für die drei Farben Rot, Grün und Blau reserviert. Die letzten beiden Stellen bestimmen die Deckfraft der zuvor angegebenen Farbe. Der Wert „00“ steht dabei für „vollständig durchsichtig (Farbe unsichtbar)“ und „ff“ steht für „100% deckend (undurchsichtig)“.

Im folgenden Beispiel werden Daten (x, y) geplottet.

x = 1:100
y = x + runif(n=length(x), min=-5, max=+5)
# Simulierte Standardabweichung:
sd = 10 + runif(n=length(x), min=-1, max=+1)
plot(x,y, las=1)

Die Standardabweichung (sd) soll in diesem Beispiel nicht als Fehlerbalken, sondern als farbiger Bereich um die Kurve geplottet werden. Das ist besonders dann hilfreich, wenn man eine hohe Dichte an Meßpunkten hat. Dazu werden der Funktion polygon() die x und y-Koordinaten übergeben. Für den Bereich „zuzüglich Standardabweichung“ (oberhalb der Messwerte; y+sd) gehen wir vom kleinsten zum größten x-Wert (x); für den Bereich „abzüglich Standardabweichung“ (unterhalb der Messwerte; y-sd) gehen wir vom größten zum kleinsten x-Wert (rv(x), und damit auch rev(y-sd)). Wird beschreiben das Polygon also in einer Rechtskurve.

# Bereiche der simulierten Standardabweichung einzeichnen
polygon(
  x = c(x, rev(x))
  , y = c(y+sd, rev(y-sd))
  , col = "#cc000033"
)

Auf diese Weise kann man auch einfache Formen, wie z.B. ein Rechteck, einfügen:

# Rechteck einzeichnen
polygon(
  x = c(40, 40, 60, 60)
  , y = c(-10, 200, 200, -10)
  , col = "#0000cc33"
)

Absturz von Ubuntu mit der Fehlermeldung „GPU lockup“

Kürzlich habe ich Ubuntu 13.10 auf meinem Rechner installiert. Beim Aufruf der Dash ist das Sysem allerdings das ein oder andere Mal komplett eingefroren oder abgestürzt. Nach einiger Zeit erschien folgende Fehlermeldung:

GPU lockup – switching to software fbcon

Der Begriff „GPU“ in der Fehlermeldung hat mir zu verstehen gegeben, dass es sich um ein Problem mit meiner Grafikkarte handelt. Da ich eine Nvidia Grafikkarte habe, habe ich über das Paket nvidia-current die proprietären Treiber installiert. Seither läuft das System ohne Absturz.

Regressionsgerade in einen doppelt-logarithmischen Plot eintragen

Wer Potenzgesetze (PowerLaws) in Daten entdecken möchte, bestimmt die Steigung in einem Graphen mit logarithmischen Achsen (log-log-Plot). In der Regel möchte man diese Steigung dann in der Graphik als Regressionsgerade darstellen. In R ist genau diese Darstellung nicht ganz einfach, da die Funktion abline() hier versagt. Im folgenden Artikel möchte ich zeigen, wie man die Schätzung seines Modells dennoch in den Plot eintragen kann.

Wir haben Daten, die einem Potenzgesetz folgen (mit etwas statistischer Schwankung).

x = c(1:150)
y = x^-.5 * 155 + (runif(length(x), min=-3, max=3))

Diese Daten plotten wir in einer Graphik mit zwei logarithmischen Achsen.

plot(x, y, log="xy", cex=.5)

Da wir ein Potenzgesetz vermuten, berechnen wir die Parameter (Steigung und Y-Achsenabschnitt) des linearen Modells (lm()) der logarithmierten Daten (siehe auch Stackoverflow):

model = lm(log(y) ~ log(x))
model

In einem doppelt-logarithmischen Plot gibt es natürlich keinen Y-Achsenabschnitt (die Null wird nie erreicht). Beim Aufruf der Funktion abline(model) wird die Regressionsgerade (besonders bei verschobenen Funktionen) an der falschen Stelle dargestellt. Daher muss man für sein lineares Modell Werte vorhersagen (mit predict() bzw. predict.lm), die man im Anschluss in den Exponenten nimmt und als Linie (lines()) zum Plot hinzufügt (siehe auch Stackoverflow: Beitrag 1 und Beitrag 2).

# Schätzung für 2 Punkte machen
neuX=c(1e-10,1e10)
lines(neuX, exp(predict(model, newdata=list(x=neuX))) ,col="blue", type="o", pch=2)
 
# Schätzung für Datenpunkte machen
lines(x, exp(predict(model, newdata=list(x=x))), col="red", type="o", pch=4)

nerv_test

Hinweise: Der Variablenname in der Liste von newdata muss genau der selbe sein, wie der Name der Variablen, die beim Aufruf des linearen Modells verwendet wurde.

  1. Hat man seine Daten z.B. in einem data.frame gespeichert, sollte man das lineare Modell mittels with() aufrufen, anstatt die Bereiche mit Hilfe des $-Selektors auszuwählen.
  2. Wenn man das lineare Modell nur für einen Teil seiner Daten verwenden möchte, so sollte man die Option subset= von lm() verwenden, anstatt Teile des Vectors mit Hilfe der eckigen Klammern auszuwählen.

Die folgenden Beispiele zeigen zwei Mögliche Schreibweisen, eine lineare Regression für die die Datensätze 40 bis 80 einzuzeichnen. Die Daten dafür sind:

1
2
3
4
x = c(1:150)
y = x^-.5 * 155 + (runif(length(x), min=-3, max=3))
daten = data.frame(x,y)
range = c(40:80)

Beispiel 1: with() wird nur für den Aufruf des lm() verwendet. die Ergebnisse der Regression werden in model gespeichert.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
plot(daten$x, daten$y, log="xy", cex=.5)
model = with(
  data = daten,
  expr = { model = lm(log(y) ~ log(x), subset=range); model }
)
model
 
lines(
  x[range]
  , exp(predict(model, newdata=list(x=x[range])))
  , col="red"
  , type="o"
  , pch=4
)

Beispiel 2: with() wird für die gesamte Behandlung der Daten verwendet (plot(), lm(), lines()).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
with(
  data = daten,
  expr = {
    plot(x, y, log="xy", cex=.5)
    model = lm(log(y) ~ log(x), subset=range)
    lines(
      x[range]
      , exp(predict(model, newdata=list(x=x[range])))
      , col="red"
      , type="o"
      , pch=4
    )
  }
)

Dateien in ein komprimiertes Archiv verschieben

In meinen Simulationen werden oftmals viele Dateien erzeugt. Damit bin ich schon das ein oder andere Mal an die Grenzen für die Zahl der erlaubten Dateien und den verfügbaren Speicherplatz (quota) gestoßen. Abgesehen davon dauert es länger, wenn man anstatt einer großen Datei viele kleine Dateien herunterlädt.

Daher verschiebe ich die Dateien regelmäßig in ein gepacktes tar-Archiv. Im folgenden Befehl werden alle Dateien mit der Endung .plot in ein neu erstelltes Archiv plot.tar.gz verschoben.

tar --remove-files -czf plot.tar.gz *.plot
–remove-files
Diese Option sorgt dafür, dass die Orginal-Dateien gelöscht werden, sobald sie ins Archiv kopiert wurden.
-c
Diese Option sorgt dafür, dass ein neues Archiv erzeugt wird. Der Name des Archivs wird mit der Option -f angegeben.
Alternativ können mit der Option -r Dateien zu einem bestehenden Archiv hinzugefügt werden:

tar --remove-files -rf plot.tar *.plot

Archive, an die man Dateien anhängen möchte, dürfen allerdings nicht gepackt sein (siehe -z). Ansonsten bekommt man folgende Fehlermeldung:

tar: Cannot update compressed archives
tar: Error is not recoverable: exiting now
-z
Diese Option sorgt dafür, dass das Archiv mit Hilfe von gzip komprimiert wird.
-f
Diese Option legt den Namen des zu behandelnden Archivs fest. Der Name muss (mit einem Leerzeichen getrennt) direkt nach -f stehen.

Generell ist die Reihenfolge der Optionen egal. Allerdings sollte man darauf achten, dass bei Optionen die einen Wert erwarten (z.B. -f), der Wert weiterhin hinter der Option zu finden ist. Zudem müssen die hinzugefügten Dateien ganz am Ende stehen. Hier einige Beispiele für gültige und ungültige Befehle:

# Korrekt:
tar --remove-files -czf plot.tar.gz *.plot
tar --remove-files -c -z -f plot.tar.gz *.plot
tar -f plot.tar.gz --remove-files -zc *.plot
 
# Fehlerhaft:
# Die Namen der zu archivierenden Dateien stehen nicht am Ende
tar *.plot --remove-files -czf plot.tar.gz
# Der Name des Archivs steht nicht hinter -f
tar --remove-files -cfz plot.tar.gz *.plot

Hinweis: Auf Mac OS X-Systemen (oder FreeBSD) ist meistens BSDtar installiert (tar --version ergibt z.B. „bsdtar 2.6.2 – libarchive 2.6.2“). Im Gegensatz zu GNU tar gibt es bei BSDtar die Option --remove-files nicht.

Zeilenumbrüche und Absätze in LaTeX

In LaTeX gibt es mehrere Möglichkeiten „in die nächste Zeile zu springen“.

Zum einen kann ein Text in inhaltliche Einheiten („Absätze“) eingeteilt werden. Absätze zeichnen sich in der Regel dadurch aus, dass die erste Zeile eingerückt ist, und ein einen Abstand zwischen zwei Absätzen gibt. Absätze können entweder durch eine einfache Leerzeile oder durch den Befehl \par erzeugt werden:

1
2
3
4
Text des ersten Absatzes. Die erste Zeile des ersten Absatzes eines Kapitels/Section,... ist in der Regel nicht eingerückt.
 
Text des zweiten Absatzes. Dieser wird durch eine leere Zeile nach dem ersten Absatz erzeugt.\par
Text des dritten Absatzes. Dieser wird durch den Befehl \\par erzeugt.

Eine weitere Möglichkeit, die man allerdings nur in Ausnahmefällen verwenden sollte, sind Zeilenumbrüche. Diese teilen den Text nicht in logische Abschnitte ein, sondern veranlassen LaTeX nur in die nächste Zeile zu springen. Eine Einrückung der ertsen Zeile oder ein Abstand zum vorhergehenden Text erfolgt nicht. Mir fällt auch kein Beispiel ein, in dem ein Zeilenumbruch innerhalb eines laufenden Textes sinnvoll verwendet werden kann. Man kann einen Zeilenumbruch durch die Befehle \\ und \newline erzeugen.

1
ErsteZeile\\zweite Zeile\newline dritte Zeile\newline{}vierte Zeile

Mit \linebreak hat man zudem die Möglichkeit, LaTeX einen Zeilenumbruch nahezulegen (siehe auch goLaTeX und Befehls-Glossar auf WikiBooks).

Befehle die ich häufig in der LaTeX-Präambel verwende

Seit ich mit LaTeX begonnen habe, habe ich viele Pakete kennengelernt und eigene Befehle entwickelt. Alle haben irgendwo einen Platz in der Präambel gefunden. Problematisch wird es, wenn ich mit alten LaTex-Dokumenten arbeite, in denen ich bestimmte Befehle noch nicht verwendet habe. Oder wenn ich die Präambel eines Dokumentes kopiere, in dem unnötige Pakete eingebunden werden. Oftmals vergesse ich auch altenative Parameter, die man für ein Paket verwenden kann.

Da das alles sehr lästig ist, beginne ich jetzt diese Liste mit Befehlen aus meinen Präambeln. Dabei stelle ich kurz vor, warum ich ein Paket verwende und welche Prameter man verwenden kann.

Als allgemeine Einleitung zu LaTeX eigenet sich auf jedenfall „The not so Short Introduction to LaTeX„, die es in einer Kurzfassung auch auf deutsch gibt.

Dokumententyp

  1. 1
    
    \documentclass[a4paper,twoside,12pt]{scrartcl}

    Mit dieser Zeile wird der Dokumententyp scrartcl verwendet. Häufig verwendete Dokumententypen sind:

    • article – Kurze Artikel
    • report – Lange Berichte
    • book – Bücher
    • scrartcl – Kurze Artikel (KOMA Script)
    • scrreprt – Lange Berichte (KOMA Script)
    • scrbook – Bücher (KOMA Script)

    KOMA-Script erlaubt eine bessere Anpassung z.B. an DIN-Formate.
    Wichtige Optionen sind der Dokumententypen sind:

    • a4paper – DIN-A4 als Seitengröße verwenden (Andere: letterpaper)
    • twoside – Doppelseitigen Satz verwenden (Standard: oneside)
    • 12pt – Angabe der Schriftgröße in Punkten (Standard: 10pt)
    • titlepage – Nach dem Dokumententitel eine neue Seite beginnen (Standard bei book und report; bei article ist der Standard notitlepage)
    • twocolumn – Teile die Seiten in zwei Spalten auf (Standard: onecolumn)
    • openright, openany – Sollen Kapitel immer auf der rechten Seite begonnen werden?
  2. 1
    
    \pagestyle{headings}

    In LaTeX gibt es drei verschiedene Seitenlayouts:

    • plain – Setze die Seitenzahl zentriert unten auf die Seite.
    • headings – Zeige Seitenzahl und Kapitelnamen in der Kopfzeile jeder Seite an.
    • empty – Zeige weder Seitenzahlen, noch Kapitelnamen an.

Sprache und Zeichensatz

  1. 1
    
    \usepackage[english]{babel}

    Verschiedene Sprachen haben auch verschiedene Trennungsregeln. Unter anderem werden diese in Paket babel definiert.

    • english – englische Trennungsregeln verwenden
    • ngerman – deutsche Trennungsregeln verwenden (neue Rechtschreibung)
    • german – deutsche Trennungsregeln verwenden (alte Rechtschreibung)
    • ngerman,english – deutsche und englische Trennungsregeln laden (z.B. bei mehrsprachigen Dokumenten). Im Dokument die aktiven Trennungsregeln umschalten mit:
      \selectlanguage{ngerman}
  2. 1
    2
    3
    
    \usepackage{ucs}              % Unicode (u.A. UTF-8) hinzuladen!
    \usepackage[utf8x]{inputenc}  % Verwende UTF-8 als Zeichensatz.
    \usepackage[T1]{fontenc}      % Trennung von Umlauten ermöglichen(?)

    Sofern man Sonderzeichen aus mehreren Sprachen in einem Dokument verwendet (z.B. Sonderzeichen in den Autorennamen der Literaturliste), sollte man den Unicode-Zeichensatz UTF-8 als Zeichensatz seines Dokumentes verwenden. Das Dokument selbst sollte dann auch in diesem Zeichensatz gespeichert werden. Man sollte auch beachten, dass zusätzliche Dokumente wie .bib-Dateien auch im UTF-8 Zeichensatz gespeichert werden müssen. Im Referenzmanager JabRef kann man unter file / database properties / encoding UTF-8 einstellen!

Beispiel

Ein Dokument mit den oben beschriebenen Werten für die Präambel könnte folgendermaßen aussehen:

1
2
3
4
5
6
7
8
9
10
11
12
% Dokumententyp
\documentclass[a4paper,twoside,12pt]{scrartcl}
\pagestyle{headings}
% Sprache und Zeichensatz
\usepackage[english]{babel}
\usepackage{ucs}              % Unicode (u.A. UTF-8) hinzuladen!
\usepackage[utf8x]{inputenc}  % Verwende UTF-8 als Zeichensatz.
\usepackage[T1]{fontenc}      % Trennung von Umlauten ermöglichen(?)
 
\begin{document}
Text
\end{document}

Einträge ohne Nummerierung zum Inhaltsverzeichnis hinzufügen

Manchmal möchte man Einträge für Kapitel im Inhaltsverzeichnis finden, allerdings ohne Nummerierung. Haufig findet man dies für Anhänge, Danksagungen, etc., da diese nicht zum eigentlichen Inhalt der Arbeit gehören.

In der Regel teilt man dazu die Arbeit in verschiedene Bereiche ein (siehe auch WikiBooks):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
\begin{document}
\frontmatter    % Römische Seitenzahlen, Chapter ohne Nummerierung
% Titelseite, Summaries, Inhaltsverzeichnis,...
 
\mainmatter     % Nummerierte Chapter, Arabische Seitenzahlen
% Einleitung, Methoden, Ergebnisse, Diskussion, (Referenzen),...
 
\appendix       % Chapter beginnen mit einem Buchstaben
% Anhänge, (Glossar, Index),...
 
\backmatter     % Chapter ohne Nummerierung
% Danksagung, ERklärung, Lebenslauf,...
 
\end{document}

Wer diese Einteilung nicht nutzen möchte, kann auch manuell Einträge zum Inhaltsverzeichnis („table of contents“, TOC) hinzufügen. Dazu erstellt man mit Hilfe des * einen Eintrag, der nicht zum Inhaltsverzeichnis hinzugefügt wird. Im Anschluss fügt man den Eintrag manuell hinzu

\chapter{Anhang}
\addcontentsline{toc}{chapter}{Anhang}