install.packages("bookdown")
1 Einleitung
Ich nutze RMarkdown
und RStudio
schon seit längerem für statistische Auswertungen und Beispielrechnungen in der Lehre. Für meine Briefe und Rechnungen habe ich immer LaTeX
verwendet.
Im Dezember habe ich dann dieses Video von Rob Hyndman gesehen:
https://www.youtube.com/watch?v=_D-ux3MqGug
…und dachte mir: das will ich auch!
Zu dieser Anleitung gibt es ein Github-Repo mit dem Template-Paket und der Rmd-Datei dieser Anleitung: https://github.com/produnis/RMarkdownMyStyle.
Außerdem ist der Arikel bei RPubs.com veröffentlicht, und dort etwas “hübscher” dargestellt, siehe https://rpubs.com/produnis/RMarkdownTemplates.
1.1 Vorwarnung
Diese Anleitung setzt voraus, dass Sie Ihre Briefe und Rechnungen bereits in LaTeX
schreiben, bzw, dass eine Brief- oder Rechnungsvorlage in LaTeX
vorliegt. In diesem Tutorial möchte ich zeigen, wie Sie Ihre LaTeX
-Vorlagen als Templates
in RMarkdown
verfügbar machen können, um die Briefe im PDF
-Format zu erzeugen. Das heisst, dass letztendlich Ihr RMarkdown
wieder über LaTeX
nach PDF
kompiliert wird. LaTeX
muss also installiert sein, und Sie müssen das gewünschte Layout bereits in LaTeX
erstellt haben. Ebenso muss das bookdown
-Paket installiert sein.
Die Überführung nach Rmarkdown
geht am einfachsten, indem man sie als Templates
in einem eigenen R
-Paket abpeichert.
2 Ein eigenes R
-Paket anlegen
Klicke in RStudio
auf File
→ New Project...
Wählen Sie R Package
aus.
Geben Sie dem Paket einen Namen, z.B. MyStyle
, und klicken Sie auf Create Project...
Im Arbeitsverzeichnis des neuen Projekts liegen nun die notwendigen Dateien und grundlegenden Paketordner, wobei wir das meister ignorieren können.
In DESCRIPTION
können Sie eine Beschreibung des Pakets vornehmen. Wenn Sie das Paket eh nie veröffentlichen, können Sie sich diesen Schritt sparen.
Im Verzeichnis R
werden alle Scriptdateien automatisch ausgeführt, sobald das Paket aktiviert wird. Dort hat RStudio bereits die Dummy-Datei hello.R
angelegt. Die dort hinterlegte Funktion hello()
steht also nach Aktivierung des Pakets zur Verfügung.
Das können wir direkt testen, indem wir das Paket “bauen und installieren”.
Klicken Sie im Datenfenster (rechter oberer Bereich) auf den Reiter Build
.
In diesem Bereich können Sie auf den Knopf Install and Restart
klicken.
Dadurch wird Ihr neues Paket installiert und automatisch per library(MyStyle)
geladen. Sie können nun alle Funktionen Ihres Pakets in der R
-Konsole aufrufen. Probieren wir also die Dummy-Funktion hello()
aus, die in der Datei R/hello.R
hinterlegt ist:
hello()
Immer dann, wenn Sie dem Paket neue Funktionen (oder Templates) hinzugefügt haben, können Sie es durch Klick auf Install and Restart
aktualisieren.
2.1 Ein Template für Briefe anlegen
Templates fürRMarkdown
müssen innerhalb des Pakets im Ordner inst/rmardown/templates/
vorliegen. Jedes Template erhält einen eigenen Unterordner, in welchem die erforderlichen Dateien abgelegt sind. Auch hier folgend die Dateien einer gewissen Struktur.
Mit der Funktion use_rmarkdown_template()
aus dem Paket usethis
können wir das “Skelett” des neuen Templates erzeugen. Beginnen wir mit der Briefvorlage. Das Template soll meinBrief
heissen.
install.packages("usethis", dependencies = T)
::use_rmarkdown_template(
usethistemplate_name = "meinBrief",
template_dir = NULL,
template_description = "Meine private Briefvorlage",
template_create_dir = FALSE
)
Wie Sie sehen, wurden die Unterordner inst/rmardown/templates/meinbrief
angelegt. Hier liegt die Datei template.yaml
. Sie enthält die Informationen, die wir der use_rmarkdown_template()
-Funktion übergeben haben.
Hier müssen wir nichts ändern.
Im Unterordner skeleton
liegt die Datei skeleton.Rmd
. In ihr werden Beispieltexte und -code hinterlegt, die später beim Aufruf des Templates als Starttext erzeugt werden. Wir benutzen diese Datei, um unser Template zu testen und die benötigten Variablen zu hinterlegen. Wenn wir unser Template später in RStudio
aus den Vorlagen auswählen, dann werden alle Dateien, die im Unterorder skeleton
liegen, in das neu erstellte Projekt kopiert.
2.1.1 LaTeX Vorlage
Nehmen wir als Beispiel die folgende LaTeX-Vorlage für einen Brief. Das Beispiel ist lauffähig, wenn Sie eine Bilddatei mit dem Namen Unterschrift.png
im selben Verzeichnis liegen haben.
\documentclass[DIN,
fontsize=11pt, % fontsize
paper=a4, % page size a4
firsthead=on, % display header on first page
firstfoot=on, % display footer on first page
pagenumber=off, % position of the page number
parskip=half, % Use indent instead of skip, half, false
enlargefirstpage=on, % more space on first page
fromalign=locationright, % placement of name in letter head
addrfield=on, % address field for envelope with window, on or true
subject=titled, % placement of subject, beforeopening or titled
foldmarks=on, % print foldmarks
numericaldate=off, % display date in numbers only
KOMAold]{scrlttr2}
\usepackage[T1]{fontenc}
\usepackage[dvips]{graphicx}
\usepackage[ngerman]{babel}
\usepackage{lipsum}
\usepackage[utf8]{inputenc}
\usepackage{times}
% \usepackage{lmodern}
\usepackage{longtable}
\usepackage{booktabs}
\usepackage{lastpage}
\usepackage[rgb]{xcolor}
\usepackage{hyperref}
\hypersetup{%
pdfborder=0 0 0,
pdfauthor={},
pdftitle={},
pdfsubject={},
pdfkeywords={},
pdfpagemode={UseOutlines},
bookmarksopen,
pdfstartview={FitH},
colorlinks,
linkcolor={black},
citecolor={black},
urlcolor={blue}
}
\urlstyle{same}
% Randbereiche mit geometry
\usepackage{geometry}
\geometry{a4paper,left=25mm,right=20mm}
\usepackage{lastpage} % letzte Seite anzeigen
\usepackage{marvosym}
\usepackage{blindtext}
% speichere eigene Variablen für Werte, die häufig drankommen
\newcommand{\myFirstname}{Timm}
\newcommand{\myFamilyname}{Thaler}
\newcommand{\myStreet}{Absenderstr. 7}
\newcommand{\myTown}{47325 Schickensen}
% ---Angaben für das Absenderfeld--------
\setkomavar{fromname}{\flushright\normalfont\textbf{\myFirstname\ \myFamilyname}}
\setkomavar{signature}{\myFirstname\ \myFamilyname}
\setkomavar{fromaddress}{\flushright\normalfont\scriptsize%
Prof. Dr. \myFirstname\ \myFamilyname\\
\myStreet\\\myTown\\%
+49 176 555 984 66\\%
timm@thaler.de\\[2mm]
ING DiBa\\
DE06 505 165 55 5555 4312 64\\[2mm]
Aktenzeichen:\quad\ 2021-4\\
\setkomavar{date}{\today} %datum im Absenderfeld
Datum:\quad \today}
%---------------------------------------
\renewcommand*\familydefault{\sfdefault}
% Anordnung im Absenderfeld
\setkomavar{firsthead}{}
\setkomavar{location}{%
\raggedleft
\usekomavar{fromname}\\
\usekomavar{fromaddress}
}
% Absender auch über dem Empfängeradressfeld
\setkomavar{backaddress}{\myFamilyname\ | \myStreet\ | \myTown}
% signatur mit Unterschrift
\setkomavar{signature}{\includegraphics[width=25mm]{Unterschrift.png}\\\myFirstname\ \myFamilyname}
%
% --------------kopf/fusszeile----------------
\usepackage{scrlayer-scrpage}
\clearmainofpairofpagestyles
\cfoot{\flushright\scriptsize\normalfont Seite \thepage\ von \pageref{LastPage} }
\RedeclarePageStyleAlias{empty}{scrheadings}
%----------------------------------------------
%
\setkomavar{date}{} % Datum wieder löschen
\setkomavar{subject}{Dies ist der Betreff}
\setlength{\parindent}{0pt}
% positionierung von Absender und Empfängerboxen
\makeatletter
\@setplength{backaddrheight}{0pt}% because backaddress=off
\@setplength{toaddrhpos}{2.5cm}%distance from left
\@setplength{toaddrvpos}{5cm}%distance from top
\@setplength{toaddrheight}{3.5cm}%height of the addressbox
\@setplength{toaddrwidth}{10cm}% width of the addressbox
\@addtoplength{locwidth}{45mm} % width of ABSENDERbox
\@setplength{lochpos}{2cm}%distance from top
\@setplength{locvpos}{32mm}%distance from top
\@setplength{refvpos}{11cm}% Abstand des Haupttextes von top
\makeatother
%------------------------------------------------------------------------------------
\begin{document}
%
\begin{letter}{Andrea Empfängerin\\
Schloss Schalkenstein\\
Adressatenstr. 23\\
22204 Briefkasten
}
%
\opening{Sehr geehrte Frau Empfängerin,}
%
\blindtext[1]
\closing{Mit freundlichen Grüßen,
}
\end{letter}
\end{document}
Die Datei erzeugt folgendes PDF:
Den -Code übertragen wir nun in unser Template. Hierfür muss im Ordner inst/markdown/templates/meinbrief
der Unterordner resources
angelegt werden. In diesem erzeugen wir die Datei meinbrief.tex
und kopieren den LaTeX-Code hinein.
file.edit("inst/markdown/templates/meinbrief/resources/meinbrief.tex")
# kopiere nun den LaTeX Code hierhin.
Als nächstes kopieren wir die Bilddatei für die Unterschrift in den skeleton
-Ordner. In unserem Beispiel heisst sie Unterschrift.png
.
Ab jetzt wechseln wir immer zwischen den Dateien skeleton.Rmd
und meinbrief.tex
hin und her.
2.1.2 skeleton.Rmd
und LaTeX
-Datei anpassen
Schauen wir uns zunächst die Datei skeleton.Rmd
an.
Hier löschen wir den Beispieltext und belassen nur die Kopfzeile
---
title: "Template Title"
author: "Your Name"
date: "The Date"
output: output_format
---
In der Kopfzeile werden Variablen vergeben. So hat z.B. Variable title
derzeit den Wert Template Title
, und date
hat den Wert The Date
.
Wir können uns dies zu nutze machen. In unserem LaTeX-Code sind all diese Variablen referenzierbar, wenn wir ihren Namen in Dollarzeichen einrahmen, also z.B. $title$
. Wir können im Kopfbereich beliebige neue Variablen erzeugen und diese dann innerhalb der LaTeX
-Vorlage nutzen.
Wir gehen also in die Datei meinbrief.tex
, und ändern dort alle hardgecodeten Angaben (Name, Adresse, Telefonnummer, usw) in Variablen um. Diese Variablen tragen wir ebenfalls in die Datei skeleton.Rmd
ein und hinterlegen dort die Werte.
Die Datei meinbrief.tex
sieht danach z.B. so aus:
\documentclass[DIN,
fontsize=11pt, % fontsize
paper=a4, % page size a4
firsthead=on, % display header on first page
firstfoot=on, % display footer on first page
pagenumber=off, % position of the page number
parskip=half, % Use indent instead of skip, half, false
enlargefirstpage=on, % more space on first page
fromalign=locationright, % placement of name in letter head
addrfield=on, % address field for envelope with window, on or true
subject=titled, % placement of subject, beforeopening or titled
foldmarks=on, % print foldmarks
numericaldate=off, % display date in numbers only
KOMAold]{scrlttr2}
\usepackage[T1]{fontenc}
\usepackage[dvips]{graphicx}
\usepackage[ngerman]{babel}
\usepackage{lipsum}
\usepackage[utf8]{inputenc}
\usepackage{times}
% \usepackage{lmodern}
\usepackage{longtable}
\usepackage{booktabs}
\usepackage{lastpage}
\usepackage[rgb]{xcolor}
\usepackage{hyperref}
\hypersetup{%
pdfborder=0 0 0,
pdfauthor={},
pdftitle={},
pdfsubject={},
pdfkeywords={},
pdfpagemode={UseOutlines},
bookmarksopen,
pdfstartview={FitH},
colorlinks,
linkcolor={black},
citecolor={black},
urlcolor={blue}
}
\urlstyle{same}
% Randbereiche mit geometry
\usepackage{geometry}
\geometry{a4paper,left=25mm,right=20mm}
\usepackage{lastpage} % letzte Seite anzeigen
\usepackage{marvosym}
\usepackage{blindtext}
% speichere eigene Variablen für Werte, die häufig drankommen
\newcommand{\myFirstname}{$myFirstname$}
\newcommand{\myFamilyname}{$myFamilyname$}
\newcommand{\myStreet}{$myStreet$}
\newcommand{\myTown}{$myTown$}
% ---Angaben für das Absenderfeld--------
\setkomavar{fromname}{\flushright\normalfont\textbf{\myFirstname\ \myFamilyname}}
\setkomavar{signature}{\myFirstname\ \myFamilyname}
\setkomavar{fromaddress}{\flushright\normalfont\scriptsize%
$myGrade$ \myFirstname\ \myFamilyname\\
\myStreet\\\myTown\\%
$myTelefon$\\%
$myMail$\\[2mm]
$myBank$\\
$myIBAN$\\[2mm]
Aktenzeichen:\quad\ $myAktenzeichen$\\
\setkomavar{date}{\today} %datum im Absenderfeld
Datum:\quad \today}
%---------------------------------------
\renewcommand*\familydefault{\sfdefault}
% Anordnung im Absenderfeld
\setkomavar{firsthead}{}
\setkomavar{location}{%
\raggedleft
\usekomavar{fromname}\\
\usekomavar{fromaddress}
}
% Absender auch über dem Empfängeradressfeld
\setkomavar{backaddress}{\myFamilyname\ | \myStreet\ | \myTown}
% signatur mit Unterschrift
\setkomavar{signature}{\includegraphics[width=25mm]{Unterschrift.png}\\\myFirstname\ \myFamilyname}
%
% --------------kopf/fusszeile----------------
\usepackage{scrlayer-scrpage}
\clearmainofpairofpagestyles
\cfoot{\flushright\scriptsize\normalfont Seite \thepage\ von \pageref{LastPage} }
\RedeclarePageStyleAlias{empty}{scrheadings}
%----------------------------------------------
%
\setkomavar{date}{} % Datum wieder löschen
\setkomavar{subject}{$Betreff$}
\setlength{\parindent}{0pt}
% positionierung von Absender und Empfängerboxen
\makeatletter
\@setplength{backaddrheight}{0pt}% because backaddress=off
\@setplength{toaddrhpos}{2.5cm}%distance from left
\@setplength{toaddrvpos}{5cm}%distance from top
\@setplength{toaddrheight}{3.5cm}%height of the addressbox
\@setplength{toaddrwidth}{10cm}% width of the addressbox
\@addtoplength{locwidth}{45mm} % width of ABSENDERbox
\@setplength{lochpos}{2cm}%distance from top
\@setplength{locvpos}{32mm}%distance from top
\@setplength{refvpos}{11cm}% Abstand des Haupttextes von top
\makeatother
%------------------------------------------------------------------------------------
\begin{document}
%
\begin{letter}{$anName$\\
$anZusatz$\\
$anStrasse$\\
$anOrt$
}
%
\opening{$opening$,}
%
$body$
\closing{$closing$,
}
\end{letter}
\end{document}
Alle Angaben wurden durch Variablen ersetzt. Die Variable $body$
beinhaltet den gesamten Text des Markdown-Dokuments.
In der Datei skeleton.Rmd
wurden die Variablen ebenfalls angelegt, und die Werte entsprechend zugeordnet:
---
title: "Template Title"
author: "Your Name"
date: "The Date"
myFirstname: Timm
myFamilyname: Thaler
myStreet: Absenderstr. 7
myTown: 47325 Schickensen
myGrade: Prof. Dr.
myTelefon: +49 176 555 984 66
myMail: timm@thaler.de
myBank: ING DiBa
myIBAN: DE06 505 165 55 5555 4312 64
Betreff: Dies ist der Betreff
myAktenzeichen: 2021-4
anName: Andrea Empfängerin
anZusatz: Schloss Schalkenstein
anStrasse: Adressatenstr. 23
anOrt: 22204 Briefkasten
opening: Sehr geehrte Frau Empfängerin
closing: Mit freundlichen Grüßen
output: MyStyle::meinbrief
---
dies ist ein Testbrief, um zu schauen, ob es auch in `RMarkdown` funktioniert.
Als letzte Angabe im Kopfbereich wird der output auf unser Template meinbrief
im Paket MyStyle
gesetzt.
2.1.3 Ausgabeformat bereitstellen
Jetzt sind wir fast schon fertig. Wir müssen noch das eben angegebene Ausgabeformat MyStyle::meinbrief
verfügbar machen. Hierzu erstellen wir im Paketordner “R
” die Datei formats.R
. Sie wird bei der Aktivierung des Paketes automatisch ausgeführt und soll das Ausgabgeformat bereitstellen.
# erstelle Datei R/formats.R
file.edit("R/formats.R")
Sie erhält folgenden Inhalt:
# mache output "meinbrief" verfügbar
<- function(...) {
meinbrief <- system.file("rmarkdown/templates/meinbrief/resources/meinbrief.tex",
template package="MyStyle")
::pdf_document2(...,
bookdowntemplate = template
) }
Wie Sie sehen, verwenden wir letztendlich bookdown::pdf_document2
als Ausgabe.
2.1.4 Ausgabe kontrollieren
Jetzt können wir das Paket neu bauen und installieren, indem wir Install and Restart
klicken.
Wenn alles korrekt eingetragen wurde, können wir nun unsere Beispieldatei skeleton.Rmd
knitten. Das erzeugt eine PDF-Datei im Unterordner skeleton
(weil skeleton.Rmd
dort liegt). Überprüfen Sie, ob alles so aussieht, wie Sie möchten. Ist alles gut, entfernen Sie die PDF
-Datei und bauen Sie das Paket nocheinmal neu.
Fertig.
3 Paket als Vorlage nutzen
Ist das Paket installiert, steht das Template in RStudio zur Auswahl. Klicken Sie auf File
→ New File
→ RMarkdown
und wählen Sie “From Template”.
Dort steht nun meinBrief
zur Auswahl. Wenn Sie auf OK
klicken, erhalten Sie den Beispielcode aus skeleton.Rmd
sowie die Datei Unterschrift.png
. Wenn Sie vergessen haben, die PDF-Datei Ihrer Testreihen zu entfernen, wird diese ebenfalls erzeugt.
4 weitere Templates erstellen
Auf diese Weise können wir beliebig weiterte Templates erstellen. Rob Hyndman hat für seine Fakultät z.B. Vorlagen für Abschlussarbeiten, Berichte und Klausuren erstellt, siehe https://github.com/robjhyndman/MonashEBSTemplates
Wir erzeugen in dieser Anleitung noch eine Vorlage für Rechnungen.
4.1 Vorlage für Rechnungen erzeugen
Für die Rechnungen-Vorlage bedienen wir uns bei unserem Brief und passen einige wenige Felder an.
Zunächst erzeugen wir wieder die Grundstruktur des Templates, welches diesmal meineRechnung
heissen soll.
::use_rmarkdown_template(
usethistemplate_name = "meineRechnung",
template_dir = NULL,
template_description = "Meine private Rechnungsvorlage",
template_create_dir = FALSE
)
In den Ordner inst/markdown/templates/meinerechnung/skeleton/
kopieren wir zunächst die Datei Unterschrift.png
. Dann öffnen wir die Datei skeleton.Rmd
und entfernen alles bis auf den Kopfbereich.
Jetzt erstellen wir den Unterordner inst/markdown/templates/meinerechnung/resources/
und darin die Datei meinerechnung.tex
.
Die Datei öffnen wir nun, und kopieren den Inhalt unserer Brief-Vorlage hinein.
file.edit("inst/markdown/templates/meinerechnung/resources/meinerechnung.tex")
# kopiere nun den LaTeX Code hierhin.
Jetzt nehmen wir einige Anpassungen vor, z.B. ersetzen wir das alte Aktenzeichen durch eine Rechnungsnummer. Auch fügen wir unsere Steuernummer hinzu.
Die LaTeX-Datei sieht danach so aus:
\documentclass[DIN,
fontsize=11pt, % fontsize
paper=a4, % page size a4
firsthead=on, % display header on first page
firstfoot=on, % display footer on first page
pagenumber=off, % position of the page number
parskip=half, % Use indent instead of skip, half, false
enlargefirstpage=on, % more space on first page
fromalign=locationright, % placement of name in letter head
addrfield=on, % address field for envelope with window, on or true
subject=titled, % placement of subject, beforeopening or titled
foldmarks=on, % print foldmarks
numericaldate=off, % display date in numbers only
KOMAold]{scrlttr2}
\usepackage[T1]{fontenc}
\usepackage[dvips]{graphicx}
\usepackage[ngerman]{babel}
\usepackage{lipsum}
\usepackage[utf8]{inputenc}
\usepackage{times}
% \usepackage{lmodern}
\usepackage{longtable}
\usepackage{booktabs}
\usepackage{lastpage}
\usepackage[rgb]{xcolor}
\usepackage{hyperref}
\hypersetup{%
pdfborder=0 0 0,
pdfauthor={},
pdftitle={},
pdfsubject={},
pdfkeywords={},
pdfpagemode={UseOutlines},
bookmarksopen,
pdfstartview={FitH},
colorlinks,
linkcolor={black},
citecolor={black},
urlcolor={blue}
}
\urlstyle{same}
% Randbereiche mit geometry
\usepackage{geometry}
\geometry{a4paper,left=25mm,right=20mm}
\usepackage{lastpage} % letzte Seite anzeigen
\usepackage{marvosym}
\usepackage{blindtext}
% speichere eigene Variablen für Werte, die häufig drankommen
\newcommand{\myFirstname}{$myFirstname$}
\newcommand{\myFamilyname}{$myFamilyname$}
\newcommand{\myStreet}{$myStreet$}
\newcommand{\myTown}{$myTown$}
% ---Angaben für das Absenderfeld--------
\setkomavar{fromname}{\flushright\normalfont\textbf{\myFirstname\ \myFamilyname}}
\setkomavar{signature}{\myFirstname\ \myFamilyname}
\setkomavar{fromaddress}{\flushright\normalfont\scriptsize%
$myGrade$ \myFirstname\ \myFamilyname\\
\myStreet\\\myTown\\%
$myTelefon$\\%
$myMail$\\[2mm]
$myBank$\\
$myIBAN$\\
Str-Nr. $myStrNr$\\[2mm]
Rechnungsnummer:\quad\ $myRechnungsnummer$\\
\setkomavar{date}{\today} %datum im Absenderfeld
Datum:\quad \today}
%---------------------------------------
\renewcommand*\familydefault{\sfdefault}
% Anordnung im Absenderfeld
\setkomavar{firsthead}{}
\setkomavar{location}{%
\raggedleft
\usekomavar{fromname}\\
\usekomavar{fromaddress}
}
% Absender auch über dem Empfängeradressfeld
\setkomavar{backaddress}{\myFamilyname\ | \myStreet\ | \myTown}
% signatur mit Unterschrift
\setkomavar{signature}{\includegraphics[width=25mm]{Unterschrift.png}\\\myFirstname\ \myFamilyname}
%
% --------------kopf/fusszeile----------------
\usepackage{scrlayer-scrpage}
\clearmainofpairofpagestyles
\cfoot{\flushright\scriptsize\normalfont Seite \thepage\ von \pageref{LastPage} }
\RedeclarePageStyleAlias{empty}{scrheadings}
%----------------------------------------------
%
\setkomavar{date}{} % Datum wieder löschen
\setkomavar{subject}{$Betreff$}
\setlength{\parindent}{0pt}
% positionierung von Absender und Empfängerboxen
\makeatletter
\@setplength{backaddrheight}{0pt}% because backaddress=off
\@setplength{toaddrhpos}{2.5cm}%distance from left
\@setplength{toaddrvpos}{5cm}%distance from top
\@setplength{toaddrheight}{3.5cm}%height of the addressbox
\@setplength{toaddrwidth}{10cm}% width of the addressbox
\@addtoplength{locwidth}{45mm} % width of ABSENDERbox
\@setplength{lochpos}{2cm}%distance from top
\@setplength{locvpos}{32mm}%distance from top
\@setplength{refvpos}{9cm}% Abstand des Haupttextes von top
\makeatother
%------------------------------------------------------------------------------------
\begin{document}
%
\begin{letter}{$anName$\\
$anZusatz$\\
$anStrasse$\\
$anOrt$
}
%
\opening{$opening$,}
%
$body$
\closing{$closing$,
}
\end{letter}
\end{document}
Die Variablen übertragen wir in die Datei skeleton.Rmd
, die dann so aussieht:
---
title: "Template Title"
author: "Your Name"
date: "The Date"
myFirstname: Timm
myFamilyname: Thaler
myStreet: Absenderstr. 7
myTown: 47325 Schickensen
myGrade: Prof. Dr.
myTelefon: +49 176 555 984 66
myMail: timm@thaler.de
myBank: ING DiBa
myIBAN: DE06 505 165 55 5555 4312 64
myStrNr: 313/5555/123
Betreff: RECHNUNG
myRechnungsnummer: 2021-4
anName: Andrea Empfängerin
anZusatz: Schloss Schalkenstein
anStrasse: Adressatenstr. 23
anOrt: 22204 Briefkasten
opening: Sehr geehrte Frau Empfängerin
closing: Mit freundlichen Grüßen
output: MyStyle::meinerechnung
---
Um das Ergebnis testen zu können, müssen wir das Ausgabeformat MyStyle::meinerechnung
verfügbar machen. Hierfür ergänzen wir im Unterordner R
in der Datei formats.R
wie folgt:
# mache output "meinbrief" verfügbar
<- function(...) {
meinbrief <- system.file("rmarkdown/templates/meinbrief/resources/meinbrief.tex",
template package="MyStyle")
::pdf_document2(...,
bookdowntemplate = template
)
}
# mache output "meinerechnung" verfügbar
<- function(...) {
meinerechnung <- system.file("rmarkdown/templates/meinerechnung/resources/meinerechnung.tex",
template package="MyStyle")
::pdf_document2(...,
bookdowntemplate = template
) }
Wenn Sie jetzt das Paket neu bauen und installieren, sollte das knitten der Datei skeleton.Rmd
schon funktionieren, und eine PDF-Datei ausspucken.
Die Rechnungsvorlage kann nun wie folgt erweitert werden:
---
title: "Template Title"
author: "Your Name"
date: "The Date"
myFirstname: Timm
myFamilyname: Thaler
myStreet: Absenderstr. 7
myTown: 47325 Schickensen
myGrade: Prof. Dr.
myTelefon: +49 176 555 984 66
myMail: timm@thaler.de
myBank: ING DiBa
myIBAN: DE06 505 165 55 5555 4312 64
myStrNr: 313/5555/123
Betreff: RECHNUNG
myRechnungsnummer: 2021-4
anName: Andrea Empfängerin
anZusatz: Schloss Schalkenstein
anStrasse: Adressatenstr. 23
anOrt: 22204 Briefkasten
opening: Sehr geehrte Frau Empfängerin
closing: Mit freundlichen Grüßen
output: MyStyle::meinerechnung
---
für die erbrachten Leistungen erlaube ich mir wie folgt in Rechnung zu stellen:
| **Datum** | **Posten** | **Betrag**|
|------------|-----------------------------------------------------|----------:|
| 29.06.2021 | Zauberschow für Kinder in der KiTa Regenbogenland | 300,01|
| | | |
| | Nettobetrag | 300,01|
| | Umsatzsteuerfrei gem. §19 UstG | 0,00|
| | **Gesamtbetrag**:| **300,01**|
Bitte überweisen Sie den Betrag unter Angabe der Rechnungsnummer auf mein Konto bei der ING DiBa
mit der IBAN *DE06 505 165 55 5555 4312 64*.
Ich bedanke mich für Ihren Auftrag und verbleibe
Wenn Sie jetzt knitten, sieht die PDF-Datei skeleton.pdf
so aus:
Jetzt können Sie noch weitere Anpassungen vornehmen. Wenn Sie fertig sind, entfernen Sie die PDF-Datei skeleton.pdf
und bauen und installieren Sie das Paket neu. Ab jetzt steht es in RStudio
als Vorlage zur Verfügung.
Klicken Sie auf File
→ New File
→ RMarkdown
und wählen Sie “From Template”.
5 noch mehr Templates
Noch weitere Templates bietet unter anderem das R
-Paket rticles
.
install.packages("rticles")
Nach einem Neustart von RStudio stehen die Templates bereit.