Archiv für die Kategorie ‘Tipps & Tricks’

Mit Beamer Handouts und Folien in einem Rutsch erstellen

Sonntag, 15. August 2010

Mit dem Beamer Paket lässt sich sowohl eine Präsentation als auch ein Artikel oder Handout in einem Dokument setzen, im Beamer-Handbuch ist es sehr gut erklärt. Für die Ungeduldigen hier ein kleines Beispiel, das auf dem Beispiel aus der Dokumentation basiert.

Dazu benötigen wir zwei Rahmendokumente, einmal für die Präsentation und einmal für den Artikel.

Die ignorenonframetext Option sorgt dafür, dass jeglicher Text, der nicht innerhalb einer Frame-Umgebung steht, ignoriert wird.

% Speichern unter beamerslides.tex
\documentclass[ignorenonframetext]{beamer}
\listfiles
\input{main}
\end{document}

Das Rahmendokument für den Artikel lädt das beamerarticle Paket, das beamer-spezifische Befehle passend umdefiniert. Das \setjobnamebeamerversion Kommando legt den Namen der Präsentationsdatei fest, was nützlich ist, wenn einzelne Folien als Bilder in den Artikel eingefügt werden sollen.

% Speichern unter beamerarticle.tex
\documentclass{article}
\usepackage{beamerarticle}
\setjobnamebeamerversion{beamerslides}
\input{main.tex}
\end{document}

Im Hauptdokument gibt es zwei mode-Teile, in denen für die einzelnen Dokumente spezifische Pakete geladen werden können.

% Speichern unter main.tex
\mode<article>{\usepackage{fullpage}}
\mode<presentation>{\usetheme{Berlin}}
% beide Dokumente
\usepackage[english]{babel}
\begin{document}
\section{Introduction}
Dieser Text ist nur Teil des Artikels.
 
\begin{frame}
\begin{itemize}
 \item Hello
 \item World
 \item Foobar
\end{itemize}
\end{frame}
 
Dieser Text ist nur Teil des Artikels.
 
% section in beiden Dokumenten
\section{Main Part}
 
%subsection nur im Artikel
\subsection<article>{only in article}
 
\begin{frame}
\begin{itemize}
\item In beiden Dokumenten
\item diese Zeile auch
\only<article>{\item nur im Artikel}
\end{itemize}
\end{frame}

LaTeX-Formulare mit eforms erstellen

Montag, 24. Mai 2010

Hier ein kurzes Beispiel für das eforms-Paket:

\documentclass[12pt]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{hyperref}
\usepackage[pdftex]{eforms}
\begin{document}
\begin{Form}
 
\begin{tabular}{rl}
	\checkBox{a}{12pt}{12pt}{a} & Hallo Welt \\
\end{tabular}
 
\end{Form}
\end{document}

Tastaturkürzel für TeX mit ac’tivaid – Teil 2

Samstag, 22. Mai 2010

Für die Definition von Datumswerten bringt ac’tivaid bereits ein vordefiniertes morgen# mit, das das morgige Datum ausgibt. Ausgehend davon habe ich mir auf ü#, üü#, ä#, ää# und ö# und öö# verschiedene Daten gelegt. So gibt ä# das aktuelle Datum in der Form TT.MM.JJJJ aus, ää# in der ISO-Notation JJJJMMTT.

   Morgen = %A_Now%
   EnvAdd, Morgen, 0, Days
   FormatTime, Morgen, %Morgen%, dd.MM.yyyy
   Send, %Morgen%

Über EnvAdd, Morgen, 0, Days lässt sich steuern, wieviele Tage hinzuaddiert oder abgezogen werden sollen. (Für das aktuelle Datum kann das sicher entfallen, der leichteren Wartbarkeit wegen habe ich es aber stehen lassen).

Mehr Informationen zur Formatierung von Datumswerten findet man unter http://de.autohotkey.com/docs/commands/FormatTime.htm.

Tastaturkürzel für TeX mit ac’tivaid – Teil 1

Sonntag, 09. Mai 2010

