22. Januar 2012, 08:40
Die programmatische Erstellung von LaTeX-Code durch ein Framework hat mich schon immer interessiert, über ein stackexchange Posting (http://tex.stackexchange.com/questions/41875/generate-latex-truth-table-with-python-cheetah) wurde jetzt auch mein Interesse an der Erzeugung durch Python geweckt.
Hier ein Beispiel für die Erzeugung von LaTeX durch das Python Cheetah framework:
from Cheetah.Template import Template
definition = """\\documentclass{article}
\\title{$paper.title}
\\author{$author.name}
\\begin{document}
\\maketitle
\\end{document}"""
class author:
"""A simple example author class"""
name = "Uwe Ziegenhagen"
def f(self):
return 'Hello World'
class paper:
"""A simple example paper class"""
title = "My First paper"
def f(self):
return 'hello world'
uwe = author()
mypaper = paper()
print Template(definition, searchList=[{'author' : uwe,'paper' : mypaper}])
Erzeugt wird dadurch folgendes Dokument:
\documentclass{article}
\title{My First paper}
\author{Uwe Ziegenhagen}
\begin{document}
\maketitle
\end{document}
Die programmatische Erstellung von LaTeX-Code durch ein Framework hat mich schon immer interessiert, über ein stackexchange Posting (http://tex.stackexchange.com/questions/41875/generate-latex-truth-table-with-python-cheetah) wurde jetzt auch mein Interesse an der Erzeugung durch Python geweckt.
Hier ein Beispiel für die Erzeugung von LaTeX durch das Python Cheetah framework:
from Cheetah.Template import Template
definition = """\\documentclass{article}
\\title{$paper.title}
\\author{$author.name}
\\begin{document}
\\maketitle
\\end{document}"""
class author:
"""A simple example ...
21. Januar 2012, 08:43
PDFlatex unterstützt die Ausgabe unterschiedlicher Grafikversionen für Print und Screen. Die einzige Bedingung ist, dass beide Grafiken die gleiche Breite und Höhe haben.
Hier ein Beispiel:
\documentclass{scrartcl}
\usepackage[]{graphicx}
\begin{document}
\includegraphics[print=print.jpg]{draft.jpg}
\end{document}
PDFlatex unterstützt die Ausgabe unterschiedlicher Grafikversionen für Print und Screen. Die einzige Bedingung ist, dass beide Grafiken die gleiche Breite und Höhe haben.
Hier ein Beispiel:
\documentclass{scrartcl}
\usepackage{graphicx}
\begin{document}
\includegraphics{draft.jpg}
\end{document}
20. Januar 2012, 23:45
Wie man mit lpic.sty Formulare füllt, habe ich in einem früheren Blogeintrag bereits gezeigt: (http://uweziegenhagen.de/?p=1208). Hier ein neues Beispiel, dieses Mal für einen Kaufvertrag über ein gebrauchtes Rad, den man unter www.vsf.de/fileadmin/vsf/downloads/kaufvertragprivat.pdf herunterladen kann.
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage[left=0cm,right=0cm,top=0cm,bottom=0cm]{geometry}
\usepackage[]{graphicx}
\usepackage[]{lpic}
\setlength{\parindent}{0pt}
\begin{document}
\begin{lpic}[]{kaufvertragprivat(0.999)} % coords(20)
\lbl[t]{41,248;\textcolor{black}{\small \textbf{Max Mustermann}}}
\lbl[t]{130,248;\textcolor{black}{\small \textbf{Martina Musterfrau}}}
\lbl[t]{55,240;\textcolor{black}{\small \textbf{Musterstr. 2, 12345 Musterstadt}}}
\lbl[t]{140,240;\textcolor{black}{\small \textbf{Musterweg 23q, 12345 Musterstadt}}}
\lbl[t]{50,230;\textcolor{black}{\small \textbf{Personalausweis, 1234567890}}}
\lbl[t]{40,160;\textcolor{black}{\small \textbf{Oranje}}}
\lbl[t]{44,150;\textcolor{black}{\small \textbf{Hollandrad}}}
\lbl[t]{41,140;\textcolor{black}{\small \textbf{28 Zoll}}}
\lbl[t]{45,131;\textcolor{black}{\small \textbf{schwarzblau}}}
\lbl[t]{40,122;\textcolor{black}{\small \textbf{12345}}}
\lbl[t]{40,100;\textcolor{black}{\small \textbf{Beleuchtung}}}
\lbl[t]{41,95;\textcolor{black}{\small \textbf{Gepäckträger}}}
\lbl[t]{41,90;\textcolor{black}{\small \textbf{Schutzbleche}}}
\lbl[t]{39,85;\textcolor{black}{\small \textbf{Kopfstütze}}}
\lbl[t]{42,80;\textcolor{black}{\small \textbf{mehr Zubehör}}}
\lbl[t]{42,75;\textcolor{black}{\small \textbf{mehr Zubehör}}}
\lbl[t]{42,70;\textcolor{black}{\small \textbf{mehr Zubehör}}}
\lbl[t]{60,59;\textcolor{black}{\small \textbf{Musterstadt, den \today}}}
\lbl[t]{167,71;\textcolor{black}{\Large \textbf{--1234--}}}
\lbl[t]{113,83;\textcolor{black}{\Large X}}
\lbl[t]{113,121;\textcolor{black}{\Large X}}
\lbl[t]{113,116;\textcolor{black}{\Large X}}
\lbl[t]{113,116;\textcolor{black}{\Large X}}
\lbl[t]{113,126;\textcolor{black}{\Large X}}
\lbl[t]{113,150;\textcolor{black}{\Large X}}
\lbl[t]{113,155;\textcolor{black}{\Large X}}
\end{lpic}
\end{document}
Wie man mit lpic.sty Formulare füllt, habe ich in einem früheren Blogeintrag bereits gezeigt: (http://uweziegenhagen.de/?p=1208). Hier ein neues Beispiel, dieses Mal für einen Kaufvertrag über ein gebrauchtes Rad, den man unter www.vsf.de/fileadmin/vsf/downloads/kaufvertragprivat.pdf herunterladen kann.
\documentclass{scrartcl}
\usepackage{inputenc}\usepackage{fontenc}
\usepackage{babel}
\usepackage{geometry}
\usepackage{graphicx}
\usepackage{lpic}
\setlength{\parindent}{0pt}
\begin{document}
\begin{lpic}{kaufvertragprivat(0.999)} % coords(20)
\lbl{41,248;\textcolor{black}{\small \textbf{Max Mustermann}}}
\lbl{130,248;\textcolor{black}{\small \textbf{Martina Musterfrau}}}
\lbl{55,240;\textcolor{black}{\small \textbf{Musterstr. 2, 12345 Musterstadt}}}
\lbl{140,240;\textcolor{black}{\small \textbf{Musterweg 23q, 12345 Musterstadt}}}
\lbl{50,230;\textcolor{black}{\small \textbf{Personalausweis, 1234567890}}}
\lbl{40,160;\textcolor{black}{\small \textbf{Oranje}}}
\lbl{44,150;\textcolor{bla
20. Januar 2012, 23:43
Zu meinen aktuellen Aufgaben gehört es gelegentlich, Aufträge an den IT-Dienstleister in einem bestimmten Format zu verfassen. Nachdem ich einige Male die notwendigen Texte mühevoll zusammenkopiert hatte, kam der Wunsch nach der Automatisierung des ganzen auf. Mit ein wenig VBA Code und Google (http://www.exceltip.com/show_tip/Applications_-_Word,_Outlook_in_VBA/Control_Outlook_from_Excel_using_VBA_in_Microsoft_Excel/464.html) ist es recht einfach, die E-Mails zusammenzubauen.
Hier ein einfaches Beispiel: Aus der jeweils aktiven Zeile sollen E-Mail Adresse, Betreff und Body ausgelesen und in eine E-Mail gesetzt werden, die aktive Zeile ermittele ich dabei über currentrow = ActiveCell.Row.

Der Code, der unter dem Link verfügbar ist, benötigt eine Referenz zur Microsoft Outlook Object Library, diese lässt sich über Extras => Verweise einfügen. Wenn wir das Beispiel auf unser Szenario anpassen, erhalten wir:
Sub SendAnEmailWithOutlook()
currentrow = ActiveCell.Row
Dim OLF As Outlook.MAPIFolder, olMailItem As Outlook.MailItem
Dim ToContact As Outlook.Recipient
Set OLF = GetObject("", _
"Outlook.Application").GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
Set olMailItem = OLF.Items.Add ' erstellt neue Mail
With olMailItem
.Subject = Cells(currentrow, 3).Value ' Betreff
Set ToContact = .Recipients.Add(Cells(currentrow, 2).Value) ' Empfänger
.Body = Cells(currentrow, 4).Value ' Body
.Save ' nur Speichern, nicht sofort senden
End With
Set ToContact = Nothing
Set olMailItem = Nothing
Set OLF = Nothing
End Sub
Zu meinen aktuellen Aufgaben gehört es gelegentlich, Aufträge an den IT-Dienstleister in einem bestimmten Format zu verfassen. Nachdem ich einige Male die notwendigen Texte mühevoll zusammenkopiert hatte, kam der Wunsch nach der Automatisierung des ganzen auf. Mit ein wenig VBA Code und Google (http://www.exceltip.com/show_tip/Applications_-_Word,_Outlook_in_VBA/Control_Outlook_from_Excel_using_VBA_in_Microsoft_Excel/464.html) ist es recht einfach, die E-Mails zusammenzubauen.
Hier ein einfaches Beispiel: ...
18. Januar 2012, 22:03
Im heutigen Artikel möchte ich Autokey vorstellen, das ich unter Ubuntu 11.10 benutze und das auch zumindest die von mir genutzten Autohotkey-Funktionen abdeckt.
Installation
Über sudo apt-get install autokey kann man zwar Autokey installieren, ich bevorzuge jedoch die ppa-Version, da diese unter Umständen aktueller ist.
Was muss man dafür tun? Nicht viel:
sudo add-apt-repository ppa:cdekter/ppa
sudo apt-get update
sudo apt-get install autokey
Ein Hinweis: Nach der Installation taucht das autokey eventuell nicht in der Unity Oberfläche auf, obwohl der Prozess im Hintergrund läuft. In diesem Fall - drücken, dann sollte das Menü angezeigt werden. Unter Ubuntu 11.10 hatte ich zusätzlich das Problem, dass autokey die Einstellung zum automatischen Start nicht speichern wollte, weil der Pfad /home/uwe/.config/autostart/ fehlte, die manuelle Ordneranlage half in diesem Fall.
Im nächsten Teil dann mehr zur Bedienung von Autokey.
Im heutigen Artikel möchte ich Autokey vorstellen, das ich unter Ubuntu 11.10 benutze und das auch zumindest die von mir genutzten Autohotkey-Funktionen abdeckt.
Installation
Über sudo apt-get install autokey kann man zwar Autokey installieren, ich bevorzuge jedoch die ppa-Version, da diese unter Umständen aktueller ist.
Was muss man dafür tun? Nicht viel:
sudo add-apt-repository ppa:cdekter/ppa
sudo apt-get update
sudo ...
11. Januar 2012, 22:01
Hier ein kurzer Schnipsel, wie man Zeichen in Dateinamen ersetzen kann. Für die tatsächliche Umbenennung ist das “-whatif” zu entfernen.
$files = gci -Recurse | ? {$_.PSisContainer -eq $false} | ? {$_.name -match "~"}
foreach ($i in $files){
rni -WhatIf $i.fullname $i.Name.Replace("~","_")
}
Hier ein kurzer Schnipsel, wie man Zeichen in Dateinamen ersetzen kann. Für die tatsächliche Umbenennung ist das "-whatif" zu entfernen.
$files = gci -Recurse | ? {$_.PSisContainer -eq $false} | ? {$_.name -match "~"}
foreach ($i in $files){
rni -WhatIf $i.fullname $i.Name.Replace("~","_")
}
10. Januar 2012, 22:19
Auf tex.stackexchange kam heute die Frage auf, wie man beliebig lange Menübefehl-Sequenzen mit LaTeX darstellen kann (http://tex.stackexchange.com/questions/40613/create-a-command-for-menu-sequences). Da ich dies auch gelegentlich benötige, hier eine Kopie der Lösung:
\documentclass{article}
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\begin{document}
\newcounter{menucount}\newcounter{curitem}% Counters
\newcommand{\menuitem}{\texttt}% Menu item formatting
\newcommand{\menusep}{\ensuremath{\rightarrow}}% Menu separator
\newcommand{\menuend}{\relax}% Menu end
\newcommand{\menulist}[1]{% \menulist{<menu list>}
\setcounter{menucount}{0}\setcounter{curitem}{0}% Reset menucount & curitem
\renewcommand*{\do}[1]{\stepcounter{menucount}}%
\menulistparser{#1}% Count menu items
\renewcommand*{\do}[1]{\menuitem{##1}\stepcounter{curitem}\ifnumless{\value{curitem}}{\value{menucount}}{\menusep}{\menuend}}%
\menulistparser{#1}% Process list
}
\DeclareListParser{\menulistparser}{:}% List separator is ':'
\menulist{File:New:Class}% 3 menu items
\menulist{Tools:Options:Advanced:Properties:Document}% 5 menu items
\menulist{}% 0 menu items/empty list
\menulist{Help}% 1 menu item
\renewcommand{\menusep}{~\rule{1ex}{1ex}~}\renewcommand{\menuend}{!}% Different separator and end
\menulist{Your:Menu:Sequence:Here}
\end{document}
Auf tex.stackexchange kam heute die Frage auf, wie man beliebig lange Menübefehl-Sequenzen mit LaTeX darstellen kann (http://tex.stackexchange.com/questions/40613/create-a-command-for-menu-sequences). Da ich dies auch gelegentlich benötige, hier eine Kopie der Lösung:
\documentclass{article}
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\begin{document}
\newcounter{menucount}\newcounter{curitem}% Counters
\newcommand{\menuitem}{\texttt}% Menu item formatting
\newcommand{\menusep}{\ensuremath{\rightarrow}}% Menu separator
\newcommand{\menuend}{\relax}% Menu end
\newcommand{\menulist}{% \menulist{}
\setcounter{menucount}{0}\setcounter{curitem}{0}% Reset menucount & curitem
\renewcommand*{\do}{\stepcounter{menucount}}%
\menulistparser{#1}% Count menu items
\renewcommand*{\do}{\menuitem{##1}\stepcounter{curitem}\ifnumless{\value{curitem}}{\value{menucount}}{\menusep}{\menuend}}%
...
10. Januar 2012, 21:45
Das mdframed Paket bietet eine Vielzahl von Möglichkeiten, Text oder andere Inhalte mit Rahmen zu versehen. Die folgenden Beispiele sind der Dokumentation des Pakets entnommen:
\documentclass{scrartcl}
\usepackage[]{mdframed}
\begin{document}
\begin{mdframed}
Hallo Welt!\newline Foobar
\end{mdframed}
\newmdenv [linecolor=red, frametitle=Infobox,leftmargin=3cm,rightmargin=3cm]{infobox}
\begin{infobox}[ backgroundcolor=yellow ]
foo
foo
foo
\end{infobox}
\begin{verbatim}
Hallo
Welt
\end{verbatim}
\surroundwithmdframed[linewidth=2pt ]{verbatim}
\begin{verbatim}
Hallo
Welt
\end{verbatim}
\mdfdefinestyle{mystyle}{leftmargin=0pt ,linecolor=blue}
\begin{mdframed}[style=mystyle]
foo
\end{mdframed}
\newmdtheoremenv [linecolor=blue]{lemma}{Lemma}[section]
\section{abc}
\begin{lemma}[Some title]
foo
foo
foo
foo
foo
foo
\end{lemma}
\end{document}

Das mdframed Paket bietet eine Vielzahl von Möglichkeiten, Text oder andere Inhalte mit Rahmen zu versehen. Die folgenden Beispiele sind der Dokumentation des Pakets entnommen:
\documentclass{scrartcl}
\usepackage{mdframed}
\begin{document}
\begin{mdframed}
Hallo Welt!\newline Foobar
\end{mdframed}
\newmdenv {infobox}
\begin{infobox}
foo
foo
foo
\end{infobox}
\begin{verbatim}
Hallo
Welt
\end{verbatim}
\surroundwithmdframed{verbatim}
\begin{verbatim}
Hallo
Welt
\end{verbatim}
\mdfdefinestyle{mystyle}{leftmargin=0pt ,linecolor=blue}
\begin{mdframed}
foo
\end{mdframed}
\newmdtheoremenv {lemma}{Lemma}
\section{abc}
\begin{lemma}
foo
foo
foo
foo
foo
foo
\end{lemma}
\end{document}
7. Januar 2012, 08:08
Mit dem relativ neuen tagging Paket lassen sich recht einfach unterschiedliche Versionen eines Textes erzeugen. Das folgende Beispiel soll dies verdeutlichen: Je nachdem, wie \usetag gesetzt ist, wird entweder der als “contribution” oder der als “distribution” markierte Text gesetzt.
\documentclass{scrartcl}
\usepackage[]{tagging}
\begin{document}
\usetag{distribution}
\tagged{contribution}{Please pay the amount of 100 Euro to the following account}
\tagged{distribution}{We will transfer 100 Euro to the following account}
\end{document}
Mit dem relativ neuen tagging Paket lassen sich recht einfach unterschiedliche Versionen eines Textes erzeugen. Das folgende Beispiel soll dies verdeutlichen: Je nachdem, wie \usetag gesetzt ist, wird entweder der als "contribution" oder der als "distribution" markierte Text gesetzt.
\documentclass{scrartcl}
\usepackage{tagging}
\begin{document}
\usetag{distribution}
\tagged{contribution}{Please pay the amount of 100 Euro to the following account}
\tagged{distribution}{We will transfer 100 Euro to ...