diff --git a/pandocPipeline/Logo.png b/pandocPipeline/Logo.png new file mode 100644 index 0000000..3c4e6d8 Binary files /dev/null and b/pandocPipeline/Logo.png differ diff --git a/pandocPipeline/README.md b/pandocPipeline/README.md new file mode 100644 index 0000000..303708e --- /dev/null +++ b/pandocPipeline/README.md @@ -0,0 +1,27 @@ +# Pandoc Pipeline + +Einfache Rendering Pipeline für Pandoc. +Optimiert für die Konvertierung von Markdown zu PDF oder zu DOCX. +Diese beiden Ausgangsformate werden während des Renderingsprozesses mit einem Branding versehen. + +Zur Verwendung der Pipeline muss installiert sein: +pdflatex +pandoc +git + +:warning: Umgebungsvariablen setzen nicht vergessen :warning: + +:seedling: :seedling: :seedling: +git liefert bei Installation im Ordner /bin eine Sammlung von unix-Kommandos mit. +Dieser Pfad muss auch zu den Umgebungsvariablen hinzugefügt werden. +:seedling: :seedling: :seedling: + +## Verwendung + +Für eine universelle Verwendung sollte auch dieser Pfad zu den Umgebungsvariablen hinzugefügt werden. + +Konvertierung md -> pdf +`pandocPipeline -u "Dokumentbearbeiter" -t "Dokumententitel" -f dateiname -e pdf` + +Konvertierung md -> docx +`pandocPipeline -f dateiname -e docx` diff --git a/pandocPipeline/body.sed b/pandocPipeline/body.sed new file mode 100644 index 0000000..4575a56 --- /dev/null +++ b/pandocPipeline/body.sed @@ -0,0 +1,32 @@ +/\$\$/ { + N; + /\\begin\{align\}/ { + s/\$\$//; + p; + d; + } + /\\newcommand/ { + N; + d; + } +} + +/\\end\{align\}/ { + N; + /\$\$/ { + s/\$\$//; + p; + d; + } +} +s/lightgreen/Lime/g; +s/\{green/\{Green/g; +s/\{yellow/\{Goldenrod/g; +s/\{darkorange/\{DarkOrange/g; +s/:::/::: /g; +s/\\circ \- \\bullet/\\;\\laplace\\;/g; +s/\{align/\{align\*/g; +s/\\color/\\textcolor/g; +s/\*\*
/\\begin{center}\\textbf{/g; +s/<\/Center>\*\*/}\\end{center}/g; + diff --git a/pandocPipeline/custom-reference.docx b/pandocPipeline/custom-reference.docx new file mode 100644 index 0000000..2239f1e Binary files /dev/null and b/pandocPipeline/custom-reference.docx differ diff --git a/pandocPipeline/header.md b/pandocPipeline/header.md new file mode 100644 index 0000000..92531e0 --- /dev/null +++ b/pandocPipeline/header.md @@ -0,0 +1,34 @@ +--- +documentclass: extarticle +fontsize: 12pt +geometry: margin=2cm +papersize: a4 +header-includes: | + \usepackage{pdfpages} + \usepackage{trfsigns} + \usepackage[breakable]{tcolorbox} + \usepackage[compatV3]{fancyhdr} + \renewcommand{\contentsname}{Inhaltsverzeichnis} + \pagestyle{fancy} + \fancyhf{} + \setlength{\textheight}{700pt} + \setlength{\footskip}{5pt} + \setlength{\headheight}{52pt} + \rhead{\includegraphics[width=.3\textwidth]{path/to/Logo.png}} + \lhead{ + Current version date: \today \\ + Editor: + Title: + } + \cfoot{\thepage} + \renewcommand{\footrulewidth}{0.4pt} + \newtcolorbox{info-box}{colback=cyan!5!white,arc=0pt,outer arc=0pt,colframe=cyan!60!black} + \newtcolorbox{warning-box}{colback=orange!5!white,arc=0pt,outer arc=0pt,colframe=orange!80!black} + \newtcolorbox{error-box}{colback=red!5!white,arc=0pt,outer arc=0pt,colframe=red!75!black} +pandoc-latex-environment: + tcolorbox: [box] + info-box: [info] + warning-box: [warning] + error-box: [danger] +classoption: svgnames +--- \ No newline at end of file diff --git a/pandocPipeline/pandocPipeline.bat b/pandocPipeline/pandocPipeline.bat new file mode 100644 index 0000000..be00f6c --- /dev/null +++ b/pandocPipeline/pandocPipeline.bat @@ -0,0 +1,131 @@ +@echo off + +::if no arguments given show help +IF "%1"=="" (goto :help) + +set editor=%USERNAME% +set title = +set file = none +set ending = tex +::path to this script +set script= %~dp0 +set version= 1.0 + +::parsing arguments +:loop +IF NOT "%1"=="" ( + IF "%1"=="-h" ( + goto :help + ) + IF "%1"=="--help" ( + goto :help + ) + IF "%1"=="-v" ( + goto :version + ) + IF "%1"=="--version" ( + goto :version + ) + IF "%1"=="-u" ( + SET editor=%2 + SHIFT + ) + IF "%1"=="-user" ( + SET editor=%2 + SHIFT + ) + IF "%1"=="-t" ( + SET title=%2 + SHIFT + ) + IF "%1"=="--title" ( + SET title=%2 + SHIFT + ) + IF "%1"=="-f" ( + SET file=%2 + SHIFT + ) + IF "%1"=="--file" ( + SET file=%2 + SHIFT + ) + IF "%1"=="-e" ( + SET ending=%2 + SHIFT + ) + IF "%1"=="--ending" ( + SET ending=%2 + SHIFT + ) + SHIFT + GOTO :loop +) + +:program +::check if file to parse was given +IF %file%==none (goto :errorfile) + +IF %ending%==pdf (goto :program_tex) +IF %ending%==docx (goto :program_docx) ELSE (goto :program_other) + +:program_tex +set header=%script%header.md +set header=%header: =% +set sedfile=%script%body.sed +set sedfile=%sedfile: =% +set picture=%script%Logo.png +set picture=%picture: =% +set picture=%picture:\=/% +set pandocenv=%script%pandoc_latex_environment.py +set pandocenv=%pandocenv: =% +::fill header with appropriate information +sed -i 's,Editor:.*,Editor: '%editor%' \\\\\\\\,' %header% +sed -i 's,Title:.*,Title: '%title%',' %header% +sed -i 's,textwidth]{.*,textwidth]{'%picture%'}},' %header% +::execute pandoc +cat %file%.md %header% | sed -E -f %sedfile%| pandoc --filter %pandocenv% --number-sections --toc -i - -o %file%.pdf +goto :open + +:program_docx +set refdoc=%script%custom-reference.docx +set refdoc=%refdoc: =% +pandoc %file%.md --reference-doc=%refdoc% -f markdown -t %ending% -s -o %file%.%ending% +goto :open + +:program_other +pandoc %file%.md -f markdown -t %ending% -s -o %file%.%ending% +goto :open + +:open +%file%.%ending% +goto :end + +:help +echo Tool to convert file from markdown to another format +echo Usage: pandocPipeline [OPTION] [COMMAND] +echo -h, --help show this help screen +echo -f, --file specify filename without extension +echo -e, --ending spefify target file format +echo -u, --user=%USERNAME% enter name of file editor set between "" (only for target format pdf) +echo -t, --title enter title of document set between "" (only for target format pdf) +echo Pipeline is optimized for target format pdf and docx but works with others as well +echo Possible fileformats see: https://pandoc.org/diagram.svgz?v=20230203095535 +goto :end + +:version +echo pandocPipeline %version% +goto :end + +:error +echo An error occured +echo Try 'pandocPipeline --help' for more information +goto :end + +:errorfile +echo No file was given +echo Please add a filename to your command +echo Try 'pandocPipeline --help' for more information +goto :end + +:end diff --git a/pandocPipeline/pandoc_latex_environment.py b/pandocPipeline/pandoc_latex_environment.py new file mode 100644 index 0000000..ecddbf2 --- /dev/null +++ b/pandocPipeline/pandoc_latex_environment.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python + +""" +Pandoc filter for adding LaTeX environement on specific div +""" + +from pandocfilters import toJSONFilters, stringify, RawBlock, Para + +import re + +def environment(key, value, format, meta): + # Is it a div and the right format? + if key == 'Div' and format in ['latex', 'beamer']: + + # Get the attributes + [[id, classes, properties], content] = value + + currentClasses = set(classes) + + for environment, definedClasses in getDefined(meta).items(): + # Is the classes correct? + if currentClasses >= definedClasses: + if id != '': + label = '\n\\label{' + id + '}' + else: + label = '' + + currentProperties = dict(properties) + if 'title' in currentProperties: + title = '[' + currentProperties['title'] + ']' + else: + title = '' + + before = RawBlock('tex', '\\begin{' + environment + '}' + title + label) + after = RawBlock('tex', '\\end{' + environment + '}') + + value[1] = [before] + content + [after] + break + +def getDefined(meta): + # Return the latex-environment defined in the meta + if not hasattr(getDefined, 'value'): + getDefined.value = {} + if 'pandoc-latex-environment' in meta and meta['pandoc-latex-environment']['t'] == 'MetaMap': + for environment, classes in meta['pandoc-latex-environment']['c'].items(): + if classes['t'] == 'MetaList': + getDefined.value[environment] = [] + for klass in classes['c']: + string = stringify(klass) + if re.match('^[a-zA-Z][\w.:-]*$', string): + getDefined.value[environment].append(string) + getDefined.value[environment] = set(getDefined.value[environment]) + return getDefined.value + +def main(): + toJSONFilters([environment]) + +if __name__ == '__main__': + main()