chore(latex): rework templates for print varieties
This commit is contained in:
parent
32d56e30cc
commit
446ab76286
@ -10,6 +10,7 @@ module Handler.Admin.Test
|
|||||||
|
|
||||||
import Import
|
import Import
|
||||||
import Utils.Print
|
import Utils.Print
|
||||||
|
import Utils.Print.Letters
|
||||||
|
|
||||||
import Handler.Utils
|
import Handler.Utils
|
||||||
import Jobs
|
import Jobs
|
||||||
|
|||||||
@ -5,13 +5,10 @@
|
|||||||
{-# OPTIONS_GHC -fno-warn-unused-top-binds #-}
|
{-# OPTIONS_GHC -fno-warn-unused-top-binds #-}
|
||||||
|
|
||||||
module Utils.Print
|
module Utils.Print
|
||||||
( pdfRenewal
|
( pdfRenewal, sendLetter' -- only used for test-letters triggered in route PrintSendR
|
||||||
, sendLetter, sendLetter'
|
|
||||||
, sendEmailOrLetter
|
, sendEmailOrLetter
|
||||||
, encryptPDF
|
, encryptPDF
|
||||||
, sanitizeCmdArg, validCmdArgument
|
, sanitizeCmdArg, validCmdArgument
|
||||||
, templateDIN5008
|
|
||||||
, templateRenewal
|
|
||||||
-- , compileTemplate, makePDF
|
-- , compileTemplate, makePDF
|
||||||
, _Meta, addMeta
|
, _Meta, addMeta
|
||||||
, toMeta, mbMeta -- single values
|
, toMeta, mbMeta -- single values
|
||||||
@ -68,40 +65,42 @@ import Utils.Print.RenewQualification
|
|||||||
-- This is a hack to allow variable interpolation within a document.
|
-- This is a hack to allow variable interpolation within a document.
|
||||||
-- Pandoc currently only allows interpolation within templates.
|
-- Pandoc currently only allows interpolation within templates.
|
||||||
-- An alternative Route would be to use Builders, but this prevents User-edited Markup Templates
|
-- An alternative Route would be to use Builders, but this prevents User-edited Markup Templates
|
||||||
reTemplateLetter :: P.PandocMonad m => P.Meta -> StoredMarkup -> m Text
|
-- reTemplateLetter :: P.PandocMonad m => P.Meta -> StoredMarkup -> m Text
|
||||||
reTemplateLetter meta StoredMarkup{..} = do
|
-- reTemplateLetter meta StoredMarkup{..} = do
|
||||||
tmpl <- compileTemplate strictMarkupInput
|
-- tmpl <- compileTemplate strictMarkupInput
|
||||||
doc <- areader readerOpts strictMarkupInput
|
-- doc <- areader readerOpts strictMarkupInput
|
||||||
let writerOpts = def { P.writerExtensions = P.pandocExtensions
|
-- let writerOpts = def { P.writerExtensions = P.pandocExtensions
|
||||||
, P.writerTemplate = Just tmpl }
|
-- , P.writerTemplate = Just tmpl }
|
||||||
P.writeMarkdown writerOpts
|
-- P.writeMarkdown writerOpts
|
||||||
$ appMeta setIsDeFromLang
|
-- $ appMeta setIsDeFromLang
|
||||||
$ addMeta meta doc
|
-- $ addMeta meta doc
|
||||||
where
|
-- where
|
||||||
strictMarkupInput = toStrict markupInput
|
-- strictMarkupInput = toStrict markupInput
|
||||||
readerOpts = def { P.readerExtensions = P.pandocExtensions
|
-- readerOpts = def { P.readerExtensions = P.pandocExtensions
|
||||||
, P.readerStripComments = True
|
-- , P.readerStripComments = True
|
||||||
}
|
-- }
|
||||||
-- reader :: (P.PandocMonad m, P.ToSources a) => P.ReaderOptions -> a -> m P.Pandoc
|
-- -- reader :: (P.PandocMonad m, P.ToSources a) => P.ReaderOptions -> a -> m P.Pandoc
|
||||||
areader = case markupInputFormat of
|
-- areader = case markupInputFormat of
|
||||||
MarkupHtml -> P.readHtml
|
-- MarkupHtml -> P.readHtml
|
||||||
MarkupMarkdown -> P.readMarkdown
|
-- MarkupMarkdown -> P.readMarkdown
|
||||||
MarkupPlaintext -> P.readMarkdown
|
-- MarkupPlaintext -> P.readMarkdown
|
||||||
|
|
||||||
reTemplateLetter' :: P.PandocMonad m => P.Meta -> Text -> m Text
|
-- reTemplateLetter' :: P.PandocMonad m => P.Meta -> Text -> m Text
|
||||||
reTemplateLetter' meta md = do
|
-- reTemplateLetter' meta md = do
|
||||||
tmpl <- compileTemplate md
|
-- tmpl <- compileTemplate md
|
||||||
doc <- P.readMarkdown readerOpts md
|
-- doc <- P.readMarkdown readerOpts md
|
||||||
let writerOpts = def { P.writerExtensions = P.pandocExtensions
|
-- let writerOpts = def { P.writerExtensions = P.pandocExtensions
|
||||||
, P.writerTemplate = Just tmpl }
|
-- , P.writerTemplate = Just tmpl }
|
||||||
P.writeMarkdown writerOpts
|
-- P.writeMarkdown writerOpts
|
||||||
$ appMeta setIsDeFromLang
|
-- $ appMeta setIsDeFromLang
|
||||||
$ addMeta meta doc
|
-- $ addMeta meta doc
|
||||||
where
|
-- where
|
||||||
readerOpts = def { P.readerExtensions = P.pandocExtensions
|
-- readerOpts = def { P.readerExtensions = P.pandocExtensions
|
||||||
, P.readerStripComments = True
|
-- , P.readerStripComments = True
|
||||||
}
|
-- }
|
||||||
|
|
||||||
|
|
||||||
|
-- | read and writes markdown, applying it as its own template to apply meta
|
||||||
mdTemplating :: Text -> P.Meta -> HandlerFor UniWorX (Either P.PandocError Text)
|
mdTemplating :: Text -> P.Meta -> HandlerFor UniWorX (Either P.PandocError Text)
|
||||||
mdTemplating template meta = runExceptT $ do
|
mdTemplating template meta = runExceptT $ do
|
||||||
let readerOpts = def { P.readerExtensions = P.pandocExtensions
|
let readerOpts = def { P.readerExtensions = P.pandocExtensions
|
||||||
@ -179,7 +178,7 @@ mdRenewal meta = runExceptT $ do
|
|||||||
$ addMeta meta doc
|
$ addMeta meta doc
|
||||||
|
|
||||||
|
|
||||||
-- | combines 'mdRenewal' and 'pdfDIN5008'
|
-- | combines 'mdRenewal' and 'pdfDIN5008'; only user in PrintSendR Test Handler
|
||||||
pdfRenewal :: P.Meta -> HandlerFor UniWorX (Either Text LBS.ByteString)
|
pdfRenewal :: P.Meta -> HandlerFor UniWorX (Either Text LBS.ByteString)
|
||||||
pdfRenewal meta = do
|
pdfRenewal meta = do
|
||||||
e_txt <- mdRenewal' meta
|
e_txt <- mdRenewal' meta
|
||||||
@ -187,27 +186,47 @@ pdfRenewal meta = do
|
|||||||
result <- actRight e_txt $ pdfDIN5008 meta
|
result <- actRight e_txt $ pdfDIN5008 meta
|
||||||
return $ over _Left P.renderError result
|
return $ over _Left P.renderError result
|
||||||
|
|
||||||
|
{-
|
||||||
-- | like pdfRenewal but without caching
|
-- | like pdfRenewal but without caching
|
||||||
pdfRenewal' :: P.Meta -> P.PandocIO LBS.ByteString
|
pdfRenewal' :: P.Meta -> P.PandocIO LBS.ByteString
|
||||||
pdfRenewal' meta = do
|
pdfRenewal' meta = do
|
||||||
doc <- reTemplateLetter' meta templateRenewal
|
doc <- reTemplateLetter' meta templateRenewal
|
||||||
pdfDIN5008' meta doc
|
pdfDIN5008' meta doc
|
||||||
|
-}
|
||||||
|
|
||||||
|
|
||||||
-- Generic Version
|
-- Generic Version
|
||||||
pdfLetter :: Text -> P.Meta -> HandlerFor UniWorX (Either Text LBS.ByteString)
|
pdfLetter :: Text -> P.Meta -> Handler (Either Text LBS.ByteString)
|
||||||
pdfLetter md meta = do
|
pdfLetter md meta = do
|
||||||
e_txt <- mdTemplating md meta
|
e_txt <- mdTemplating md meta
|
||||||
result <- actRight e_txt $ pdfDIN5008 meta
|
result <- actRight e_txt $ pdfDIN5008 meta
|
||||||
return $ over _Left P.renderError result
|
return $ over _Left P.renderError result
|
||||||
|
|
||||||
|
|
||||||
|
renderLetter :: (MDLetter l) => User -> l -> Handler (Either Text LBS.ByteString)
|
||||||
|
renderLetter rcvr mdl = do
|
||||||
|
now <- liftIO getCurrentTime
|
||||||
|
formatter@DateTimeFormatter{ format } <- getDateTimeFormatterUser' rcvr
|
||||||
|
let lang = selectDeEn $ rcvr & userLanguages -- select either German or English only, default de; see Utils.Lang
|
||||||
|
tmpl = getTemplate $ pure mdl
|
||||||
|
meta = letterMeta mdl formatter lang
|
||||||
|
<> mkMeta
|
||||||
|
[ toMeta "paper" ("TODO"::Text) -- TODO continue here
|
||||||
|
, toMeta "printid" ("TODO"::Text)
|
||||||
|
, toMeta "lang" lang
|
||||||
|
, toMeta "date" $ format SelFormatDate now
|
||||||
|
, toMeta "rcvr-name" $ rcvr & userDisplayName
|
||||||
|
, toMeta "address" $ fromMaybe [rcvr & userDisplayName] $ getPostalAddress rcvr
|
||||||
|
--, toMeta "rcvr-email" $ rcvr & userDisplayEmail -- note that some templates use "email" already otherwise
|
||||||
|
]
|
||||||
|
pdfLetter tmpl meta
|
||||||
|
|
||||||
---------------
|
---------------
|
||||||
-- PrintJobs --
|
-- PrintJobs --
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
|
|
||||||
-- DEPRECATED
|
-- Only used in print-test-handler for PrintSendR
|
||||||
sendLetter' :: Text -> LBS.ByteString -> (Maybe UserId, Maybe UserId) -> Maybe CourseId -> Maybe QualificationId -> Maybe LmsIdent -> DB (Either Text (Text, FilePath))
|
sendLetter' :: Text -> LBS.ByteString -> (Maybe UserId, Maybe UserId) -> Maybe CourseId -> Maybe QualificationId -> Maybe LmsIdent -> DB (Either Text (Text, FilePath))
|
||||||
sendLetter' printJobName pdf (printJobRecipient, printJobSender) printJobCourse printJobQualification printJobLmsUser =
|
sendLetter' printJobName pdf (printJobRecipient, printJobSender) printJobCourse printJobQualification printJobLmsUser =
|
||||||
sendLetter pdf PrintJobIdentification
|
sendLetter pdf PrintJobIdentification
|
||||||
|
|||||||
@ -42,12 +42,33 @@ import Text.Hamlet
|
|||||||
-- Hardcoded Templates --
|
-- Hardcoded Templates --
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
templateRenewal :: Text
|
|
||||||
templateRenewal = decodeUtf8 $(Data.FileEmbed.embedFile "templates/letter/fraport_renewal.md")
|
|
||||||
|
|
||||||
|
data LetterKind = Din5008 -- scrlttr2: Standard postal letter with address field, expects peprinted FraportLogo
|
||||||
|
| PinLetter -- Like Din5008, but for special paper with a protected pin field
|
||||||
|
| Plain -- scrartcl: Empty, expects empty paper with no preprints
|
||||||
|
| PlainLogo -- Like plain, but expects to be printed on paper with Logo
|
||||||
|
-- | Logo -- Like plain, but prints Fraport Logo in the upper right corner
|
||||||
|
deriving (Eq, Show)
|
||||||
|
|
||||||
|
templateLatex :: LetterKind -> Text
|
||||||
|
templateLatex =
|
||||||
|
let
|
||||||
|
tDin5008 = decodeUtf8 $(Data.FileEmbed.embedFile "templates/letter/din5008.latex")
|
||||||
|
tPinLetter = decodeUtf8 $(Data.FileEmbed.embedFile "templates/letter/din5008with_pin.latex")
|
||||||
|
tPlain = decodeUtf8 $(Data.FileEmbed.embedFile "templates/letter/plain_article.latex")
|
||||||
|
in \case
|
||||||
|
PinLetter -> tPinLetter
|
||||||
|
Din5008 -> tDin5008
|
||||||
|
PlainLogo -> tPlain
|
||||||
|
Plain -> tPlain
|
||||||
|
|
||||||
|
-- | DEPRECATED TODO: remove
|
||||||
templateDIN5008 :: Text
|
templateDIN5008 :: Text
|
||||||
templateDIN5008 = decodeUtf8 $(Data.FileEmbed.embedFile "templates/letter/din5008.latex")
|
templateDIN5008 = decodeUtf8 $(Data.FileEmbed.embedFile "templates/letter/din5008.latex")
|
||||||
|
|
||||||
|
templateRenewal :: Text
|
||||||
|
templateRenewal = decodeUtf8 $(Data.FileEmbed.embedFile "templates/letter/fraport_renewal.md")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
---------------
|
---------------
|
||||||
|
|||||||
@ -80,7 +80,7 @@ $endif$
|
|||||||
|
|
||||||
%\usepackage[a4paper, bottom=8cm, top=3cm]{geometry} %%% THIS HAD NO EFFECT AT ALL
|
%\usepackage[a4paper, bottom=8cm, top=3cm]{geometry} %%% THIS HAD NO EFFECT AT ALL
|
||||||
|
|
||||||
\usepackage{parskip}
|
%\usepackage{parskip}% might be useful for pandoc tightlist
|
||||||
|
|
||||||
\usepackage{graphics}
|
\usepackage{graphics}
|
||||||
\usepackage{xcolor}
|
\usepackage{xcolor}
|
||||||
@ -120,7 +120,11 @@ $endif$
|
|||||||
}
|
}
|
||||||
\setkomavar{fromphone}{$phone$}
|
\setkomavar{fromphone}{$phone$}
|
||||||
\setkomavar{fromemail}{$email$}
|
\setkomavar{fromemail}{$email$}
|
||||||
\setkomavar{signature}{$author$}
|
%if there is a handwritten signature
|
||||||
|
%\setkomavar{signature}{$author$}
|
||||||
|
%if there is no handwritten signature
|
||||||
|
\setkomavar{signature}{}
|
||||||
|
\setplength{sigbeforevskip}{-\baselineskip}
|
||||||
|
|
||||||
\setkomavar{date}{$date$}
|
\setkomavar{date}{$date$}
|
||||||
\setkomavar{place}{$place$}
|
\setkomavar{place}{$place$}
|
||||||
@ -143,18 +147,8 @@ $endif$
|
|||||||
\opening{$en-opening$}
|
\opening{$en-opening$}
|
||||||
$endif$
|
$endif$
|
||||||
|
|
||||||
\begin{textblock}{65}(84,232)%hpos,vpos
|
\begin{textblock}{65}(142,21)%hpos,vpos
|
||||||
\textcolor{black!39}{
|
\textcolor{white!0}{:::$paper$:::$printid$:::}%
|
||||||
\begin{labeling}{Password:}
|
|
||||||
$if(is-de)$
|
|
||||||
\item[Benutzer:] \texttt{$login$}
|
|
||||||
\item[Passwort:] \texttt{$pin$}
|
|
||||||
$else$
|
|
||||||
\item[User:] \texttt{$login$}
|
|
||||||
\item[Password:] \texttt{$pin$}
|
|
||||||
$endif$
|
|
||||||
\end{labeling}
|
|
||||||
~}
|
|
||||||
\end{textblock}
|
\end{textblock}
|
||||||
|
|
||||||
$body$
|
$body$
|
||||||
|
|||||||
182
templates/letter/din5008with_pin.latex
Normal file
182
templates/letter/din5008with_pin.latex
Normal file
@ -0,0 +1,182 @@
|
|||||||
|
%Based upon https://github.com/benedictdudel/pandoc-letter-din5008
|
||||||
|
\documentclass[
|
||||||
|
paper=A4,
|
||||||
|
foldmarks=BTm, % show foldmarks top, middle, bottom
|
||||||
|
foldmarks=false, % don't print foldmarks
|
||||||
|
fromalign=left, % letter head on the right
|
||||||
|
fromphone=true, % show phone number
|
||||||
|
fromemail=true, % show email
|
||||||
|
fromlogo=false, % don't show logo in letter head
|
||||||
|
version=last, % latest version of KOMA letter
|
||||||
|
pagenumber=botright, % show pagenumbers on bottom right
|
||||||
|
firstfoot=false % first-page footer
|
||||||
|
]{scrlttr2}
|
||||||
|
|
||||||
|
\PassOptionsToPackage{hyphens}{url}
|
||||||
|
\PassOptionsToPackage{unicode$for(hyperrefoptions)$,$hyperrefoptions$$endfor$}{hyperref}
|
||||||
|
\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available
|
||||||
|
\IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}}
|
||||||
|
\hypersetup{
|
||||||
|
$if(title-meta)$
|
||||||
|
pdftitle={$title-meta$},
|
||||||
|
$endif$
|
||||||
|
$if(author-meta)$
|
||||||
|
pdfauthor={$author-meta$},
|
||||||
|
$endif$
|
||||||
|
$if(lang)$
|
||||||
|
pdflang={$lang$},
|
||||||
|
$endif$
|
||||||
|
$if(subject)$
|
||||||
|
pdfsubject={$subject$},
|
||||||
|
$endif$
|
||||||
|
$if(keywords)$
|
||||||
|
pdfkeywords={$for(keywords)$$keywords$$sep$, $endfor$},
|
||||||
|
$endif$
|
||||||
|
}
|
||||||
|
\usepackage{url}
|
||||||
|
|
||||||
|
\usepackage{iftex}
|
||||||
|
|
||||||
|
%\usepackage[ngerman]{babel}
|
||||||
|
$if(lang)$
|
||||||
|
\ifLuaTeX
|
||||||
|
\usepackage[bidi=basic]{babel}
|
||||||
|
\else
|
||||||
|
\usepackage[bidi=default]{babel}
|
||||||
|
\fi
|
||||||
|
\babelprovide[main,import]{$babel-lang$}
|
||||||
|
$for(babel-otherlangs)$
|
||||||
|
\babelprovide[import]{$babel-otherlangs$}
|
||||||
|
$endfor$
|
||||||
|
% get rid of language-specific shorthands (see #6817):
|
||||||
|
\let\LanguageShortHands\languageshorthands
|
||||||
|
\def\languageshorthands#1{}
|
||||||
|
$endif$
|
||||||
|
|
||||||
|
\ifLuaTeX
|
||||||
|
\usepackage{selnolig} % disable illegal ligatures
|
||||||
|
\fi
|
||||||
|
|
||||||
|
\ifPDFTeX
|
||||||
|
\usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc}
|
||||||
|
\usepackage[utf8]{inputenc}
|
||||||
|
\usepackage{textcomp} % provide euro and other symbols
|
||||||
|
\usepackage{DejaVuSansMono} % better monofont
|
||||||
|
\else
|
||||||
|
% if luatex or xetex
|
||||||
|
\usepackage{fontspec}
|
||||||
|
\setmonofont{DejaVu Sans Mono}
|
||||||
|
\fi
|
||||||
|
|
||||||
|
$if(mathspec)$
|
||||||
|
\ifXeTeX
|
||||||
|
\usepackage{mathspec}
|
||||||
|
\else
|
||||||
|
\usepackage{unicode-math}
|
||||||
|
\fi
|
||||||
|
$else$
|
||||||
|
\usepackage{unicode-math}
|
||||||
|
$endif$
|
||||||
|
|
||||||
|
%\usepackage[a4paper, bottom=8cm, top=3cm]{geometry} %%% THIS HAD NO EFFECT AT ALL
|
||||||
|
|
||||||
|
%\usepackage{parskip}% might be useful for pandoc tightlist
|
||||||
|
|
||||||
|
\usepackage{graphics}
|
||||||
|
\usepackage{xcolor}
|
||||||
|
|
||||||
|
\usepackage{booktabs}
|
||||||
|
\usepackage{longtable}
|
||||||
|
|
||||||
|
\usepackage[right]{eurosym}
|
||||||
|
|
||||||
|
\usepackage{enumitem}
|
||||||
|
|
||||||
|
\makeatletter
|
||||||
|
\setplength{firstheadvpos}{1.8cm}
|
||||||
|
\setplength{toaddrvpos}{5.5cm}
|
||||||
|
\setlength{\@tempskipa}{-1.2cm}%
|
||||||
|
\@addtoplength{toaddrheight}{\@tempskipa}
|
||||||
|
\makeatother
|
||||||
|
|
||||||
|
\setlength{\oddsidemargin}{\useplength{toaddrhpos}}
|
||||||
|
\addtolength{\oddsidemargin}{-1in}
|
||||||
|
\setlength{\textwidth}{\useplength{firstheadwidth}}
|
||||||
|
|
||||||
|
\usepackage[absolute,quiet,overlay]{textpos}%,showboxes
|
||||||
|
\setlength{\TPHorizModule}{1mm}
|
||||||
|
\setlength{\TPVertModule}{1mm}
|
||||||
|
|
||||||
|
\providecommand{\tightlist}{%
|
||||||
|
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
|
||||||
|
|
||||||
|
\begin{document}%
|
||||||
|
\setkomavar{fromname}{$author$}%
|
||||||
|
\renewcommand*{\raggedsignature}{\raggedright}%
|
||||||
|
\setkomavar{fromaddress}{%
|
||||||
|
$for(return-address)$%
|
||||||
|
$return-address$$sep$\\
|
||||||
|
$endfor$
|
||||||
|
}
|
||||||
|
\setkomavar{fromphone}{$phone$}
|
||||||
|
\setkomavar{fromemail}{$email$}
|
||||||
|
%if there is a handwritten signature
|
||||||
|
%\setkomavar{signature}{$author$}
|
||||||
|
%if there is no handwritten signature
|
||||||
|
\setkomavar{signature}{}
|
||||||
|
\setplength{sigbeforevskip}{-\baselineskip}
|
||||||
|
|
||||||
|
\setkomavar{date}{$date$}
|
||||||
|
\setkomavar{place}{$place$}
|
||||||
|
|
||||||
|
$if(is-de)$
|
||||||
|
\setkomavar{subject}{$de-subject$}
|
||||||
|
$else$
|
||||||
|
\setkomavar{subject}{$en-subject$}
|
||||||
|
$endif$
|
||||||
|
|
||||||
|
\begin{letter}{%
|
||||||
|
$for(address)$
|
||||||
|
$address$$sep$\\
|
||||||
|
$endfor$
|
||||||
|
}
|
||||||
|
|
||||||
|
$if(is-de)$
|
||||||
|
\opening{$de-opening$}
|
||||||
|
$else$
|
||||||
|
\opening{$en-opening$}
|
||||||
|
$endif$
|
||||||
|
|
||||||
|
\begin{textblock}{65}(142,21)%hpos,vpos
|
||||||
|
\textcolor{white!0}{:::$paper$:::$printid$:::}%
|
||||||
|
\end{textblock}
|
||||||
|
\begin{textblock}{65}(84,232)%hpos,vpos
|
||||||
|
\textcolor{black!39}{
|
||||||
|
\begin{labeling}{Password:}
|
||||||
|
$if(is-de)$
|
||||||
|
\item[Benutzer:] \texttt{$login$}
|
||||||
|
\item[Passwort:] \texttt{$pin$}
|
||||||
|
$else$
|
||||||
|
\item[User:] \texttt{$login$}
|
||||||
|
\item[Password:] \texttt{$pin$}
|
||||||
|
$endif$
|
||||||
|
\end{labeling}
|
||||||
|
~}
|
||||||
|
\end{textblock}
|
||||||
|
|
||||||
|
$body$
|
||||||
|
|
||||||
|
$if(is-de)$
|
||||||
|
\closing{$de-closing$}
|
||||||
|
$else$
|
||||||
|
\closing{$en-closing$}
|
||||||
|
$endif$
|
||||||
|
|
||||||
|
%\ps $postskriptum$
|
||||||
|
|
||||||
|
$if(encludes)$
|
||||||
|
\setkomavar*{enclseparator}{Anlage}
|
||||||
|
\encl{$encludes$}
|
||||||
|
$endif$
|
||||||
|
\end{letter}
|
||||||
|
\end{document}
|
||||||
@ -29,11 +29,12 @@ lang: de-de
|
|||||||
is-de: true
|
is-de: true
|
||||||
login: 123456
|
login: 123456
|
||||||
pin: abcdef
|
pin: abcdef
|
||||||
|
paper: pin
|
||||||
# Emfpänger
|
# Emfpänger
|
||||||
examinee: E. M. Pfänger
|
examinee: P. Rüfling
|
||||||
address:
|
address:
|
||||||
- Musterfirma GmbH
|
|
||||||
- E. M. Pfänger
|
- E. M. Pfänger
|
||||||
|
- Musterfirma GmbH
|
||||||
- Musterstraße 11
|
- Musterstraße 11
|
||||||
- 12345 Musterstadt
|
- 12345 Musterstadt
|
||||||
...
|
...
|
||||||
|
|||||||
105
templates/letter/plain_article.latex
Normal file
105
templates/letter/plain_article.latex
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
%Based upon https://github.com/benedictdudel/pandoc-letter-din5008
|
||||||
|
\documentclass[
|
||||||
|
paper=A4,
|
||||||
|
firstfoot=false % first-page footer
|
||||||
|
]{scrlttr2}
|
||||||
|
|
||||||
|
\PassOptionsToPackage{hyphens}{url}
|
||||||
|
\PassOptionsToPackage{unicode$for(hyperrefoptions)$,$hyperrefoptions$$endfor$}{hyperref}
|
||||||
|
\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available
|
||||||
|
\IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}}
|
||||||
|
\hypersetup{
|
||||||
|
$if(title-meta)$
|
||||||
|
pdftitle={$title-meta$},
|
||||||
|
$endif$
|
||||||
|
$if(author-meta)$
|
||||||
|
pdfauthor={$author-meta$},
|
||||||
|
$endif$
|
||||||
|
$if(lang)$
|
||||||
|
pdflang={$lang$},
|
||||||
|
$endif$
|
||||||
|
$if(subject)$
|
||||||
|
pdfsubject={$subject$},
|
||||||
|
$endif$
|
||||||
|
$if(keywords)$
|
||||||
|
pdfkeywords={$for(keywords)$$keywords$$sep$, $endfor$},
|
||||||
|
$endif$
|
||||||
|
}
|
||||||
|
\usepackage{url}
|
||||||
|
|
||||||
|
\usepackage{iftex}
|
||||||
|
|
||||||
|
%\usepackage[ngerman]{babel}
|
||||||
|
$if(lang)$
|
||||||
|
\ifLuaTeX
|
||||||
|
\usepackage[bidi=basic]{babel}
|
||||||
|
\else
|
||||||
|
\usepackage[bidi=default]{babel}
|
||||||
|
\fi
|
||||||
|
\babelprovide[main,import]{$babel-lang$}
|
||||||
|
$for(babel-otherlangs)$
|
||||||
|
\babelprovide[import]{$babel-otherlangs$}
|
||||||
|
$endfor$
|
||||||
|
% get rid of language-specific shorthands (see #6817):
|
||||||
|
\let\LanguageShortHands\languageshorthands
|
||||||
|
\def\languageshorthands#1{}
|
||||||
|
$endif$
|
||||||
|
|
||||||
|
\ifLuaTeX
|
||||||
|
\usepackage{selnolig} % disable illegal ligatures
|
||||||
|
\fi
|
||||||
|
|
||||||
|
\ifPDFTeX
|
||||||
|
\usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc}
|
||||||
|
\usepackage[utf8]{inputenc}
|
||||||
|
\usepackage{textcomp} % provide euro and other symbols
|
||||||
|
\usepackage{DejaVuSansMono} % better monofont
|
||||||
|
\else
|
||||||
|
% if luatex or xetex
|
||||||
|
\usepackage{fontspec}
|
||||||
|
\setmonofont{DejaVu Sans Mono}
|
||||||
|
\fi
|
||||||
|
|
||||||
|
$if(mathspec)$
|
||||||
|
\ifXeTeX
|
||||||
|
\usepackage{mathspec}
|
||||||
|
\else
|
||||||
|
\usepackage{unicode-math}
|
||||||
|
\fi
|
||||||
|
$else$
|
||||||
|
\usepackage{unicode-math}
|
||||||
|
$endif$
|
||||||
|
|
||||||
|
%\usepackage[a4paper, bottom=8cm, top=3cm]{geometry} %%% THIS HAD NO EFFECT AT ALL
|
||||||
|
|
||||||
|
%\usepackage{parskip}% might be useful for pandoc tightlist
|
||||||
|
|
||||||
|
\usepackage{graphics}
|
||||||
|
\usepackage{xcolor}
|
||||||
|
|
||||||
|
\usepackage{booktabs}
|
||||||
|
\usepackage{longtable}
|
||||||
|
|
||||||
|
\usepackage[right]{eurosym}
|
||||||
|
|
||||||
|
\usepackage{enumitem}
|
||||||
|
|
||||||
|
\setlength{\oddsidemargin}{\useplength{toaddrhpos}}
|
||||||
|
\addtolength{\oddsidemargin}{-1in}
|
||||||
|
\setlength{\textwidth}{\useplength{firstheadwidth}}
|
||||||
|
|
||||||
|
\usepackage[absolute,quiet,overlay]{textpos}%,showboxes
|
||||||
|
\setlength{\TPHorizModule}{1mm}
|
||||||
|
\setlength{\TPVertModule}{1mm}
|
||||||
|
|
||||||
|
\providecommand{\tightlist}{%
|
||||||
|
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
|
||||||
|
|
||||||
|
\begin{document}%
|
||||||
|
\begin{textblock}{65}(142,21)%hpos,vpos
|
||||||
|
\textcolor{white!0}{:::$paper$:::$printid$:::}%
|
||||||
|
\end{textblock}
|
||||||
|
|
||||||
|
$body$
|
||||||
|
|
||||||
|
\end{document}
|
||||||
Reference in New Issue
Block a user