Archive for the ‘Allgemein’ Category.

Die Suche nach einer brauchbaren Vereinssoftware… Teil 2

This entry is part 2 of 2 in the series Vereinssoftware

Für die Auswertung der Buchungen will ich natürlich LaTeX nutzen. Die Vorlagen für die offiziellen „Zuwendungsbescheinigungen“ gibt es leider nur im Word und PDF Format. Daher musste ich die Vorlagen neu bauen. Die Umsetzung war mit relativ wenig Aufwand verbunden, die fertigen Dateien habe ich in einem Google Code Projekt unter http://code.google.com/p/spendenquittungen-mit-latex/ abgelegt.

Verbunden werden die Vorlagen mit den Daten über MySQL & Python, das genaue Vorgehen wird in einem Artikel für die DTK beschrieben.

zuw1

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Importing events into Google Calendar

Google Calendar is able to import events from CSV files. The format however is a bit different from the locale used here in Germany, so I prepared a Excel sheet. It allows you to enter the dates and then uses Excel’s TEXT() function to build the correct format.

gcal

GCal_20130601

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

DTK Artikel zu europass Lebensläufen

Hier die Dateien:

DTK Artikel Quellen: artikel.zip

Beispiele: onlineexamples.zip

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Erste Schritte mit dem Raspberry Pi

Hat man das Debian Image erfolgreich zum Laufen gebracht und sieht man den Login-Screen, dann wird es Zeit für die ersten Schritte:

  1. Einloggen, User pi, Passwort raspberry. Zu beachten ist, dass das Tastatur-Layout noch auf Englisch eingestellt ist, man also rasberrz eingeben muss
  2. Setzen des Keyboard-Layouts: sudo dpkg-reconfigure keyboard-configuration. Ich habe die Konfiguration auf 105 Tasten und „German“ gesetzt.
  3. Setzen der Locales: sudo dpkg-reconfigure locales, hier habe ich „de_DE UTF8“ gewählt.
  4. Update der Installation: sudo apt-get update und sudo apt-get upgrade
  5. Aufsetzen des SSH-Dienstes
    1. sudo bash
    2. ssh-keygen -t rsa. Bei Fragen einfach Return drücken.
    3. sudo mv /boot/boot_enable_ssh.rc /boot/boot.rc

    Spätestens nach dem sudo reboot kann man dann mit der über ifconfig -a ermittelten IP-Adresse auf den Pi zugreifen.

Links

http://www.heise.de/hardware-hacks/artikel/Erste-Schritte-mit-dem-Raspberry-Pi-1573973.html

http://fusionstrike.com/2012/setting-ssh-ftp-raspberry-pi-debian

http://www.irrational.net/2012/04/18/making-the-raspberry-pi-less-british/

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Fahrgastrechte-Formular mit LaTeX ausfüllen

Ist der ICE mal wieder spät dran, so kann man sich mit Hilfe des Fahrgastrechte-Formulars einen Teil des gezahlten Fahrpreises zurückholen. Das dem folgenden Beispiel zugrundeliegende Formular kann man unter http://www.bahn.com/i/view/CHE/de/services/passenger_rights/fahrgastrechte_formular_online.shtml herunterladen und am Bildschirm ausfüllen. Wenn aber der Zugbegleiter im Zug selbst schon ein Formular ausgehändigt hat und seinen Stempel raufgesetzt hat, muss man händisch ausfüllen. 🙁

Jetzt nicht mehr, denn mit Hilfe des unten stehenden Codes druckt man direkt auf das Papierformular oder alternativ in ein PDF, das man dann im Reisecenter abstempeln lassen kann. Einfach das PDF herunterladen und die Variablen ändern.

EDIT vom 11.07.2012: Ich habe einige kleine Bugs beseitigt und die Abstände auf der zweiten Seite um einen Millimeter nach unten geschoben, damit der Druck auf meinem LaserJet 4100dtn besser aussieht. Die Leer-PDF Seite, die ich im Beispiel nutze, findet sich hier

% Datum: 11.07.2012
\documentclass[12pt,ngerman]{scrartcl}
 
