Include PDF (e.g. for assignments) (#22)

* erster Aufschlag für includepdf

* beispiel.md: added comment for skipfirstpage

* integrate changes as suggested in pandoc issue: https://github.com/jgm/pandoc/issues/6259#issuecomment-955747860

* Modified readme.md to cater for the possibility to include ranges from PDF files

* Forgot the exmaple block at begin of README.md - updated it m(

* typo inf README.md - updated it m(

Co-authored-by: Sebastian / sebbo <sebastian@1337lounge.de>
main
aslmx 3 years ago committed by GitHub
parent 3bf33a5343
commit 3a10a595ff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

Binary file not shown.

@ -1,5 +1,5 @@
---
logo: Bilder/logo.png
logo: ../Bilder/logo.png
title: Pandoc und Markdown für deine Texte
author: Sebastian Preisner
student:
@ -15,8 +15,12 @@ aufgabe:
code: Freiwillige_Arbeit
date: 08.06.2017
lang: de
toc: t
skipfirstpage: 1 % set any value, to skip the counting for Titlepage, so TOC will start with Page 1
toc: \\
skipfirstpage: 1 # set any value, to skip the counting for Titlepage, so TOC will start with Page 1
#assignment:
# file: '`Aufgabenstellung/Aufgabenstellung.pdf`{=latex}'
# pages: '`{1-2}`{=latex}'
...
# Einführungauthor

Binary file not shown.

@ -1,4 +1,13 @@
% TeX für WBH B-Prüfungen
% pandoc WBH Prüfungsvorlage
%
% Diese Vorlage ist für Prüfungen an der Wilhelm-Büchner-Hochschule erstellt worden
% sie entspricht den Vorgaben für Hausarbeiten und Thesis zum aktuellen Zeitpunkt.
%
% Autoren:
%
% Created:
% Changed: 26.06.2020
\documentclass[
12pt,
a4paper,
@ -7,28 +16,22 @@
listof=totocnumbered
]{scrartcl}
% Support German annotation
%%\usepackage[ngerman]{babel}
%\usepackage[utf8]{inputenc}
%
% Support different languages
% default: en
% -----------------------------------------------------------------------
\usepackage[shorthands=off,main=ngerman]{babel}
% Symbols:
% Pandoc imports the extensive `amsmath` collection of symbols
% for typesetting ordinary math.
\usepackage{amsmath}
% if you use exotic symbols you need to import specific packages, eg. for
% electrical engineering diagrams, musical notation, exotic currency symbols,
% the unspeakable rites of freemasonry etc.
\usepackage{amsfonts}
\usepackage{amssymb}
%\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage{amsmath} % For pandoc extensive `amsmath` collection of symbols for typesetting ordinary math
\usepackage{amsfonts} % More symboles for exotic currency notation and engeneering diagrams
\usepackage{amssymb} % More symboles for exotic currency notation and engeneering diagrams
\usepackage{siunitx} % For using SI Units https://www.ctan.org/pkg/siunitx
\usepackage{fancyhdr}
\usepackage{tabularx}
\usepackage{geometry}
\usepackage[a4paper, top=27mm, left=20mm, right=40mm, bottom=35mm, headsep=10mm, footskip=12mm]{geometry} % Vorgabe 4cm Rand auf der rechten Seite.
\usepackage{setspace}
\usepackage{siunitx} % For using SI Units https://www.ctan.org/pkg/siunitx
\usepackage[right]{eurosym}
\usepackage[printonlyused]{acronym}
\usepackage{subfig}
@ -40,14 +43,50 @@
\usepackage{parskip}
\usepackage[right]{eurosym}
\usepackage[subfigure,titles]{tocloft}
\usepackage[pdfpagelabels=true]{hyperref}
\usepackage{helvet}
\usepackage{graphicx}
\usepackage[export]{adjustbox} % also loads graphicx, to have max width for graphics
\usepackage{pdfpages}
% This two Packages are needet for Pandoc Table support. Issue is opened: https://github.com/jgm/pandoc/issues/1023
\usepackage{longtable}
\usepackage{booktabs}
\usepackage{multirow}
% Support hyperref with colorisation
% -------------------------------------------------------------------------
\usepackage{xcolor}
\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available
\IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage[pdfpagelabels=true]{hyperref}}
\urlstyle{same} % disable monospaced font for URLs
\setlength{\emergencystretch}{3em} % prevent overfull lines
% PDF Metadata
% ------------------------------------------------------------------
\hypersetup{
unicode=false,
pdftoolbar=true,
pdfmenubar=true,
pdffitwindow=false,
pdfstartview={FitH},
pdftitle={Pandoc und Markdown für deine
Texte: Freiwillige\_Arbeit - Sebastian Preisner},
pdfauthor={Sebastian Preisner, Matrikelnummer: 900266},
pdfsubject={Studiengang: Technische Informatik},
pdfcreator={\LaTeX\ with package \flqq hyperref\frqq via pandoc},
pdfproducer={pdfTeX \the\pdftexversion.\pdftexrevision},
pdfkeywords={B-Prüfung, 900266, Freiwillige\_Arbeit, },
pdfnewwindow=true,
pdflang=de,
pdfdisplaydoctitle=true,
hidelinks,
}
% Designing blockquote
% ------------------------------------------------------------------
\definecolor{blockquote-border}{RGB}{221,221,221}
\definecolor{blockquote-text}{RGB}{119,119,119}
\usepackage{mdframed}
@ -55,7 +94,8 @@
\renewenvironment{quote}{\begin{customblockquote}\list{}{\rightmargin=0em\leftmargin=0em}%
\item\relax\color{blockquote-text}\ignorespaces}{\unskip\unskip\endlist\end{customblockquote}}
% Syntax Highligting with colors
% Syntax Highlighting with colors
% -----------------------------------------------------------------
\usepackage{color}
\usepackage{fancyvrb}
\newcommand{\VerbBar}{|}
@ -96,33 +136,39 @@
\newcommand{\WarningTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
\usepackage{listings}
\lstset{basicstyle=\footnotesize, captionpos=b, breaklines=true, showstringspaces=false, tabsize=2, frame=lines, numbers=left, numberstyle=\tiny, xleftmargin=2em, framexleftmargin=2em}
\makeatletter
\def\l@lstlisting#1#2{\@dottedtocline{1}{0em}{1em}{\hspace{1,5em} Lst. #1}{#2}}
\makeatother
\geometry{a4paper, top=27mm, left=20mm, right=40mm, bottom=35mm, headsep=10mm, footskip=12mm} % Vorgabe des 4cm Rand auf der rechten Seiten.
\hypersetup{unicode=false, pdftoolbar=true, pdfmenubar=true, pdffitwindow=false, pdfstartview={FitH},
pdftitle={Pandoc und Markdown für deine Texte: Freiwillige\_Arbeit - },
pdfauthor={Sebastian Preisner},
pdfsubject={Studiengang: Technische Informatike},
pdfcreator={\LaTeX\ with package \flqq hyperref\frqq},
pdfproducer={pdfTeX \the\pdftexversion.\pdftexrevision},
pdfkeywords={B-Prüfung, , Freiwillige\_Arbeit },
pdfnewwindow=true,
pdflang=de,
pdfdisplaydoctitle=true, colorlinks=true, linkcolor=black, citecolor=gray, filecolor=magenta, urlcolor=black}
% \pdfinfo{/CreationDate (D:20170605133321)}
\renewcommand{\familydefault}{\sfdefault}
% Pandoc tightlisting
% ------------------------------------------------------------------
\providecommand{\tightlist}{%
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
% Support for citation
% -------------------------------------------------------------------
\usepackage[T1]{fontenc}
%
\setcounter{secnumdepth}{5}
%\setcounter{secnumdepth}{-\maxdimen} % remove section numbering
% ----------------------------------------------------------------------------
% begin document
% ----------------------------------------------------------------------------
\begin{document}
% ----------------------------------------------------------------------------------------------------------
% Aufgabenstellung
% ----------------------------------------------------------------------------------------------------------
% Debug:
% include: file: Aufgabenstellung/Aufgabenstellung.pdf pages: {1-2}
% include assignment is on
\includepdf[pages={1-2}]{Aufgabenstellung/Aufgabenstellung.pdf}
% ----------------------------------------------------------------------------------------------------------
% Kopf und Fußzeile
@ -133,8 +179,9 @@
\lhead{}
\chead{}
\rhead{\thesection\space\contentsname}
\lfoot{\tiny B-Prüfung des Studenten: Studiengang: Technische
Informatike - Prüfung: Freiwillige\_Arbeit }
\lfoot{\tiny B-Prüfung des Studenten: Sebastian
Preisner (Matrikelnr.: 900266) Studiengang: Technische
Informatik - Prüfung: Freiwillige\_Arbeit }
\cfoot{}
\rfoot{\ \linebreak Seite \thepage}
\renewcommand{\headrulewidth}{0.4pt}
@ -154,10 +201,11 @@ Informatike - Prüfung: Freiwillige\_Arbeit }
% ----------------------------------------------------------------------------------------------------------
\thispagestyle{empty}
\begin{center}
\vspace*{2cm}
\includegraphics[max width=\textwidth]{../Bilder/logo.png}\\
\vspace*{2cm}
\Large
\textbf{Studiengang:}\\
\textbf{Technische Informatike}\\
\textbf{Technische Informatik}\\
\vspace*{2cm}
\Huge
\textbf{}\\
@ -168,51 +216,58 @@ Informatike - Prüfung: Freiwillige\_Arbeit }
Freiwillige\_Arbeit \\
\vspace*{1cm}
\textbf{Freizeitgestaltung}\\
\vspace*{2cm}
\vspace*{1cm}
\vfill
\normalsize
\newcolumntype{x}[1]{>{\raggedleft\arraybackslash\hspace{0pt}}p{#1}}
\begin{tabular}{x{6cm}p{7.5cm}}
\rule{0mm}{5ex}\textbf{Abgabedatum:} & 08.06.2017 \\
\rule{0mm}{5ex}\textbf{Student:} & Sebastian Preisner
\newline wbh@calyrium.org
\\
\rule{0mm}{5ex}\textbf{Matrikelnummer:} & 900266 \\
\rule{0mm}{5ex}\textbf{Abgabedatum:} & 08.06.2017 \\
\end{tabular}
\end{center}
\pagebreak
% Skip first page count, if skipfirstpage = 1
\clearpage
\setcounter{page}{1}
{
\setcounter{tocdepth}{3}
% ----------------------------------------------------------------------------------------------------------
% Content
% Inhaltsverzeichnis
% ----------------------------------------------------------------------------------------------------------
% TODO Typ vor Nummer
\renewcommand{\cfttabpresnum}{Tab. }
\renewcommand{\cftfigpresnum}{Abb. }
\settowidth{\cfttabnumwidth}{Abb. 10\quad}
\settowidth{\cftfignumwidth}{Abb. 10\quad}
\singlespacing
\rhead{INHALTSVERZEICHNIS}
\renewcommand{\contentsname}{I Inhaltsverzeichnis}
\phantomsection
\addcontentsline{toc}{section}{\texorpdfstring{I \hspace{0.35em}Inhaltsverzeichnis}{Inhaltsverzeichnis}}
\addtocounter{section}{1}
\tableofcontents
\pagebreak
}
{
\setcounter{tocdepth}{3}
% ----------------------------------------------------------------------------------------------------------
% Verzeichnisse
% ----------------------------------------------------------------------------------------------------------
% TODO Typ vor Nummer
\renewcommand{\cfttabpresnum}{Tab. }
\renewcommand{\cftfigpresnum}{Abb. }
\settowidth{\cfttabnumwidth}{Abb. 10\quad}
\settowidth{\cftfignumwidth}{Abb. 10\quad}
\singlespacing
\rhead{INHALTSVERZEICHNIS}
\renewcommand{\contentsname}{I Inhaltsverzeichnis}
\phantomsection
\addcontentsline{toc}{section}{\texorpdfstring{I \hspace{0.35em}Inhaltsverzeichnis}{Inhaltsverzeichnis}}
\addtocounter{section}{1}
\tableofcontents
\pagebreak
}
% ----------------------------------------------------------------------------------------------------------
% Inhalt
% Einrichtung der Kopfzeile
% ----------------------------------------------------------------------------------------------------------
% Kopfzeile
\renewcommand{\sectionmark}[1]{\markright{#1}}
\renewcommand{\subsectionmark}[1]{}
\renewcommand{\subsubsectionmark}[1]{}
@ -227,6 +282,11 @@ Informatike - Prüfung: Freiwillige\_Arbeit }
\setcounter{page}{1}
%\renewcommand{\includegraphics}[1][]{\includegraphics[width=0.9\columnwidth,keepaspectratio]{#1}}
% ----------------------------------------------------------------------------------------------------------
% Inhalt
% ----------------------------------------------------------------------------------------------------------
\hypertarget{einfuxfchrungauthor}{%
\section{Einführungauthor}\label{einfuxfchrungauthor}}
@ -396,7 +456,7 @@ Installation von LaTeX der einfachste Weg.
\ExtensionTok{yum}\NormalTok{ install pandoc}
\CommentTok{\# Archlinux}
\ExtensionTok{pacman}\NormalTok{ {-}S pandoc}
\ExtensionTok{pacman} \AttributeTok{{-}S}\NormalTok{ pandoc}
\end{Highlighting}
\end{Shaded}
@ -407,7 +467,84 @@ lassen sich Bequem in Textfom fomulieren. Wie das geht werde ich dir im
nächsten Kapitel zeigen. Zunächst kannst du jedoch mit dem Befehl
\texttt{pandoc\ -v} die installierte Version erfragen.
\hypertarget{pdf-aus-beispiel-markdown-erzeugen}{%
\subsection{PDF aus Beispiel Markdown
erzeugen}\label{pdf-aus-beispiel-markdown-erzeugen}}
\hypertarget{manuell}{%
\subsubsection{Manuell}\label{manuell}}
Dem Projekt liegt im Ordner \texttt{Beispiel/} ein in Markdown
geschriebenes Beispiel bei, welches du gerade liest :-)
Du kannst das Beispiel mit Markdown nach PDF konvertieren in dem du
folgendes Kommando nutzt:
\texttt{pandoc\ -s\ -\/-template="wbh.tex"\ -o\ Beispiel/beispiel.pdf\ Beispiel/beispiel.md}
Die Datei \texttt{beispiel.pdf} wird ebenfalls im Unterordner
\texttt{Beispiel/}erzeugt. Das Kommando musst du natürlich aus dem
Stammverzeichnis des Projekts starten, damit das Template
\texttt{wbh.tex} gefunden wird. Alternativ kannst du auch den Pfad
anpassen.
\hypertarget{uxfcber-editor}{%
\subsubsection{Über Editor}\label{uxfcber-editor}}
Viele Editoren erlauben, dass du Quellcode über ein Tastaturkürzel, z.b.
F5 oder F9 automatisch kompilieren kannst. Bei der Vielzahl der Editoren
ist es schwierig das für alle zu beschreiben, es lohnt sich trotzdem in
den Einstellungen zu prüfen ob das mit deinem Editor möglich ist. Jeder
bessere Sourcecode Editor kann das.
\hypertarget{latex-mathtex-beispiele}{%
\section{Latex Mathtex Beispiele}\label{latex-mathtex-beispiele}}
Hier ein paar Beispiele für mathematische Formeln
\hypertarget{matrix}{%
\subsection{Matrix}\label{matrix}}
Wenn die Matrix mehr als 10 Spalten enthält, dann muss zwingend
\texttt{\textbackslash{}setcounter\{MaxMatrixCols\}\{12\}} entsprechend
der Anzahl der Spalten gesetzt sein. Standarmäßig geht es sonst nur bis
10 Spalten.
\[
\setcounter{MaxMatrixCols}{12}X =
\begin{pmatrix}
P(A) & P(B) & P(C) & P(D) & P(E) & P(F) & P(G) & P(H) & P(I) & P(J) & P(K) & P(L)\\
1/19 & 2/19 & 3/19 & 3/19 & 3/19 & 1/19 & 1/19 & 1/19 & 1/19 & 1/19 & 1/19 & 1/19\\
\end{pmatrix}\]
\hypertarget{am-gleichheitszeichen-ausgerichtete-gleichungen}{%
\subsection{Am Gleichheitszeichen ausgerichtete
Gleichungen}\label{am-gleichheitszeichen-ausgerichtete-gleichungen}}
Wenn du Gleichungen über mehrere Zeilen schreist und diese am
Gleichheitszeichen ausrichten möchtest, dann nutze
\texttt{\textbackslash{}begin\{aligned\}}. Zeilenumbrüche fügst du mit
\texttt{\textbackslash{}\textbackslash{}} hinzu.
Die Ausrichtung richtet sich am \texttt{\&} welches als Spaltenseparator
dient.
\[ \displaystyle
\begin{aligned}
A & = B + C + D + E + F\\
& \\
A - F & = B + C + D + E
\end{aligned}\]
% ----------------------------------------------------------------------------------------------------------
% Literaturverzeichnis
% ----------------------------------------------------------------------------------------------------------
%%%
%
\end{document}

@ -53,6 +53,11 @@ studium:
arbeit:
typ:
code:
#assignment:
# file: '`Aufgabenstellung/Aufgabenstellung.pdf`{=latex}'
# pages: '`{1-2}`{=latex}' # Page 1 to 2
# pages: '`-`{=latex}' # All pages
# pages: '`1,3`{=latex}' # Page 1 and 3
...
```
@ -68,27 +73,70 @@ Make ist in der Regel Teil des Pakets `build-essentials`, welches du mit `sudo
Im Folgenden sind die einzelnen Variablen und Schalter erläutert. Alle Optionalen Variablen werden nicht benötigt und können somit leer bleiben oder ganz weg gelassen werden.
| Variable | Beschreibung | Optional | default |
|:------------- |:----------------------------------------------------- |:-------- |:------------- |
| title | Titel der Arbeit/B-Prüfung | nein | |
| author | Der Uhrheber der Arbeit, in der Regel dein Name | ja | |
| student | Informationen über dich | nein | |
| name | Dein Name, wird als Author verwendet | nein | |
| matrikelnr | Deine Matrikelnummer | ja | |
| email | Deine E-Mail Adresse | ja | |
| studium | Informationen zum Studiengang und dem Fach | ja | |
| studiengang | Dein Studiengang | ja | |
| studiengangnr | Diese findest du unter "Main Studium" SG-Nr. | ja | |
| fach | In welchem Fach wird die Prüfung bearbeitet | ja | |
| aufgabencode | Der Code befindet sich auf deiner B-Prüfung ganz oben | ja | |
| date | Datum der Abgabe | ja | today |
| lang | Sprache des Dokumentes "Ländercode" | ja | de |
| logo | Der Pfad zum Logo (Standard ./Bilder/logo.png) | ja | Pfad zum Bild |
| toc | Hinzufügen des Inhaltsverzeichnises | ja | true / false |
| abk | Abkürzungsverzeichnis | ja | true /false |
| lot | Verzeichnis der Tabellen | ja | true / false |
| lof | Liste der Figuren/Abbildungen | ja | true / false |
| skipfirstpage | Zählt die Titleseite nicht mit | ja | true |
| Variable | Beschreibung | Optional | default |
|:------------------ |:----------------------------------------------------- |:-------- |:------------- |
| title | Titel der Arbeit/B-Prüfung | nein | |
| author | Der Uhrheber der Arbeit, in der Regel dein Name | ja | |
| student | Informationen über dich | nein | |
| name | Dein Name, wird als Author verwendet | nein | |
| matrikelnr | Deine Matrikelnummer | ja | |
| email | Deine E-Mail Adresse | ja | |
| studium | Informationen zum Studiengang und dem Fach | ja | |
| studiengang | Dein Studiengang | ja | |
| studiengangnr | Diese findest du unter "Main Studium" SG-Nr. | ja | |
| fach | In welchem Fach wird die Prüfung bearbeitet | ja | |
| aufgabencode | Der Code befindet sich auf deiner B-Prüfung ganz oben | ja | |
| date | Datum der Abgabe | ja | today |
| lang | Sprache des Dokumentes "Ländercode" | ja | de |
| logo | Der Pfad zum Logo (Standard ./Bilder/logo.png) | ja | Pfad zum Bild |
| toc | Hinzufügen des Inhaltsverzeichnises | ja | true / false |
| abk | Abkürzungsverzeichnis | ja | true /false |
| lot | Verzeichnis der Tabellen | ja | true / false |
| lof | Liste der Figuren/Abbildungen | ja | true / false |
| skipfirstpage | Zählt die Titleseite nicht mit | ja | true |
| assignment.file | Pfad zur Aufgabenstellung | ja | string |
| assignment.pages | Seitenzahlen der Aufgabenstellung | ja | string |
### Aufgabenstellung mit einbinden
Das Template erlaubt es, durch setzen der Variablen im Block `assignment`, die Aufgabenstellung mit einzubinden und vor das eigentliche PDF zu stellen. Das Inhaltsverzeichnis der Lösung bleibt dabei korrekt erhalten, anders als es teilweise passieren kann wenn man die PDFs nachträglich zusammengesetzt werden.
Um dem Escaping von pandoc vorzubeugen müssen die Angaben im `assignment` Block in ` '`Wert`{=latex}' ` eingeschlossen werden.
**Seitenbereich**
Für einzelne Seiten kann man folgendes schreiben:
```
assignment:
file: '`Aufgabenstellung/Aufgabenstellung_1.pdf`{=latex}'
pages: '`1-2`{=latex}'
```
**Einzelne Seiten**
Für einzelne Seiten kann man folgendes schreiben:
```
assignment:
file: '`Aufgabenstellung/Aufgabenstellung_1.pdf`{=latex}'
pages: '`-`{=latex}'
```
**Bereich (Range)**
Eine Range kann durch `{x-y}` angegeben werden.
```
#assignment:
# file: '`Aufgabenstellung/Aufgabenstellung.pdf`{=latex}'
# pages: '`{1-2}`{=latex}'
```
Dabei unbedingt die einfachen Anführungszeichen drin lassen. Eine Range kann leider nicht angegeben
Weitere Hinweise stehen in der (Dokumentation)[https://texdoc.org/serve/pdfpages.pdf/0] des LaTeX packages `pdfpages`
## ToDo

@ -53,7 +53,7 @@ $endif$
\usepackage{helvet}
\usepackage{graphicx}
\usepackage[export]{adjustbox} % also loads graphicx, to have max width for graphics
\usepackage{pdfpages}
$if(tables)$
\usepackage{longtable,booktabs} % This two Packages are needet for Pandoc Table support. Issue is opened: https://github.com/jgm/pandoc/issues/1023
@ -230,6 +230,19 @@ $endif$
\begin{document}
% ----------------------------------------------------------------------------------------------------------
% Aufgabenstellung
% ----------------------------------------------------------------------------------------------------------
% Debug:
% include: $assignment.include$ file: $assignment.file$ pages: $assignment.pages$
$if(assignment.file)$
% include assignment is on
\includepdf[pages=$assignment.pages$]{$assignment.file$}
$else$
%include assignment was off
$endif$
% ----------------------------------------------------------------------------------------------------------
% Kopf und Fußzeile

Loading…
Cancel
Save