“LaTeX Beginner’s Guide” for free

Stefann Kottwitz, the autor, told me today that his “LaTeX Beginner’s Guide” would be available for free today. More information is available from
LaTeX-Community.org or Packt

LaTeX Beginner's Guide

Buchkritik: “JavaScript & jQuery: The Missing Manual” von David Sawyer McFarland

Wie einige Leser meines Blogs möglicherweise wissen, unterrichte ich auch an der FOM hier in Köln. Für die Vorlesung zu “Web Programmierung” hatte ich noch ein Buch gesucht, das die Grundlagen zu JavaScript/jQuery gut vermittelt. Über einen Kontakt der Kölner Python-Usergroup (vielen Dank auch dorthin) habe ich dann vom O’Reilly Verlag freundlicherweise ein Rezensionsexemplar der mittlerweile dritten Ausgabe von “JavaScript & jQuery: The Missing Manual” erhalten, die ich hier kurz besprechen möchte.

Das Buch gliedert sich in sechs Teile:

  1. Getting Started with JavaScript
  2. Getting Started with jQuery
  3. Getting Started with jQuery UI
  4. Advanced jQuery and JavaScript
  5. Tips, Tricks, and Troubleshooting
  6. Appendix

Das Buch geht (zu Recht) davon aus, dass man grundlegende HTML-Kenntnisse hat. Am Anfang wird zwar kurz über HTML-Tags gesprochen — auch CSS wird kurz erwähnt — dann geht es aber los mit der JavaScript Programmierung. Nach dem obligatorischen “Hello World” bekommt man die grammatikalischen Grundlagen der Sprache nähergebracht und welche Datentypen und Schlüsselwörter es gibt. Sehr ausführlich ist auch die Beschreibung von Flusssteuerung und Schleifen.

Im zweiten Teil startet man dann mit jQuery. Im direkten Vergleich mit JavaScript merkt man als Leser schnell, dass die Nutzung von jQuery doch einige Vorteile hat. Was in reinem JavaScript mühsame Konstrukte erfordert, ist in jQuery meist in einer kurzen Zeile erledigt. Der Autor zeigt hier auch sehr ausführlich, wie man Elemente in jQuery selektieren und auswerten kann. In Kapitel 5 geht es dann um die Behandlung von Events, in Kapitel 6 um die Steuerung von Animationen mittels jQuery.

Kapitel 7 vermittelt, wie häufig vorkommende Aufgaben wie das Austauschen von Bildern in jQuery schnell & einfach gelöst werden können, Kapitel 8 geht auf die Nutzung von jQuery in Web-Formularen ein.

Der dritte Teil ab Kapitel 9 behandelt jQuery UI, ein Thema, das ich aus Zeitmangel in der Vorlesung nur am Rande behandeln konnte. Der Autor zeigt hier, wie man die verschiedenen Komponenten aus dem jQuery UI Paket nutzt und wie man das gewonnene Wissen nutzen kann, um eine TODO-Listen Anwendung zu schreiben.

Fazit

Auf über 650 Seiten und bei einem aktuellen Preis von etwas mehr als 30 Euro bietet dieses Buch einen sehr guten und umfassenden Einstieg in das Thema. Ich konnte eine ganze Reihe von Inhalten — auch in Bezug auf die Vermittlung des Wissens — direkt in der Vorlesung einsetzen. Ich empfehle dieses Buch auch meinen Studenten, wenn sie mehr wissen wollen zu JavaScript & jQuery.

The new scrletter package in KOMA-Script

Since version 3.15 of the KOMA-Script bundle there is a new scrletter package, providing the scrletter functionality in other document classes. Here’s an example of what can be done with the package:

\documentclass[12pt,ngerman]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{booktabs}
\usepackage{babel}
\usepackage{graphicx}
\usepackage{csquotes}
\usepackage{paralist}
\usepackage{xcolor,blindtext}
 
\usepackage{scrletter}
 
\begin{document}
 
\blindtext[3]
 
\setkomavar{fromname}{Max Mustermann}
\setkomavar{fromaddress}{Musterstr. 12 \\ 12345~Musterstadt}
\setkomavar{place}{Musterstadt}
\setkomavar{subject}{Mahnung}
 
\begin{letter}{Martina Musterfrau \\ Musterweg 4 \\ 12346~Musterdorf}
\opening{Sehr geehrte Damen und Herren,}
 
