Übungszettelvorlage
Author
Phil Steinhorst
Last Updated
4 years ago
License
Creative Commons CC BY 4.0
Abstract
A German template for Computer Science exercises.
A German template for Computer Science exercises.
%!TEX TS-program = pdflatex
%!TEX TS-options = -shell-escape
% Author: Phil Steinhorst, p.st@wwu.de
% https://gitlab.com/phist91/latex-templates
\newcommand{\obenlinks}{Übungen zur Vorlesung Informatik I} % hier Name der Veranstaltung eintragen
\input{config.tex} % Präambel (ohne die geht nichts!)
% Für eine leere Vorlage, alles zwischen \begin{document} und \end{document} löschen!
\begin{document}
\begin{center} % Kopfbereich mit Infos zur Abgabegruppe
\begin{tabular}{|rlp{4cm}rl|}
\hline
\textbf{Übungsblatt:} & 13 & & \textbf{1. Abgabepartner*in:} & Ada Lovelace \\
\textbf{Aufgabe:} & 37 & & \textbf{2. Abgabepartner*in:} & Donald Knuth \\
\textbf{Abgabegruppe:} & 42 & & \textbf{3. Abgabepartner*in:} & Alan Turing \\ \hline
\end{tabular}
\end{center}
Dies ist eine \LaTeX-Vorlage für Übungszettelabgaben im Fach Informatik, die das \texttt{listingsutf8}-Paket nutzt.
Dieses ist in der Regel sofort nutzbar und erfordert keine weitere Einrichtung.
Das Syntax Highlighting ist hier jedoch nicht ganz so detailliert wie beim \texttt{minted}-Paket, für das in meinem Git-Repository\footnote{\url{https://gitlab.com/phist91/latex-templates}} ebenfalls eine Vorlage bereitgestellt wird.
Nachfolgend gibt es ein paar Hinweise, wie diese Vorlage zu verwenden ist.
\subsection*{Disclaimer}
Ich kann leider grundsätzlich keinen \LaTeX-Support anbieten und verweise daher auf gängige Suchmaschinen und die \TeX-Community von StackExchange\footnote{\url{https://tex.stackexchange.org/}}.
Sucht man den LaTeX-Befehl für ein bestimmtes Symbol, ist Detexify\footnote{\url{http://detexify.kirelabs.org/}} praktisch.
\subsection*{Verwendung}
Als Test sollte man versuchen, die Datei \texttt{abgaben-listings.tex} in einem TeX-Editor zu öffnen und zu kompilieren.
Dabei handelt es sich um den TeX-Code zu genau diesem Dokument.
Wenn das nicht klappt, kann das folgende Gründe haben:
\begin{itemize}
\item In den Umgebungsvariablen des Systems fehlt das Verzeichnis der \LaTeX-Distribution.
\item Der Compiler wird nicht mit der Shell-Escape-Option aufgerufen.
Ggfs. sollte in den Einstellungen des Editors nachgeschaut werden, dass \texttt{pdflatex} mit der Option \texttt{-shell-escape} aufgerufen wird.
\item Irgendwas anderes. Man prüfe die Ausgabe des Compilers.
\end{itemize}
Wenn alles geklappt hat, kann man diese Vorlage verwenden.
Ich habe als Einstiegshilfe unten verschiedene Beispiele -- unter anderem zum Einbinden von Quellcode -- angehängt.
Die Verwendung der entsprechenden TeX-Befehle sollte anhand der Datei \texttt{abgaben-listings.tex} erschließbar sein.
Weitere Hinweise und Konfigurationsmöglichkeiten findet man in der Paketdokumentation\footnote{\url{http://texdoc.net/texmf-dist/doc/latex/listings/listings.pdf}.}.
\textbf{Nicht vergessen:} Ein automatisches Syntax Highlighting entbindet \textbf{niemals} von der Pflicht, gut lesbaren und gut nachvollziehbaren Code zu produzieren.
\begin{flushright}
Phil Steinhorst \\
\url{https://gitlab.com/phist91/latex-templates}
\end{flushright}
\vfill
\href{https://creativecommons.org/licenses/by-sa/4.0/}{\includegraphics[keepaspectratio,scale=0.5]{cc.png}} \quad
\footnotesize{This work is licensed under a \href{https://creativecommons.org/licenses/by-sa/4.0/}{Creative Commons Attribution-ShareAlike 4.0 International License}.}
\newpage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section*{Beispiele}
\subsection*{Textformatierungen}
Eine Auflistung:
\begin{itemize}
\item Dieser Text ist \textbf{fett}.
\item Dieser Text ist \textit{kursiv}.
\item Dieser Text ist \underline{unterstrichen}.
\item Dieser Text ist \textcolor{red}{rot}.
\item Dieser Text ist \href{https://gitlab.com/phist91/latex-templates}{anklickbar.}
\end{itemize}
Eine Aufzählung:
\begin{enumerate}[(a)]
\item Eine Liste,
\item aber mit
\item Nummerierung!
\end{enumerate}
Eine zentrierte Tabelle:
\begin{center}
\begin{tabular}{|c|c|} \hline
Etwas & gewöhnungsbedürftig, \\ \hline
\multicolumn{2}{|c|}{aber vielseitig und machbar!} \\ \hline
\end{tabular}
\end{center}
Die gleiche Tabelle, aber mit Beschreibung:
\begin{table}[h]
\begin{center}
\begin{tabular}{|c|c|} \hline
Etwas & gewöhnungsbedürftig, \\ \hline
\multicolumn{2}{|c|}{aber vielseitig und machbar!} \\ \hline
\end{tabular}
\end{center}
\caption{Viele Editoren bieten Assistenten zum Anlegen von Tabellen wie dieser.}
\end{table}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection*{Grafiken}
Eine eingebundene Grafikdatei:
\begin{center}
\includegraphics[keepaspectratio,width=3cm]{cc.png}
\end{center}
\newpage
Die gleiche Grafik, in verschiedenen Größen:
\begin{figure}[h]
\begin{center}
\subcaptionbox{klein}{\includegraphics[keepaspectratio,width=1.5cm]{cc.png}}
\subcaptionbox{mittel}{\includegraphics[keepaspectratio,width=2cm]{cc.png}}
\subcaptionbox{groß}{\includegraphics[keepaspectratio,width=3cm]{cc.png}}
\caption{Logos in verschiedenen Größen.}
\end{center}
\end{figure}
Eine TikZ-Grafik mit Beschreibung:
\begin{figure}[h]
\centering
\begin{tikzpicture}[->, auto, node distance= 1.5cm and 3cm, on grid, semithick,
state/.style={circle, draw, font=\ttfamily, minimum width= 0.7cm}]
\node[state] (A) at (0,0) {a};
\node[state,gray] (B) at (1.5,1) {b};
\node[state] (C) at (3,1) {c};
\node[state] (D) at (2.5,-0.5) {d};
\node[state] (E) at (4,-0.5) {e};
\draw[->] (-0.5,1) node[above]{\dots} -- (A);
\draw[->,gray] (B) -- (C);
\draw[->,gray] (B) -- (D);
\draw[->] (C) to[bend angle=20,bend right] (E);
\draw[->] (E) to[bend angle=20,bend right] (C);
\draw[->] (D) -- (C);
\draw[->] (E) -- (4.5,0.5) node[above]{\dots};
\draw[->] (A) to[bend angle=20,bend right] (D);
\draw (A) node[below=0.35cm,RoyalBlue2,font=\bfseries]{1};
\draw (B) node[below=0.35cm,RoyalBlue2,font=\bfseries]{0};
\draw (C) node[right=0.35cm,RoyalBlue2,font=\bfseries]{2};
\draw (D) node[below=0.35cm,RoyalBlue2,font=\bfseries]{1};
\draw (E) node[below=0.35cm,RoyalBlue2,font=\bfseries]{1};
\path (E) edge [loop right] (E);
\end{tikzpicture}
\caption{TikZ ist ein sehr mächtiges Paket zur Erstellung ansprechender Vektorgrafiken.}
\end{figure}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection*{Mathematische Formeln}
Die Formel $a^2 + b^2 = c^2$ ist kompakt und passt in den Fließtext.
Die Formel $x := \frac{1}{1+\frac{1}{1+\frac{1}{2}}}$ sprengt hingegen die Zeilenhöhe, was innerhalb eines größeren Absatzes sehr unschön aussehen kann, wie man hier sieht.
Besser: Einzeilige Formeln absetzen und zentrieren:
\[
x := \frac{1}{1+\frac{1}{1+\frac{1}{2}}}
\]
Und mehrzeilige Formeln? Bitte nicht so:
$f(x) = x^2 + 2x - 7$ \\
$f'(x) = 2x+2$ \\
$f''(x) = 2$
Viel besser: Abgesetzt und ausgerichtet:
\begin{align*}
f(x) &= x^2 + 2x - 7 \\
f'(x) &= 2x+2 \\
f''(x) &= 2
\end{align*}
Formeln können auch nummeriert werden:
\begin{align}
\sum_{i=0}^{n} x^i &= \frac{1-x^{n+1}}{1-x} \label{formel-A} \\
\sum_{i=0}^{n} \frac{1}{2^i} &= 2 - \frac{1}{2^n} \label{formel-B}
\end{align}
\dots um sie später zu referenzieren: Formel \eqref{formel-B} ist ein Spezialfall von Formel \eqref{formel-A}.
Eine Funktion:
\begin{align*}
f \colon \mathbb{R} &\longrightarrow \mathbb{R} \\
x &\longmapsto x^2
\end{align*}
Geht auch mit Fallunterscheidung:
\begin{align*}
\operatorname{sgn} \colon \mathbb{R} &\longrightarrow \mathbb{R} \\
x &\longmapsto \begin{cases}
1, & \text{falls } x > 0 \\
0, & \text{falls } x = 0 \\
-1, & \text{falls } x < 0
\end{cases}
\end{align*}
Eine Matrix:
\[
A := \begin{pmatrix}
1 & a & a^2 & a^3 \\
1 & b & b^2 & b^3 \\
1 & c & c^2 & c^3 \\
1 & d & d^2 & d^3
\end{pmatrix}
\]
\textbf{Wichtig!} Niemals Fließtext ohne Befehle wie \texttt{\textbackslash text\{...\}} in Formel-Umgebungen setzen:
\[
x_{Staffel}
\]
Das führt zu Problemen beim Zeichenabstand und sieht komisch aus.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection*{Beispiel für direkt eingegebenen Java-Code:}
\begin{lstlisting}[language=java]
import java.util.*;
public class Hallo{
public static void main( String[] args ) {
System.out.print("Hallo Welt!");
}
}
\end{lstlisting}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection*{Beispiel für direkt eingegebenen C-Code:}
\begin{lstlisting}[language=c]
#include <stdio.h>
int main(int argc, char** argv){
int i;
for(i = 0; i < argc; i++){
printf("%s \n", argv[i]);
}
return 0;
}
\end{lstlisting}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection*{Beispiel für Java-Code, der aus einer eigenen Datei eingebunden wird:}
\lstinputlisting[language=java]{programm.java}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection*{Beispiel für C-Code, der aus einer eigenen Datei eingebunden wird:}
\lstinputlisting[language=c]{programm.c}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\textbf{Beispiel für Inline-Java-Code:} \lstinline[language=java]|this.toScan = new LinkedList<>();|
\textbf{Beispiel für Inline-C-Code:} \lstinline[language=c]|int main(int argc, char** argv)|
\end{document}