Mit der kleinen aber genialen ac’tivaid Software und ihrer Hotstrings-Erweiterung lassen sich verschiedenste Tastaturkürzel definieren, die in allen Windows-Programmen funktionieren. Ich nutze die Software vor allem, um mir TeX-Kürzel zu definieren, die die Arbeit mit TeXniccenter vereinfachen.

Installation

  1. Von http://www.heise.de/ct/projekte/Windows-weitergedacht-ac-tivAid-284115.html herunterladen und installieren.
  2. In den Optionen unter Erweiterungen die Hotstrings-Extension aktivieren

Dann kann man sich aufmachen, entsprechende Kürzel zu definieren. Folgender Schnipsel (abgelegt unter “doc#” mit gewählter Option “direkt ersetzen”) schafft zum Beispiel ein minimales LaTeX-Dokument:

\documentclass{{}scrartcl{}}
\begin{{}document{}}

Geschweifte Klammern müssen auch geklammert werden, da Hotstrings diesen eine besondere Bedeutung zuweist. In geschweiften Klammern lassen sich nämlich Hotstrings-Befehle ablegen, die den Cursor steuern oder Text markieren. So setzt folgender Schnipsel ein \end{} und bewegt den Cursor um eine Stelle nach links, damit der Nutzer direkt den Namen der Umgebung eingeben kann.

\end{{}{}}{LEFT}

Eine Erweiterung dessen ist die zusätzliche Angabe, wieviele Schritte nach links gegangen werden soll, folgender Schnipsel setzt eine braune quote-Umgebung

\begin{{}quote{}}\textcolor{{}brown{}}{{}{}}\end{{}quote{}}{LEFT 12}

Markieren lassen sich Texte auch sehr einfach, so setzt folgende Zeile “Sehr geehrte Damen und Herren” und markiert Damen und Herren, damit dies sofort überschrieben werden kann, falls notwendig.

Sehr geehrte Damen und Herren{Left 17}+{Right 17}

Schicke Tabellen mit TikZ

Dienstag, 27. April 2010

Hier ein schönes Beispiel, wie man sehr bunte Tabellen mit LaTeX und TikZ erstellen kann: http://texblog.net/latex-archive/graphics/tikz-table/

Pocketmod mit LaTeX erstellen

Donnerstag, 15. April 2010

Momentan bin ich dabei, mit LaTeX ein Pocketmod zu erstellen, einen Papier-Organizer der durch geschicktes Schneiden und Falten einer DIN A4 Seite entsteht: http://repocketmod.com/.

Da die Ausrichtung und Anordung der acht Seiten auf dem Blatt sehr individuell ist, verspricht dies recht interessant zu werden. Hier mein bisheriges Ergebnis:

Das Dokument zur Ausgabe eines 8-Seiten PDFs auf einer Seite:

\documentclass{scrartcl}
\usepackage[screen,paperheight=21cm,paperwidth=29.7cm,
 left=0mm,right=0mm,top=0mm,bottom=0mm]{geometry}
\usepackage[]{pdfpages}
\begin{document}
 
\includepdf[pages=-,nup=4x2,scale=1,frame=true]%
{8seitentext2.pdf}
 
\end{document}

Ein erstes Beispiel (ohne rotierte Seiten) für den umzuarrangierenden Text:

\documentclass{scrartcl}
\usepackage{forloop}
\usepackage{graphicx}
\pagestyle{empty}
\newcounter{ct} 
\begin{document}
 
\forloop{ct}{1}{\value{ct} < 9}{%
\begin{center}
\scalebox{80}{\thepage}
\end{center}
\clearpage
}
\end{document}

Der Text mit richtiger Ausrichtung und Anordnung der Seiten:

\documentclass{scrartcl}
\usepackage[]{graphicx}
\pagestyle{empty}
\newcounter{ct} 
\begin{document}
\begin{center}
\scalebox{40}{6}
\end{center}
\clearpage
\begin{center}
\scalebox{40}{7}
\end{center}
\clearpage
\begin{center}
\scalebox{40}{8}
\end{center}
\clearpage
\begin{center}
\scalebox{40}{1}
\end{center}
\clearpage
\begin{center}
\scalebox{40}{\rotatebox{180}{5}}
\end{center}
\clearpage
\begin{center}
\scalebox{40}{\rotatebox{180}{4}}
\end{center}
\clearpage
\begin{center}
\scalebox{40}{\rotatebox{180}{3}}
\end{center}
\clearpage
\begin{center}
\scalebox{40}{\rotatebox{180}{2}}
\end{center}
\clearpage
\end{document}

Da mich meine LaTeX-Kenntnisse verlassen, hab ich mal in de.comp.text.tex gepostet.

Nachtrag: Der Hinweis aus d.c.t.t auf pdfjamund pdfjam-pocketmod,ein in pdfjam verfügbares Skript hat mich an pdftk erinnert, das auch unter Windows läuft. Hier die Lösung:

% Zerlegen der PDF Datei
pdftk 8seitentext.pdf burst

% Rotieren der vier Seiten um 180 Grad
pdftk pg_0005.pdf cat 1-endS output out5.pdf

pdftk pg_0004.pdf cat 1-endS output out4.pdf

pdftk pg_0003.pdf cat 1-endS output out3.pdf

pdftk pg_0002.pdf cat 1-endS output out2.pdf

% Mergen in der richtigen Reihenfolge
pdftk pg_0006.pdf pg_0007.pdf pg_0008.pdf pg_0001.pdf out5.pdf ou
t4.pdf out3.pdf out2.pdf cat output fertig.pdf

Dieses Dokument wird dann über das pdfpages Paket zu 8 auf 1 Seite eingebunden

\documentclass{scrartcl}
\usepackage[screen,paperheight=21cm,paperwidth=29.7cm, left=0mm,right=0mm,top=0mm,bottom=0mm]{geometry}
\usepackage[]{pdfpages}
\begin{document}
 
\includepdf[pages=-,nup=4x2,scale=1,frame=true]{fertig.pdf}
 
\end{document}

Eine aufwändigere, aber elegantere Lösung, die innerhalb eines LaTeX-Laufs erledigt werden kann, ist die folgende. Sie nutzt das pgfpagesPaket von Till Tantau, das in den Ausgabeprozess der einzelnen Seiten eingreift:

\documentclass[21pt]{scrartcl}
\usepackage[]{forloop}
\usepackage[]{blindtext}
\setlength{\parindent}{0pt}
\usepackage[]{lmodern}
\newcounter{ct} 
\usepackage{pgfpages}
 
  \edef\pgfpageoptionheight{\the\paperwidth} % landscaped by default
  \edef\pgfpageoptionwidth{\the\paperheight}
  \def\pgfpageoptionborder{0pt}
  \def\pgfpageoptionfirstshipout{1}
 
  \pgfpagesphysicalpageoptions
  {%
    logical pages=8,%
    physical height=\pgfpageoptionheight,%
    physical width=\pgfpageoptionwidth,%
    current logical shipout=\pgfpageoptionfirstshipout%
  }
 
    \pgfpageslogicalpageoptions{1}
    {%
      border shrink=\pgfpageoptionborder,%
      resized width=.25\pgfphysicalwidth,%
      border code=\pgfusepath{stroke},%
      resized height=0.5\pgfphysicalheight,%
      center=\pgfpoint{.875\pgfphysicalwidth}{.75\pgfphysicalheight}%
    }%
    \pgfpageslogicalpageoptions{2}
    {%
      border shrink=\pgfpageoptionborder,%
      resized width=.25\pgfphysicalwidth,%
      border code=\pgfusepath{stroke},%
      rotation=180,%      
      resized height=0.5\pgfphysicalheight,%
      center=\pgfpoint{.875\pgfphysicalwidth}{.25\pgfphysicalheight}%
    }%
 
    \pgfpageslogicalpageoptions{3}
    {%
      border shrink=\pgfpageoptionborder,%
      resized width=.25\pgfphysicalwidth,%
      border code=\pgfusepath{stroke},%
      rotation=180,%      
      resized height=0.5\pgfphysicalheight,%
      center=\pgfpoint{.625\pgfphysicalwidth}{.25\pgfphysicalheight}%
    }%
    \pgfpageslogicalpageoptions{4}
    {%
      border shrink=\pgfpageoptionborder,%
      resized width=.25\pgfphysicalwidth,%
      border code=\pgfusepath{stroke},%
      rotation=180,%      
      resized height=0.5\pgfphysicalheight,%
      center=\pgfpoint{.375\pgfphysicalwidth}{.25\pgfphysicalheight}%
    }%
 
    \pgfpageslogicalpageoptions{5}
    {%
      border shrink=\pgfpageoptionborder,%
      resized width=.25\pgfphysicalwidth,%
      border code=\pgfusepath{stroke},%
      rotation=180,%
      resized height=0.5\pgfphysicalheight,%
      center=\pgfpoint{.125\pgfphysicalwidth}{.25\pgfphysicalheight}%
    }%
    \pgfpageslogicalpageoptions{6}
    {%
      border shrink=\pgfpageoptionborder,%
      resized width=.25\pgfphysicalwidth,%
      border code=\pgfusepath{stroke},%
      resized height=0.5\pgfphysicalheight,%
      center=\pgfpoint{.125\pgfphysicalwidth}{.75\pgfphysicalheight}%
    }%
 
    \pgfpageslogicalpageoptions{7}
    {%
      border shrink=\pgfpageoptionborder,%
      resized width=.25\pgfphysicalwidth,%
      border code=\pgfusepath{stroke},%
      resized height=0.5\pgfphysicalheight,%
      center=\pgfpoint{.375\pgfphysicalwidth}{.75\pgfphysicalheight}%
    }%
    \pgfpageslogicalpageoptions{8}
    {%
      border shrink=\pgfpageoptionborder,%
      resized width=.25\pgfphysicalwidth,%
      border code=\pgfusepath{stroke},%
      resized height=0.5\pgfphysicalheight,%
      center=\pgfpoint{.625\pgfphysicalwidth}{.75\pgfphysicalheight}%
    }%
 
 
\begin{document}
 
\forloop{ct}{1}{\value{ct} < 9}{%
\blindtext
\clearpage
 
}
\end{document}

Nachtrag 2: Meine pgfpages-Version weist einen Fehler beim Rotieren von Seiten auf, der durch folgenden Patch der pgfpages.sty behoben werden kann.

        % alt, geht nicht
        %\expandafter\ifx\csname pgfpages@p@\the\pgf@cpn @rotation\endcsname\relax%
         % \pgfscope%
        %\else%
         % \pgflowlevel{\pgftransformrotate{\csname pgfpages@p@\the\pgf@cpn @rotation\endcsname}}%
        %\fi%

        \pgfscope% geht
				\expandafter\ifx\csname pgfpages@p@\the\pgf@cpn @rotation\endcsname\relax%
        	\else%
          \pgflowlevel{\pgftransformrotate{\csname pgfpages@p@\the\pgf@cpn @rotation\endcsname}}%
        \fi%

Subsubsubsection oder wenn die Gliederungsebenen in LaTeX nicht ausreichen

Sonntag, 11. April 2010

Wenn die vorgegebenen Gliederungsebenen nicht ausreichen in der verwendeten Dokumentenklasse, findet man bei http://www.asselmeyer.com/latex-gliederung-4ter-ordnung eine Lösung, die über das Umdefinieren von \paragraph funktioniert. Weil es mich schon immer mal interessiert hat, wie man eine komplett neue Ebene erstellt, hier ein Beispiel, entstanden mit viel Probieren und Fragen:

\documentclass{article}
 
\usepackage[]{blindtext}
\usepackage[]{forloop}
\usepackage{titlesec}
\usepackage[]{titletoc}
 
\titlecontents{subsubsubsection}[9em]{}{\contentslabel{3.9em}}%
{\hspace*{-1.2em}}{\titlerule*[0.675pc]{.}\contentspage}
 
\makeatletter
\newcounter{subsubsubsection}[subsubsection]
\setcounter{subsubsubsection}{1}
\setcounter{secnumdepth}{4} 
\setcounter{tocdepth}{5} 
\renewcommand{\thesubsubsubsection}{\thesubsubsection.\@arabic\c@subsubsubsection}
 
\titleclass{\subsubsubsection}{straight}[\subsubsection]
\titleformat{\subsubsubsection}{\bf}{\thetitle}{1em}{}[]						
\titlespacing{\subsubsubsection}{0pt}{3.25ex plus 1ex minus 0.2ex}{1.5ex plus 0.2ex} 
 
\makeatother
\newcounter{ct} 
 
\begin{document}
 
\tableofcontents
 
\forloop{ct}{1}{\value{ct} < 100}{%
\section{Das ist eine Section}%
\subsection{Das ist eine Sub-Section}%
\subsubsection{Das ist eine SubSub-Section}%
\blindtext%
\subsubsection{Das ist eine SubSub-Section}%
\subsubsubsection{Hier die neue SubSubSub-Section}%
\blindtext%
\subsubsubsection{Hier die neue SubSubSub-Section}%
\blindtext%
\paragraph{Das ist ein Paragraph}
\blindtext%
\subparagraph{Das ist ein Sub-Paragraph}
\blindtext%
}
\end{document}

Was mir noch nicht gefällt ist das Einrücken der \paragraphs im Inhaltsverzeichnis. Setze ich die tocdepth um eins herunter, verschwinden auch meine subsubsubsections aus dem Inhaltsverzeichnis. Dupliziere ich die \titlecontents Zeile und setze 12em statt 9em ein, verschwindet der Paragraph komplett. Merkwürdig…

Kommentare durch todonotes Anmerkungen ersetzen

Mittwoch, 24. März 2010

todonote ist ein ziemlich geniales Paket, um in Texten Notizen zu Teilen anzubringen, an denen man noch arbeiten muss. Heute kam in der deutschen TeX-Newsgroup de.comp.text.tex die Frage auf, ob man nicht LaTeX-Standardkommentare durch entsprechende \todo{} Einträge ersetzen kann.

Mit Ultraedit, einem genialen Editor Windows (und seit kurzem auch Linux) und dessen REGEXP-Fähigkeiten ist sowas schnell gemacht:

^(^%^)^(*^)^($^)

Erläuterung:

Es sind drei Subpattern, die jeweils mit ^( ^) separiert werden.

  • Das erste Pattern sucht nach dem % Zeichen (wird als \% dargestellt, da es auch ein aktives Zeichen in REGEXPs ist)
  • Das zweite Pattern sucht nach beliebigem Text, schließt aber das Zeilenende $ nicht mit ein.
  • Das dritte Pattern sucht einfach nach dem Zeilenende $, das uns nicht weiter interessiert.

Ersetzt wird dann durch das zweite Pattern, das in einen \todo Befehl eingebettet wird.

\todo{^2}

Lebenslauf in LaTeX

Samstag, 20. März 2010

Für LaTeX gibt es ja mehrere gute Pakete, um einen Lebenslauf zu setzen. Über die Suche nach einer Möglichkeit, den Hintergrund einer \section einzufärben, bin ich eben auf eine interessante Reihe von Artikeln gestoßen.

http://stefano.italians.nl/archives/5

Vektorzeichnungen mit Asymptote

Freitag, 19. Februar 2010

Durch einen Beitrag in de.comp.text.tex bin ich auf Asymptote aufmerksam geworden, Zitat:

Asymptote is a powerful descriptive vector graphics language that provides a natural coordinate-based framework for technical drawing. Labels and equations are typeset with LaTeX, for high-quality PostScript output.

A major advantage of Asymptote over other graphics packages is that it is a programming language, as opposed to just a graphics program.

Features of Asymptote:

# provides a portable standard for typesetting mathematical figures, just as TeX/LaTeX has become the standard for typesetting equations;
# generates and embeds 3D vector PRC graphics within PDF files;
# inspired by MetaPost, with a much cleaner, powerful C++-like programming syntax and floating-point numerics;
# runs on all major platforms (UNIX, MacOS, Microsoft Windows);
# mathematically oriented (e.g. rotation of vectors by complex multiplication);
# LaTeX typesetting of labels (for document consistency);
# uses simplex method and deferred drawing to solve overall size constraint issues between fixed-sized objects (labels and arrowheads) and objects that should scale with figure size;
# fully generalizes MetaPost path construction algorithms to three dimensions;
# compiles commands into virtual machine code for speed without sacrificing portability;
# high-level graphics commands are implemented in the Asymptote language itself, allowing them to be easily tailored to specific applications.

Hier der Link zur Homepage: http://asymptote.sourceforge.net/.