\closing{Mit freundlichen Grüßen,}
\end{letter}
 
\end{document}

In generates a standard article on the first page while putting the letter on the second page. Pretty cool, right?

sc1

sc2

Using Document Properties in Microsoft Word 2007

What I really like about LaTeX is the way one can easily define own commands that get expanded in the text whenever needed. Word has a similar feature, called document variables. Unfortunately these can only be set by VBA macros, there is (according to my knowledge) to way to manage them via GUI. Fortunately Word has another feature which provides a more or less similar functionality with the name “Document properties”.

Here’s a brief tutorial how to define and use a new variable:

1) Open the properties of the document

01

2) Open the extended properties

02

3) Create a new variable, here I used “Projekt” with the value “MeinProjekt”

03

4) To use this new variable simply insert a new field:

04

05

5) and select the corresponding variable

06

6) The internal syntax is the following (when you press Alt-F9 you get this “internal” view)

07

Looping with LaTeX — Generating Name Cards

Today I had to generate a few name cards, LaTeX and the pgffor command came very handy doing that. I am not entirely satisfied with this solution, since the margins are hardwired, so if you have a better way just tell me.

\documentclass[45pt,ngerman]{scrartcl}
\usepackage[left=1cm,right=1cm,top=1.5cm,bottom=0.5cm,a4paper]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{pgffor}
\usepackage{tikz}
\usepackage{xcolor}
\usepackage{lmodern}
\usetikzlibrary{positioning}
\pagestyle{empty}
\setlength{\parskip}{0pt}
\begin{document}
\centering

\foreach \x in {Manfred Mustermann, Gabi Mustermann, Manuela Mustermann}{
\begin{tikzpicture}
[mybox/.style={rectangle,black,xshift=0cm,yshift=0cm,minimum width=0.975\textwidth,font=\bfseries,draw=black,very thick,align=center, minimum height=0.475\textheight}]
\node at (0,0) [mybox] {\x};
\node at (0,0.475\textheight) [mybox] {};
\end{tikzpicture}\clearpage}

\end{document}

dann

Reading CSV files with LaTeX

Reading CSV files is pretty easy in LaTeX, thanks to Nicola Talbot’s datatool package.

When you have an Excel file like the following Schueler.xlsx, simply save it as CSV (Comma-Separated Value).

excli

If you open the CSV file “Schueler.csv” in a text editor you get the following:

excli2

We start by loading the datatool package. Since the German Excel uses semicolons as column separator, we are required to manually set the delimiter. In the next line we tell LaTeX to use our Schueler.csv file and to reference it as “scores”. In the DTLforeach commands the magic happens. The command has three parameters:

  • the file reference
  • the assignment of the file headers to LaTeX commands
  • the loop where the output for each row is defined
\documentclass[12pt,ngerman]{scrartcl}
\usepackage[utf8]{inputenc} 
\usepackage[T1]{fontenc}
\usepackage{babel}

\usepackage{datatool}

\DTLsetseparator{;}
\DTLloaddb{scores}{Schueler.csv}

\begin{document}

\begin{table}
\caption{Punktübersicht}
\centering
\begin{tabular}{llr}
\bfseries Name &
\bfseries Aufgabe A &
\bfseries Aufgabe B %
\DTLforeach{scores}{%
\name=Schueler,\aufgabea=AufgabeA,\aufgabeb=AufgabeB}{%
\\
\name & \aufgabea & \aufgabeb }
\end{tabular}
\end{table}

\DTLforeach{scores}{%
\name=Schueler,\aufgabea=AufgabeA,\aufgabeb=AufgabeB}{%

\name\ hat in Aufgabe A  \aufgabea~Punkte erzielt, in Aufgabe B \aufgabeb~Punkte.}


\end{document}

excli3

Simple looping with LaTeX

Here’s a fairly easy example how to loop through a LaTeX collection/list with the help of the pgffor package

\documentclass[12pt,ngerman]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{pgffor}
\begin{document}

\begin{itemize}
\foreach \x in {Donald,Dagobert,Gustav,Goofy} {\item \x}
\end{itemize}

\end{document}

googy

Ostern mit Python bestimmen

Die Oster-Formel der Wikipedia kann man recht einfach in einem Python-Algorithmus nutzen:

import datetime
 