\renewcommand{\familydefault}{\sfdefault}
\usepackage[a4paper,top=0pt,bottom=0pt,left=0pt,right=0pt]{geometry}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{booktabs}
\usepackage[]{graphicx}
\usepackage{rotating}
\setlength{\parindent}{0pt}
 
\usepackage[]{microtype}
\newcommand{\mtscale}{260} % scaling factor for the \textls command
\newcommand{\boxfactor}{1.2} % Scalefactor for the text
\newcommand{\putformtext}[1]{\scalebox{\boxfactor}{\texttt{\textls[\mtscale]{#1}}}} % 
 
\usepackage[absolute,overlay]{textpos}
\setlength{\TPHorizModule}{1mm}
\setlength{\TPVertModule}{1mm}
 
\newcommand{\startbahnhof}[1]{Bremerhaven}
\newcommand{\zielbahnhof}[1]{Leverkusen}
\newcommand{\plantag}[1]{02}
\newcommand{\planmonat}[1]{03}
\newcommand{\planjahr}[1]{12}
 
\newcommand{\planabfahrtstunde}[1]{12}
\newcommand{\planabfahrtminute}[1]{53}
 
\newcommand{\planankunftstunde}[1]{18}
\newcommand{\planankunftminute}[1]{45}
 
\newcommand{\zugtypa}[1]{ICE}
\newcommand{\zugnummera}[1]{1234}
\newcommand{\zugaabfahrtstunde}[1]{09}
\newcommand{\zugaabfahrtminute}[1]{25}
 
\newcommand{\tatsankunfttag}[1]{02}
\newcommand{\tatsankunftmonat}[1]{03}
\newcommand{\tatsankunftjahr}[1]{12}
\newcommand{\zugtypb}[1]{ICE}
\newcommand{\zugnummerb}[1]{2345}
\newcommand{\tatsankunftstunde}[1]{23}
\newcommand{\tatsankunftminute}[1]{59}
 
\newcommand{\anschlussverpasst}[1]{X}
\newcommand{\anschlussverpasstbahnhof}[1]{Hamburg Hbf}
\newcommand{\letzerumstieg}[1]{X}
\newcommand{\letzerumstiegbahnhof}[1]{Lübeck Hbf}
 
\newcommand{\keinAntritt}[1]{X}
 
\newcommand{\reiseabgebrochen}[1]{X}
\newcommand{\reiseabgebrochenbahnhof}[1]{Schwerin Hbf}
\newcommand{\reiseabgebrochenanderes}[1]{X}
\newcommand{\reiseabgebrochenanderesbahnhof}[1]{Leipzig Hbf}
\newcommand{\reiseabgebrochennahverkehr}[1]{X}
\newcommand{\reiseabgebrochennahverkehrbahnhof}[1]{Königs-Wusterhausen}
 
\newcommand{\auszahlung}[1]{X}
\newcommand{\gutschein}[1]{X}
 
\newcommand{\frau}[1]{X}
\newcommand{\herr}[1]{X}
\newcommand{\titel}[1]{Dr.}
 
\newcommand{\firma}[1]{ABC Consulting}
 
\newcommand{\name}[1]{Mustermann}
\newcommand{\vorname}[1]{Manfred}
 
\newcommand{\co}[1]{ABC Consult}
\newcommand{\telefon}[1]{0123-4567890}
 
\newcommand{\strasse}[1]{Musterweg}
\newcommand{\hausnummer}[1]{123}
 
\newcommand{\staat}[1]{USA}
\newcommand{\plz}[1]{12345}
\newcommand{\wohnort}[1]{Musterstadt}
 
\newcommand{\mobilitynummer}[1]{0123456789}
\newcommand{\geburtstag}[1]{13}
\newcommand{\geburtsmonat}[1]{09}
\newcommand{\geburtsjahr}[1]{1978}
 
\newcommand{\email}[1]{manfred@mustermann.de}
 
\newcommand{\kontoinhaber}[1]{Mustermann, Manfred}
\newcommand{\kontonummer}[1]{1234567890}
\newcommand{\blzswift}[1]{123456}
\newcommand{\iban}[1]{12345678912345}
 
\newcommand{\datum}[1]{02.03.2012}
 
\newcommand{\marktforschung}[1]{X}
 
\begin{document}
 
%\includegraphics[page=1,scale=0.999]{MDB85421-fgr_barrierefrei12.pdf}
\includegraphics[scale=0.999]{leer}
 
\begin{textblock*}{50mm}(36mm,128mm)
\putformtext{\startbahnhof}
\end{textblock*}
 
\begin{textblock*}{50mm}(36mm,137mm)
\putformtext{\zielbahnhof}
\end{textblock*}
 
\begin{textblock*}{50mm}(157mm,120mm)
\putformtext{\plantag}
\end{textblock*}
 
\begin{textblock*}{50mm}(171mm,120mm)
\putformtext{\planmonat}
\end{textblock*}
 
\begin{textblock*}{50mm}(184mm,120mm)
\putformtext{\planjahr}
\end{textblock*}
 
 
\begin{textblock*}{50mm}(171mm,129mm)
\putformtext{\planabfahrtstunde}
\end{textblock*}
 
\begin{textblock*}{50mm}(184mm,129mm)
\putformtext{\planankunftminute}
\end{textblock*}
 
\begin{textblock*}{50mm}(171mm,137mm)
\putformtext{\planankunftstunde}
\end{textblock*}
 
\begin{textblock*}{50mm}(184mm,137mm)
\putformtext{\planabfahrtminute}
\end{textblock*}
 
 
\begin{textblock*}{50mm}(29.5mm,168,5mm)
\putformtext{\tatsankunfttag}
\end{textblock*}
 
\begin{textblock*}{50mm}(43.5mm,168.5mm)
\putformtext{\tatsankunftmonat}
\end{textblock*}
 
\begin{textblock*}{50mm}(56.5mm,168.5mm)
\putformtext{\tatsankunftjahr}
\end{textblock*}
 
%%%%%%%%%%%
 
\begin{textblock*}{50mm}(99mm,159mm)
\putformtext{\zugtypa}
\end{textblock*}
 
\begin{textblock*}{50mm}(130mm,159mm)
\putformtext{\zugnummera}
\end{textblock*}
 
\begin{textblock*}{50mm}(171mm,159mm)
\putformtext{\zugaabfahrtstunde}
\end{textblock*}
 
\begin{textblock*}{50mm}(184mm,159mm)
\putformtext{\zugaabfahrtminute}
\end{textblock*}
 
\begin{textblock*}{50mm}(99mm,168mm)
\putformtext{\zugtypb}
\end{textblock*}
 
\begin{textblock*}{50mm}(130mm,168mm)
\putformtext{\zugnummerb}
\end{textblock*}
 
\begin{textblock*}{50mm}(171mm,168mm)
\putformtext{\tatsankunftstunde}
\end{textblock*}
 
\begin{textblock*}{50mm}(184mm,168mm)
\putformtext{\tatsankunftminute}
\end{textblock*}
 
%%%%%%%%%%%%
 
\begin{textblock*}{50mm}(13.5mm,183mm)
\putformtext{\anschlussverpasst}
\end{textblock*}
 
\begin{textblock*}{50mm}(117mm,183mm)
\putformtext{\anschlussverpasstbahnhof}
\end{textblock*}
 
\begin{textblock*}{50mm}(13.5mm,192mm)
\putformtext{\letzerumstieg}
\end{textblock*}
 
\begin{textblock*}{50mm}(117mm,192mm)
\putformtext{\letzerumstiegbahnhof}
\end{textblock*}
 
\begin{textblock*}{50mm}(13.5mm,201mm)
\putformtext{\keinAntritt}
\end{textblock*}
 
\begin{textblock*}{50mm}(13.5mm,210mm)
\putformtext{\reiseabgebrochen}
\end{textblock*}
 
\begin{textblock*}{50mm}(117mm,210mm)
\putformtext{\reiseabgebrochenbahnhof}
\end{textblock*}
 
\begin{textblock*}{50mm}(13.5mm,219mm)
\putformtext{\reiseabgebrochenanderes}
\end{textblock*}
 
\begin{textblock*}{50mm}(117mm,219mm)
\putformtext{\reiseabgebrochenanderesbahnhof}
\end{textblock*}
 
\begin{textblock*}{50mm}(13.5mm,228mm)
\putformtext{\reiseabgebrochennahverkehr}
\end{textblock*}
 
\begin{textblock*}{50mm}(117mm,228mm)
\putformtext{\reiseabgebrochennahverkehrbahnhof}
\end{textblock*}
 
\begin{textblock*}{50mm}(13.5mm,282mm)
\putformtext{\auszahlung}
\end{textblock*}
 
\begin{textblock*}{50mm}(116.5mm,282mm)
\putformtext{\gutschein}
\end{textblock*}
 
 
\clearpage
 
%\includegraphics[page=2,scale=0.999]{MDB85421-fgr_barrierefrei12.pdf}
\includegraphics[scale=0.999]{leer}
 
\begin{textblock*}{50mm}(13mm,29mm)
\putformtext{\frau}
\end{textblock*}
 
\begin{textblock*}{50mm}(22mm,29mm)
\putformtext{\herr}
\end{textblock*}
 
\begin{textblock*}{50mm}(31mm,29mm)
\putformtext{\titel}
\end{textblock*}
 
\begin{textblock*}{50mm}(13mm,40mm)
\putformtext{\firma}
\end{textblock*}
 
\begin{textblock*}{50mm}(13mm,51mm)
\putformtext{\name}
\end{textblock*}
 
\begin{textblock*}{50mm}(99mm,51mm)
\putformtext{\vorname}
\end{textblock*}
 
\begin{textblock*}{50mm}(13mm,62mm)
\putformtext{\co}
\end{textblock*}
 
\begin{textblock*}{50mm}(99mm,62mm)
\putformtext{\telefon}
\end{textblock*}
 
\begin{textblock*}{50mm}(13mm,73mm)
\putformtext{\strasse}
\end{textblock*}
 
\begin{textblock*}{50mm}(158mm,73mm)
\putformtext{\hausnummer}
\end{textblock*}
 
\begin{textblock*}{50mm}(13mm,84mm)
\putformtext{\staat}
\end{textblock*}
 
\begin{textblock*}{50mm}(35.5mm,84mm)
\putformtext{\plz}
\end{textblock*}
 
\begin{textblock*}{50mm}(63mm,84mm)
\putformtext{\wohnort}
\end{textblock*}
 
\begin{textblock*}{50mm}(13mm,96mm)
\putformtext{\mobilitynummer}
\end{textblock*}
 
\begin{textblock*}{50mm}(99mm,96mm)
\putformtext{\geburtstag}
\end{textblock*}
 
\begin{textblock*}{50mm}(112mm,96mm)
\putformtext{\geburtsmonat}
\end{textblock*}
 
\begin{textblock*}{50mm}(126mm,96mm)
\putformtext{\geburtsjahr}
\end{textblock*}
 
\begin{textblock*}{50mm}(13mm,107mm)
\putformtext{\email}
\end{textblock*}
 
\begin{textblock*}{50mm}(13mm,145mm)
\putformtext{\kontoinhaber}
\end{textblock*}
 
\begin{textblock*}{50mm}(13mm,156mm)
\putformtext{\kontonummer}
\end{textblock*}
 
\begin{textblock*}{50mm}(117mm,156mm)
\putformtext{\blzswift}
\end{textblock*}
 
\begin{textblock*}{50mm}(13mm,167mm)
\putformtext{\iban}
\end{textblock*}
 
\begin{textblock*}{50mm}(111mm,198mm)
\texttt{\datum}
\end{textblock*}
 
\begin{textblock*}{50mm}(13.5mm,210mm)
\putformtext{\marktforschung}
\end{textblock*}
 
\end{document}

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Organspendeausweise mit LaTeX ausfüllen

Unter http://www.organspendeausweis.org/Organspendeausweis.pdf kann man eine Vorlage für den Organspendeausweis herunterladen. Mit LaTeX lässt sich diese Vorlage recht einfach ausfüllen.

\documentclass{scrartcl}
 
\usepackage[a4paper,landscape,top=0pt,bottom=0pt,left=0pt,right=0pt]{geometry}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{booktabs}
\usepackage[]{graphicx}
\usepackage{rotating}
\setlength{\parindent}{0pt}
 
\usepackage[absolute,overlay]{textpos}
\setlength{\TPHorizModule}{1mm}
\setlength{\TPVertModule}{1mm}
 
\begin{document}
\includegraphics[scale=0.999]{Organspendeausweis.pdf}
 
 
\begin{textblock*}{50mm}(42mm,122mm)
\texttt{Mustermann, Max}
\end{textblock*}
 
\begin{textblock*}{50mm}(95mm,122mm)
\texttt{01.02.1923}
\end{textblock*}
 
\begin{textblock*}{50mm}(42mm,128mm)
\texttt{Musterweg 18}
\end{textblock*}
 
\begin{textblock*}{50mm}(80mm,128mm)
\texttt{12345~Musterdorf}
\end{textblock*}
 
 
\begin{textblock*}{50mm}(110.5mm,87.25mm)
\texttt{X}
\end{textblock*}
 
\begin{textblock*}{50mm}(88mm,45mm)
\begin{turn}{180}\texttt{12.05.2012}\end{turn}
\end{textblock*}
 
%%%%%%%%%%%%%%%%%%%%%%%%%
 
\begin{textblock*}{50mm}(172mm,122mm)
\texttt{Mustermann, Max}
\end{textblock*}
 
\begin{textblock*}{50mm}(225mm,122mm)
\texttt{01.02.1923}
\end{textblock*}
 
\begin{textblock*}{50mm}(172mm,128mm)
\texttt{Musterweg 18}
\end{textblock*}
 
\begin{textblock*}{50mm}(210mm,128mm)
\texttt{12345~Musterdorf}
\end{textblock*}
 
 
\begin{textblock*}{50mm}(241mm,87.25mm)
\texttt{X}
\end{textblock*}
 
\begin{textblock*}{50mm}(218mm,45mm)
\begin{turn}{180}\texttt{12.05.2012}\end{turn}
\end{textblock*}
 
\end{document}

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Mindmaps aus Freemind nach LaTeX exportieren – Teil 2

Dies ist der zweite Teil der Reihe, Teil 1 liegt unter http://uweziegenhagen.de/?p=2032.

Schauen wir uns mal den Aufbau der FreeMind Datei an:

<map version="0.9.0">
<!-- To view this file, download free mind mapping software FreeMind from http://freemind.sourceforge.net -->
<node CREATED="1335794057887" ID="ID_1245350673" MODIFIED="1335794109247" TEXT="Zentrum">
<node CREATED="1335794071208" ID="ID_1530114542" MODIFIED="1335794074163" POSITION="right" TEXT="Level 1"/>
<node CREATED="1335794075246" ID="ID_1662348218" MODIFIED="1335794079639" POSITION="right" TEXT="Level 1">
<node CREATED="1335794081307" ID="ID_1399980217" MODIFIED="1335794085467" TEXT="Level 2">
<node CREATED="1335794088715" ID="ID_1065307715" MODIFIED="1335794091703" TEXT="Level 3">
<node CREATED="1335794092827" ID="ID_1370145863" MODIFIED="1335794094989" TEXT="Level 4">
<node CREATED="1335794096421" ID="ID_9970207" MODIFIED="1335794099648" TEXT="Level 5">
<node CREATED="1335794173930" ID="ID_919041832" MODIFIED="1335794177008" TEXT="Level 6">
<node CREATED="1335794178164" ID="ID_1274260836" MODIFIED="1335794180516" TEXT="Level 7"/>
</node>
</node>
</node>
</node>
</node>
</node>
</node>
</map>

Es gibt ein map Tag, das entsprechende verschachtelte node Tags enthält. Wenn ein node Tag keine „Kinder“ hat, wird es am Ende der Zeile mittels „/“ geschlossen. node Tags mit „Kindern“ enthalten diese nodes und werden dann rekursiv geschlossen.

Schauen wir uns mal das XSLT an (Eine tiefgehende Einführung in XSLT kann ich hier jedoch nicht geben): Hinter dem Matching auf das map Tag wird die Text Eigenschaft des ersten node-Elements als part ausgegeben. Sehr interessant, an dieser Stelle können wir später ansetzen, um direkt ein kompilierbares LaTeX-Dokument zu erhalten.

Es gibt im Dokument noch drei weitere Matches:

  • richcontent
  • soll uns aktuell nicht interessieren, wird eventuell später mal behandelt.

  • node
  • Hier wird die Ausgabe der einzelnen node Tags gesteuert.

  • text
  • Dieses match steuert die Ausgabe der Notizen als einfachen Text, gehe ich eventuell später mal drauf ein.

In den node matches wird geschaut, wie tief sich der aktuelle Knoten befindet, in Abhängigkeit dessen wird das Text Attribut des Knotens einfach in ein entsprechendes LaTeX-Kommando eingebettet. Entsprechende Abschnitte wie den folgenden finden sich für alle Levels von \chapter bis \subparagraph.

Im nächsten Teil werden wir dieses XSLT Sheet auf unsere Bedürfnisse anpassen.

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Mindmaps aus Freemind nach LaTeX exportieren – Teil 1

FreeMind ist meines Erachtens das beste OpenSource Tool für die Erstellung von Mindmaps, jedoch ist eine MindMap oft nicht das Format, das man zum Weiterbearbeiten benötigt. Neben diversen fertigen Export-Filtern für Grafikformate wie PDF oder PNG bietet FreeMind auch die Möglichkeit, eigene XSLT-Sheets für den Export zu nutzen. Das Rad muss man hier nicht komplett neu erfinden, mit Freemind to Latex gibt es schon ein entsprechendes Projekt, das eine passende XSLT Datei bereitstellt. Möchte man eine Mindmap exportieren, so geht man im „Datei“ Menü einfach auf den Export => „Mittels XSLT“ Eintrag und kann dann den Namen der Output Datei sowie das zu nutzende XSLT Sheet auswählen.

Mit der standardmäßigen mm2latexr_richcontent_v1.02.xsl erhält man für die Map aus dem Bild folgendes Ergebnis:

\part{Zentrum}
 
 
 
\chapter{Level 1}
\chapter{Level 1}
\section{Level 2}
\subsection{Level 3}
\subsubsection{Level 4}
\paragraph{Level 5}
\subparagraph{Level 6}

Man sieht:

  • Es fehlen Dokumentenpräambel und -struktur
  • Es wird nur bis Level 6 exportiert, danach fehlen die Inhalte (Laut der Webseite sollten eigentlich itemize Umgebungen daraus werden…)

Mit ein wenig XML/XSLT Kenntnissen lässt sich dieser Export aber sehr einfach auf die eigenen Bedürfnisse anpassen, was ich in Teil 2 zeigen werde.

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

LaTeX: Quellcode-Änderungen hervorheben (highlighten) – Teil 2

LaTeXdiff ist ein Perl-Skript, das die Unterschiede von zwei TeX-Dateien grafisch darstellen kann. Unter Windows wird bei TeXlive eine entsprechende exe mitgeliefert, sodass das Skript auch ohne installiertes Perl funktioniert. Hier ein Beispiel:

Dokument1.tex

\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{booktabs}
 
\begin{document}
 
Hallo Welt!
 
\end{document}

Dokument2.tex

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{booktabs}
 
\begin{document}
 
Hallo, Welt! Foobar!
 
\end{document}

latexdiff Dokument1.tex Dokument2.tex > result.tex

result.tex

%DIF 1c1
%DIF < \documentclass{scrartcl}
%DIF -------
\documentclass{article} %DIF > 
%DIF -------
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{booktabs}
%DIF PREAMBLE EXTENSION ADDED BY LATEXDIFF
%DIF UNDERLINE PREAMBLE %DIF PREAMBLE
\RequirePackage[normalem]{ulem} %DIF PREAMBLE
\RequirePackage{color}\definecolor{RED}{rgb}{1,0,0}\definecolor{BLUE}{rgb}{0,0,1} %DIF PREAMBLE
\providecommand{\DIFadd}[1]{{\protect\color{blue}\uwave{#1}}} %DIF PREAMBLE
\providecommand{\DIFdel}[1]{{\protect\color{red}\sout{#1}}}                      %DIF PREAMBLE
%DIF SAFE PREAMBLE %DIF PREAMBLE
\providecommand{\DIFaddbegin}{} %DIF PREAMBLE
\providecommand{\DIFaddend}{} %DIF PREAMBLE
\providecommand{\DIFdelbegin}{} %DIF PREAMBLE
\providecommand{\DIFdelend}{} %DIF PREAMBLE
%DIF FLOATSAFE PREAMBLE %DIF PREAMBLE
\providecommand{\DIFaddFL}[1]{\DIFadd{#1}} %DIF PREAMBLE
\providecommand{\DIFdelFL}[1]{\DIFdel{#1}} %DIF PREAMBLE
\providecommand{\DIFaddbeginFL}{} %DIF PREAMBLE
\providecommand{\DIFaddendFL}{} %DIF PREAMBLE
\providecommand{\DIFdelbeginFL}{} %DIF PREAMBLE
\providecommand{\DIFdelendFL}{} %DIF PREAMBLE
%DIF END PREAMBLE EXTENSION ADDED BY LATEXDIFF
 
\begin{document}
 
Hallo\DIFdelbegin \DIFdel{Welt}\DIFdelend \DIFaddbegin \DIFadd{, Welt! Foobar}\DIFaddend !
 
 
 
\end{document}

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

fontenc und inputenc

Die Frage, wo eigentlich der Unterschied zwischen fontenc und inputenc liegt, wurde sehr ausführlich in einem stackexchange Posting beantwortet. Da ich selbst zwar schon seit Jahren TeXe, diesen Unterschied aber selbst nie ergründet habe, folgt hier die deutsche Übersetzung.

Beide Pakete adressieren vollkommen unterschiedliche Probleme.

  • inputenc erlaubt es dem Nutzer, Nicht-ASCII Zeichen direkt über die Tastatur einzugeben
  • fontenc kümmert sich um die Ausgabe, also darum welches Zeichen genutzt wird, um einen Buchstaben darzustellen

Beide Pakete sind nicht mit einander verbunden, es ist aber besser, fontenc vor inputenc in der Präambel zu laden. Mit \usepackage[T1]{fontenc} wählt man diejenige Codierung des Ausgabefonts so, die die meisten europäischen Sprachen (Deutsch, Französisch, Italienisch, Polnisch, etc.) enthält. Dies ist schon deshalb wichtig, weil TeX sonst Wörter mit akzentuierten Zeichen nicht korrekt trennen könnte.

Durch das Laden von \usepackage["encoding"]{inputenc} kann man direkt akzentuierte (Nicht-ASCII) Zeichen über die Tastatur eingeben. Wichtig ist hier, dass „encoding“ mit der TeX-Datei selbst korrespondiert, dies hängt einerseits von der Maschine und andererseit vom genutzten Editor ab. Das gebräuchlichste Encoding heute ist utf8.

Nutzt man nur \usepackage[T1]{fontenc}, und erhält man scheinbar richtigen Output, so ist die Datei vermutlich mit Latin-1 (ISO 8859-1) kodiert. Ausreichend ist dies jedoch nicht. Tippt man ein ß so erhält man SS in der Ausgabe, was falsch ist. Der richtige Aufruf ist daher


\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}

Wie arbeiten die beiden Pakete? Schauen wir uns dies am Beispiel vom „ä“ an. Zuerst muss man sich bewusst sein, dass TeX nichts über Datei-Encodings weiß, es sieht nur die Zeichenzahl. Wenn man in einem auf latin-1 eingestellten Editor ein „ä“ eintippt, speichert der Rechner die Zahl 228.

TeX liest die Datei, findet das Zeichen Nummer 228, die Makros vom inputenc Paket transformieren dies in ein \“a.

Jetzt schlägt die Stunde von fontenc: Der Befehl \“a steht in einer Tabelle der akzentuierten Zeichen des Zeichensatzes, daraus macht fontenc „Setze Zeichen 228“ im aktuell gewählten Font. Beide Zahlen stimmen hier überein, daher wäre für das „ä“ das fontenc ausreichend.

Für ß stimmt dies nicht: Gespeichert wird die Zeichennummer 223, inputenc wandelt dies zu \ss, fontenc transformiert dies zu „Setze Zeichen 255“, an dieser Stelle sitzt bei T1-codierten Fonts das ß

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website