latex-skript/commands.tex

244 lines
5.8 KiB
TeX

% Acronyms
% ========
% The argument appears in small caps.
\newcommand\acro[1]{\textsc{\lowercase{#1}}}
% Variables
% =========
\newcommand\widefiguremargin{-.22\textwidth}
\newcommand\widefigurewidth{.49\textwidth}
\newcommand\widefiguregap{.02\textwidth}
\newcommand\widefiguresum{1.4\textwidth}
% Fachschaft logo
% ===============
\newcommand*{\fslogo}{\raisebox{+1.25ex}{\includegraphics[height=6cm]{graphics/logo-fachschaft}}}
% Wide box
% ========
% Box that runs into both margins. To be used inside a floating environment like figure or table.
\newcommand\widebox[1]{
\hspace{\widefiguremargin}
\begin{minipage}{\widefiguresum}
#1
\end{minipage}
}
% Column rules
% ============
% Adds two rules each spanning approximately half of the available textwidth (as defined by \widefigurewidth).
\newcommand\colrules{
\rule{\widefigurewidth}{0.4pt}
\hspace{\widefiguregap}
\rule{\widefigurewidth}{0.4pt}
}
% Shell command
% ==============
% Mono-spaced text without syntax highlighting.
% Intended for full commands. Wrapped by empty lines.
\newcommand\shell[1]{%
\vspace{.5cm}
\noindent \hspace*{-1em}{\color{lightgray}\texttt{\$ }}\texttt{#1}
\vspace{.5cm}
}
% Command parts
% ===================
% Mono-spaced text without syntax highlighting.
% Intended for parts of shell commands.
% Displayed inline.
\newcommand\sh[1]{%
\texttt{#1}%
}
% Package names
% =============
% Mono-spaced text without syntax highlighting.
% Intended for LaTeX package names.
\newcommand\pkg[1]{%
\ifthenelse{\equal{\listingsmode}{minted}}{%
\texttt{#1}%
}{%
\texttt{#1}%
}%
}
% File paths
% ==========
% Mono-spaced text without syntax highlighting.
% Intended for file names and paths.
\newcommand\file[1]{%
\texttt{#1}%
}
% Mono-spaced words
% =================
% Mono-spaced text without syntax highlighting.
% Intended for single words or small passages without special meaning.
% These can be environments, file extensions, and many more.
\newcommand\mono[1]{%
\texttt{#1}%
}
% Inline code
% ===========
% Code snippets with syntax highlighting.
% TODO: Fix special character mess.
% Caution: Must not be used inside `\textbf{}'
%
% Arguments:
% 1. Language.
% 2. Source code.
\newcommand\code[2]{%
\texttt{#2}%
}
% Code block
% ==========
% Pastes in a non-inline code block using minted or lstlistings
% first parameter: programming language
% path to code file
\lstdefinelanguage{latex}{%
language=[LaTeX]TeX
}
\lstdefinelanguage{csharp}{%
language=[Sharp]C
}
\lstdefinelanguage{bibtex}
{keywords={%
@article,@book,@collectedbook,@conference,@electronic,@ieeetranbstctl,%
@inbook,@incollectedbook,@incollection,@injournal,@inproceedings,%
@manual,@mastersthesis,@misc,@patent,@periodical,@phdthesis,@preamble,%
@proceedings,@standard,@string,@techreport,@unpublished%
},
comment=[l][\itshape]{@comment},
sensitive=false,
}
\newcommand\codeblock[2]{%
\ifthenelse{\equal{\listingsmode}{minted}}{%
\inputminted[breaklines]{#1}{#2}
}{%
\ifthenelse{\equal{#1}{latex}}{%
\lstset{language=#1,
basicstyle=\small\ttfamily,
breaklines=true,
keywordstyle=\color{ForestGreen}\bfseries,
emph={%
subsection, subsubsection, url, includegraphics, toprule,
midrule, bottomrule, cref, setlength, maketitle,
tableofcontents, foreignlanguage, paragraph, subparagraph,
mint, mintinline, inputminted, usemintedstyle, definecolor,
citep, enquote, lstinputlisting%
},
postbreak=\mbox{{$\hookrightarrow$}\space},
emphstyle={\color{ForestGreen}\bfseries},
commentstyle=\color{darkgray},
% Allow special characters in lstlistings.
literate=
{Ö}{{\"O}}1
{Ä}{{\"A}}1
{Ü}{{\"U}}1
{ß}{{\ss}}1
{ü}{{\"u}}1
{ä}{{\"a}}1
{ö}{{\"o}}1
{é}{{\'e}}1
{}{\textellipsis}1
}
\lstinputlisting{#2}%
%
}{%
\lstset{
language=#1,
% Allow special characters in lstlistings.
literate=
{Ö}{{\"O}}1
{Ä}{{\"A}}1
{Ü}{{\"U}}1
{ß}{{\ss}}1
{ü}{{\"u}}1
{ä}{{\"a}}1
{ö}{{\"o}}1
{é}{{\'e}}1
{}{\textellipsis}1
}
\lstinputlisting{#2}
}
}
}
% Simple code examples
% ====================
% Box for example code next to the rendered example.
%
% Arguments:
% 1. Label.
% 2. Content path without extension. If a corresponding PDF file exists, it gets included as an image. Otherwise, the LaTeX code gets rendered directly.
% 3. Caption.
\newcommand\example[3]{
\Example{#1}{#2}{#2}{#3}
}
% Extended code examples
% ======================
% Box for example code next to the rendered example.
% Depending on the third argument, the source path for the right-side rendering can differ from the source path of the left-side listing.
% Useful if only an excerpt of the document to be rendered affects the entire output.
%
% Arguments:
% 1. Label.
% 2. Content path without extension. If a corresponding PDF file exists, it gets included as an image. Otherwise, the LaTeX code gets rendered directly.
% 3. Alternative path for Rendering (c.f. 2.)
% 4. Caption.
\newcommand\Example[4]{
\begin{figure}[htp]
\widebox{
% Top rules:
\colrules
% Left content: code listing:
\begin{subfigure}{\widefigurewidth}
\codeblock{latex}{listings/#2.tex}
\end{subfigure}
\hspace{\widefiguregap}
% Right content: image or rendered example:
\begin{subfigure}{\widefigurewidth}
\IfFileExists{listings/#3.pdf}{
\includegraphics[width=\linewidth]{listings/#3.pdf}
}{
\medskip
\input{listings/#3}
\medskip
}
\end{subfigure}
% Bottom rules:
\colrules
% Left caption:
\begin{subfigure}[t]{\widefigurewidth}
\caption{\LaTeX-Code}
\label{#1-code}
\end{subfigure}
\hspace{\widefiguregap}
% Right caption:
\begin{subfigure}[t]{\widefigurewidth}
\caption{Result}
\label{#1-result}
\end{subfigure}
}
% General caption:
\caption{#4}
\label{#1}
\end{figure}
}