def calcEaster(jahr):
	a = jahr % 19 
	b = jahr % 4  
	c = jahr % 7  
	k = jahr / 100
 
	p = (8 * k  + 13) / 25
	q = k / 4
	M = (15 + k - p - q) % 30
	d = (19 * a + M) % 30
	N = (4 + k - q) % 7
	e = (2 * b + 4 * c + 6 * d + N) % 7
 
	Ostermontag = (22 + d + e) - 1
 
	start = datetime.datetime.strptime("01.03." + str(jahr), "%d.%m.%Y")
	easter = start + datetime.timedelta(days=round(Ostermontag))
	return easter.strftime('%d.%m.%Y')
 
for i in range(2014,2050):
	print(calcEaster(i))

Deutsches Beispiel für die “exam” Dokumentenklasse

Hier ein eingedeutschtes Beispiel für die exam Klasse, mit der sich recht einfach Klausuren setzen lassen.

Edit 30.12.2014: Nach Hinweisen von Axel Kielhorn habe ich das Beispiel noch erweitert.

\documentclass[addpoints,a4paper,ngerman,12pt,answers]{exam}
\usepackage{babel}
\usepackage[a4paper,top=2.5cm,bottom=3cm,left=2.5cm,right=2cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{booktabs}
\usepackage{graphicx}
\usepackage{csquotes}
\usepackage{paralist}
\usepackage{wasysym}
\usepackage[math]{iwona}
 
 
\pointpoints{Punkt}{Punkte}
\bonuspointpoints{Bonuspunkt}{Bonuspunkte}
\renewcommand{\solutiontitle}{\noindent\textbf{Lösung:}\enspace}
 
\chqword{Frage}   
\chpgword{Seite} 
\chpword{Punkte}   
\chbpword{Bonus Punkte} 
\chsword{Erreicht}   
\chtword{Gesamt}
 
 
\checkboxchar{\Square}
\checkedchar{\CheckedBox}
 
 
\pagestyle{headandfoot}
\runningheadrule
\firstpageheader{Links oben}{Mitte oben}{\today}
\runningheader{Links oben}{Mitte oben}{\today}
\firstpagefooter{Links unten}{Mitte unten}{\thepage\,/\,\numpages}
\runningfooter{Links unten}{Mitte unten}{\thepage\,/\,\numpages}
 
\begin{document}
\vspace*{3em}
 
\makebox[\textwidth]{Name:\enspace\hrulefill}
 
\vspace*{2em}
 
\makebox[\textwidth]{Matrikelnummer:\enspace\hrulefill} 
 
\vspace*{3em}
 
\begin{questions}
\question[4] Warum gibt es Luft?
 
\begin{solution}
Damit wir atmen können.
\end{solution}
 
\bonusquestion[2] Wieviel Luft gibt es?
 
\begin{solution}
Ziemlich viel.
\end{solution}
 
 
\question[5] Warum gibt es Sauerstoff?
 
\clearpage
 
\question Was wäre, wenn es keine Luft gäbe?
\begin{parts} 
\part[5] Was würde mit Luftballons geschehen? 
\bonuspart[6] Wie könnten Fluggesellschaften damit umgehen?
\end{parts}
 
 
\question [100] Wird es morgen schneien?
\begin{checkboxes}
\CorrectChoice Ja
\choice Nein
\choice Vielleicht
\end{checkboxes}
 
\question Ein Name der folgenden Reihe passt nicht zu den anderen. Welcher?
\begin{oneparchoices}
\choice Donald
\choice Dagobert
\choice Daisy
\choice Micky
\CorrectChoice Balu
\end{oneparchoices}
 
\end{questions}
 
 
 
\begin{center}
\combinedgradetable[h][questions]
\end{center}
 
\end{document}

exam

Checking TeX files for cite-errors

Today I had to TeX a longer file with numerous \cite[somestuff]{citekey} sequences, of which some had hard-to-spot errors (some ‘]’ were missing). The following Python script checks if each \cite command has matching '[]' and '{}' sequences. I’ll probably extend this script to accept simple \cite{citekey} sequences that have no optional parameter.

#!/usr/bin/python
import re
 
with open('filetocheck.tex') as f:
	content = f.readlines()
 
index = 0
 
for a in content:
	index = index + 1
	if "cite"  in a: # check only lines that contain 'cite'
		matches = re.search(r'(.*)\[(.*)\]\{(.*)\}',a) # search for <sometext>[<sometext>]{<sometext>}
		if not matches:
			print (">>> Fail in row" , str(index), a)