Author Archive

Mehrzeilige Kommentare in LaTeX

Mehrzeilige Kommentare lassen sich mit dem verbatim Paket einfach nutzen.

\documentclass{scrartcl}
\usepackage{verbatim}
\begin{document}
 
\begin{comment}
Hallo, ich
bin ein mehrzeiliger 
Kommentar.
\end{comment}
 
Hallo Welt.
 
\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

Mit Powershell TeX Verzeichnisse aufräumen

Dank des kleinen Powershell-Skripts zur Bestimmung des Skript-Pfades (http://uweziegenhagen.de/?p=2066) können wir uns recht einfach ein Skript schreiben, das alle LaTeX Hilfsdateien löscht.

function Get-ScriptDirectory{
    $Invocation = (Get-Variable MyInvocation -Scope 1).Value
    Split-Path $Invocation.MyCommand.Path
}
 
$path = (Get-ScriptDirectory)
 
cd $path
 
 
remove-item  *.log 
 
remove-item  *.lot 
 
remove-item  *.lof 
 
remove-item *.toc 
 
remove-item *.gz 
 
remove-item *.aux 
 
remove-item *.nav 
 
remove-item *.out 
 
remove-item *.atfi 
 
remove-item *.vrb 
 
remove-item *.snm 
 
remove-item *.tmp

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 4

Hier jetzt der finale Teil unserer Reihe, der Anpassung des originalen komplexen XSL Sheets auf unsere Bedürfnisse:

  • Erstellung eines kompletten, kompilierbaren Dokuments
  • Aufruf der itemize Matches, um itemize Umgebungen zu erzeugen

Die erste Anforderung ist leicht umzusetzen, wir setzen statt des original Match auf das „map“ Element einfach unseren ein:

<xsl:template match="map">
	<xsl:text>
	\documentclass[ngerman]{scrreprt}
	\usepackage[utf8]{inputenc}
	\usepackage[]{babel}
	\usepackage[T1]{fontenc}
	\author{Uwe Ziegenhagen}
	\title{</xsl:text><xsl:value-of select="node/@TEXT"/><xsl:text>}
	\begin{document}
	\maketitle
	\tableofcontents
	</xsl:text>
 
		<xsl:apply-templates/>
 
	<xsl:text>
	\end{document}
	</xsl:text>
</xsl:template>


Was die zweite Anforderung angeht: Wir haben ja schon im dritten Teil unserer Reihe gesehen, dass der Call auf das „itemize“ Matching problemlos ausgeführt werden kann, selbst wenn die entsprechenden Mindmaps viel kleiner sind. Es reicht daher, in der XSLT Datei einfach im subparagraph Teil die IF Abfrage zu entfernen:

<!-- <xsl:if test="current()/node/richcontent/html/body/p/@text"> -->
     <xsl:call-template name="itemization"></xsl:call-template>
<!-- </xsl:if> -->

Hier jetzt die finale Version, wie sie aktuell bei mir im Einsatz ist: mm2latexr_richcontent_v1.02_uwe. Der erzeugte TeX Code ist bei den itemizes nicht besonders gut eingerückt, aber auf absehbare Zeit kann ich damit leben.

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

Seiten im PDF drehen

Setzt man Tabellen im Querformat, muss man den Kopf für die Bildschirmanzeige drehen, was auf Dauer lästig ist. Das pdflscape Paket behebt diesen Umstand, indem es die entsprechenden PDF Seiten ebenfalls dreht.

\documentclass{scrartcl}
\usepackage{pdflscape}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{booktabs}
\usepackage[]{blindtext}
 
\begin{document}
\blindtext
 
\clearpage
 
\begin{landscape}
 
\blindtext
 
\end{landscape}
\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 3

Nach Teil 1 und Teil 2 wird es jetzt Zeit, das XSLT anzupassen. Ziel ist es, ein selbstständig kompilierbares TeX-Dokument zu bekommen und — falls meine XSLT Kenntnisse reichen — den Export für die tieferen Ebenen als itemize zu fixen.

Teil 1 der Anforderung ist recht schnell umgesetzt. Es reicht, den Teil zu editieren, der das map Tag matcht:

<xsl:template match="map">
<xsl:text>
\documentclass[ngerman]{scrreprt}
\usepackage[utf8]{inputenc}
\usepackage[]{babel}
\usepackage[T1]{fontenc}
\author{Uwe Ziegenhagen}
\title{</xsl:text><xsl:value-of select="node/@TEXT"/><xsl:text>}
\begin{document}
\maketitle
\tableofcontents
 
</xsl:text>
 
<xsl:apply-templates/>
 
<xsl:text>
\end{document}
</xsl:text>

Für den zweiten Teil, die korrekte Ausgabe der itemize Umgebungen, müssen wir etwas tiefer in die Materie steigen. Um selbst wieder ins Thema reinzukommen, habe ich ein Minimalbeispiel minimal.xslt des XLST Sheets erstellt, das zum Testen genutzt wird.

Um nicht jedes Mal in Freemind den Export starten zu müssen, habe ich mir die Binärversion von Saxon installiert, der Aufruf lautet dann:

transform -xsl:minimal.xsl -t -s:minimal.mm -o:minimal.tex

Aus der folgenden Freemind Map wird dann der nachfolgende TeX-Code erzeugt:

\documentclass[ngerman]{scrreprt}
\usepackage[utf8]{inputenc}
\usepackage[]{babel}
\usepackage[T1]{fontenc}
\author{Uwe Ziegenhagen}
\title{Minimal}
\begin{document}
\maketitle
\tableofcontents
 
 
 
 
\section{Hallo}		\begin{itemize}	\item A1
			\item A2		\begin{itemize}	\item B1
			\item B2
			\item B3
		\end{itemize}
			\item A3
		\end{itemize}
 
 
\end{document}

Vom Umbruch noch nicht perfekt, es kompiliert aber problemlos. Wie sieht jetzt die entsprechende XSLT-Datei aus:

<?xml version='1.0'?>
 
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>  
<xsl:output omit-xml-declaration="yes" encoding="ISO-8859-1"/>
 
<xsl:template match="map">
	<xsl:text>
	\documentclass[ngerman]{scrreprt}
	\usepackage[utf8]{inputenc}
	\usepackage[]{babel}
	\usepackage[T1]{fontenc}
	\author{Uwe Ziegenhagen}
	\title{</xsl:text><xsl:value-of select="node/@TEXT"/><xsl:text>}
	\begin{document}
	\maketitle
	\tableofcontents
	</xsl:text>
 
		<xsl:apply-templates/>
 
	<xsl:text>
	\end{document}
	</xsl:text>
</xsl:template>
 
 
<xsl:template match="node">
	<xsl:if test="(count(ancestor::node())-2)=0">
	<xsl:apply-templates/>
	</xsl:if>
 
	<xsl:if test="(count(ancestor::node())-2)=1">
		<xsl:text>\section{</xsl:text><xsl:value-of select="@TEXT"/><xsl:text>}</xsl:text>
		<xsl:if test="current()/node">
			<xsl:call-template name="itemization"></xsl:call-template>
		</xsl:if>
	</xsl:if>
</xsl:template>
 
<xsl:template name="itemization">
	<xsl:param name="i" select="current()/node"/>
	<xsl:text>		\begin{itemize}</xsl:text>
	<xsl:for-each select="$i">
		<xsl:choose>
			<xsl:when test="@TEXT">
				<xsl:text>	\item </xsl:text><xsl:value-of select="@TEXT"/><xsl:text></xsl:text>
			</xsl:when>
			<xsl:otherwise>
			</xsl:otherwise>
		</xsl:choose>
		<xsl:if test="current()/node">
			<xsl:call-template name="itemization"></xsl:call-template>
		</xsl:if>
		<xsl:text>
		</xsl:text>	
	</xsl:for-each>
	<xsl:text>\end{itemize}</xsl:text>
	</xsl:template>
 
</xsl:stylesheet>

Es ist das gleiche map Matching, wie oben erwähnt. Von den Node Matches habe ich die meisten entfernt, nur das 0er und 1er sind übriggeblieben. Einen Unterschied gibt es: im 1er Matching wird explizit das itemize Matching aufgerufen: . Dieses wiederum habe ich der originalen XSL Datei von http://sites.google.com/site/freemind2beamer/Home/freemind2latex entnommen, hier fanden keine Anpassungen statt.

In Teil 4 werden wir das erlangte Wissen dann auf die ursprüngliche XSLT Datei anwenden und das Beispiel fertigstellen.

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

Den Pfad des Powershell-Skripts ermitteln

Ich möchte per Mausklick auf eine Powershell-Datei alle LaTeX Dateien in dem entsprechenden Verzeichnis kompilieren. Dazu muss das Skript das Verzeichnis kennen, in dem es liegt. Auf http://leftlobed.wordpress.com/2008/06/04/getting-the-current-script-directory-in-powershell/ habe ich eben eine Lösung gefunden, die mir diesen Pfad ausgibt, zusammen mit dem Messagebox Code ist dies der erste Schritt zum „TeXe alles“ Skript.

function Get-ScriptDirectory{
    $Invocation = (Get-Variable MyInvocation -Scope 1).Value
    Split-Path $Invocation.MyCommand.Path
}
 
$wshshell = new-object -comobject wscript.shell
$Answer = $wshshell.popup((Get-ScriptDirectory),0,"Aktueller Pfad",4)

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

Mit Powershell Ordner überwachen

Vor kurzem wurde ich gebeten, bei der Überprüfung von Ordnern im Dateisystem zu helfen. Ziel war die Ermittlung, wann in bestimmten Unterverzeichnissen einer Dateistruktur Dateien hinzugefügt oder gelöscht werden.

Zur Erläuterung: In C:\abc liegen viele gleichartige Ordner, die alle einen „A-def“ Unterordner haben, der wiederum einen Unterordner „2012“ hat. Für alle in diesen „2012“ Ordnern gefundenen Dateien werden der Dateiname und Zeitstempel in eine CSV Datei geschrieben. Diese kann dann einfach und sehr übersichtlich mit einem Excel-Pivot ausgewertet werden.

# Resette die Ausgabe
Clear-History
Clear-Host
# Ausgabepfad der Datei
$outputpath = "c:\FoundFiles.csv"
 
# hier liegen die Ordner
cd c:\abc\
 
# warte x Sekunden bis zum ersten Lauf bzw. zwischen den Läufen.
$waitseconds = 1
# wie oft soll gecheckt werden
$runs = 1
# zähle die Läufe mit
$counter = 0
 
while($counter -le $runs){
 start-sleep -s $waitseconds
 $counter++
 # Zeitstempel
 $timestamp= get-date -uformat "%Y%m%d-%H:%M"
 
 #hole die Liste der Ordner
 $folders = gci
 
 foreach ($i in $folders){
   # prüfe in den "A-def" Ordnern, ob "2012" vorhanden ist 
   cd "$i/A-def"
        if (!(Test-Path -path "2012")){
            # no 2012 folder found
        } else {
            # lese alle Dateien ein
            $files = gci "2012"
            foreach ($j in $files){
                # Schreibe Dateiname und Zeitstempel in die Datei, überschreibe nicht.
                $i.name + "`t" + $timestamp + "`t" + $j.fullname  | out-file $outputpath -append -Width 300
            }
    }
cd c:\abc\
}
}

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