Shady side of pyramid
Haha, ich mag dieses Beispiel1… :)
par(mar = c(0, 1, 0, 1))
pie(
c(280, 60, 20),
c('Sky', 'Sunny side of pyramid', 'Shady side of pyramid'),
col = c('#0292D8', '#F7EA39', '#C4B632'),
init.angle = -50, border = NA
)
Haha, ich mag dieses Beispiel1… :)
par(mar = c(0, 1, 0, 1))
pie(
c(280, 60, 20),
c('Sky', 'Sunny side of pyramid', 'Shady side of pyramid'),
col = c('#0292D8', '#F7EA39', '#C4B632'),
init.angle = -50, border = NA
)
Mit dem Umstieg von Wordpress
nach blogdown
musste ich mein Theme anpassen.
Ich verwende das Even-Theme (Link siehe Seitenende), was eigentlich schon recht brauchbar ist.
Meine Probleme bestanden darin, dass Syntaxhighlighting nicht funktionierte, und, dass die Posts nicht in Gänze auf der Startseite stehen, sondern nur die ersten Zeilen.
Für Syntaxhighlight musste ich folgenden Parameter in jeden meiner Blogposts setzen:
:
output::html_page:
blogdown: kate highlight
Das hat aber zur Folge, dass in den eben erwähnten “Zusammenfassungen” der Posts plötzlich der CSS-Code als Text angezeigt wird.
Da ich aber eh diese Zusammenfassungen abschalten möchte, habe ich mich nicht weiter dran gestört.
Dennoch muss ich hier nochmal ran, denn derzeit funktioniert das nur mit R
- und LaTeX
-Code. Mit HTML hat hab ich zB weiterhin Probleme (wie man am Code im nächsten Abschnitt sieht).
Um die Posts in ganzer Länge auf der Startseite anzuzeigen bin ich wie folgt vorgegangen:
Ich habe die Datei themes/hugo-theme-even/layouts/posts/summary.html
nach themes/hugo-theme-even/layouts/posts/fulltext.html
kopiert.
Dann habe ich in Zeile 22 von themes/hugo-theme-even/layouts/posts/fulltext.html
die Stelle {{ .Summary }}
umgeändert in {{ .Content}}
.
Die Datei sieht also so aus:
<article class="post">
<header class="post-header">
<h1 class="post-title"><a class="post-link" href="{{ .RelPermalink }}">{{ .Title }}</a></h1>
<div class="post-meta">
<span class="post-time"> {{ .Date.Format (.Site.Params.dateFormatToUse | default "2006-01-02") }} </span>
{{ with .Params.categories -}}
<div class="post-category">
{{ range . -}}
<a href="{{ "categories" | relLangURL }}/{{ . | urlize }}/"> {{ . }} </a>
{{ end -}}
</div>
{{- end }}
{{- if .Site.Params.moreMeta }}
<span class="more-meta"> {{ T "wordCount" .WordCount }} </span>
<span class="more-meta"> {{ T "readingTime" .ReadingTime }} </span>
{{- end }}
</div>
</header>
<!-- Content -->
<div class="post-content">
<div class="post-summary">
{{ .Content }}
</div>
</div>
</article>
Anschließend habe ich in der Datei themes/hugo-theme-even/layouts/index.html
die Stelle mit {{ .Render "summary" }}
in Zeile 6 in {{ .Render "fulltext" }}
umgeändert.
So sieht die Datei danach aus:
{{- define "content" -}}
<section id="posts" class="posts">
{{/* (index .Site.Paginate) */}}
{{- $paginator := .Paginate (where (where .Site.RegularPages "Type" "post") ".Params.hiddenfromhomepage" "!=" true) }}
{{- range $paginator.Pages -}}
{{ .Render "fulltext" }}
{{ end -}}
</section>
<!-- pagination -->
<nav class="pagination">
{{ with $paginator.Prev -}}
<a class="prev" href="{{ .URL }}">
<i class="iconfont icon-left"></i>
<span class="prev-text">{{ T "prevPage" }}</span>
</a>
{{- end }}
{{ with $paginator.Next -}}
<a class="next" href="{{ .URL }}">
<span class="next-text">{{ T "nextPage" }}</span>
<i class="iconfont icon-right"></i>
</a>
{{- end }}
</nav>
{{- end -}}
Ich habe das Blog gestern von Wordpress nach Blogdown verschoben.
Das alte Blog ist noch erreichbar unter https://www.produnis.de/blogwp
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.
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.
install.packages("bookdown")
Die Überführung nach Rmarkdown
geht am einfachsten, indem man sie als Templates
in einem eigenen R
-Paket abpeichert.
R
-Paket anlegenKlicke in RStudio
auf File
\(\rightarrow\) New Project...
Wählen Sie R Package
aus.
Figure 1: R
-Package wählen
Geben Sie dem Paket einen Namen, z.B. MyStyle
, und klicken Sie auf Create Project...
Figure 2: Packagenamen wählen
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
.
Figure 3: Reiter Build
In diesem Bereich können Sie auf den Knopf Install and Restart
klicken.
Figure 4: Paket installieren
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()
## [1] "Hello, world!"
Immer dann, wenn Sie dem Paket neue Funktionen (oder Templates) hinzugefügt haben, können Sie es durch Klick auf Install and Restart
aktualisieren.
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.
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:
Figure 5: PDF-Version des Briefs
Den LaTeX-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
.
Figure 6: Datei Unterschrift.png
Ab jetzt wechseln wir immer zwischen den Dateien skeleton.Rmd
und meinbrief.tex
hin und her.
skeleton.Rmd
und LaTeX
-Datei anpassenSchauen wir uns zunächst die Datei skeleton.Rmd
an.
Hier löschen wir den Beispieltext und belassen nur die Kopfzeile
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.
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.
Jetzt können wir das Paket neu bauen und installieren, indem wir
Install and Restart
klicken.
Figure 7: Reiter Build
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.
Ist das Paket installiert, steht das Template in RStudio zur Auswahl. Klicken Sie auf File
\(\rightarrow\) New File
\(\rightarrow\) RMarkdown
und wählen Sie “From Template”.
Figure 8: Template auswählen
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.
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.
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:
Figure 9: fertiges PDF-Dokument
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
\(\rightarrow\) New File
\(\rightarrow\) RMarkdown
und wählen Sie “From Template”.
Figure 10: Vorlagen
Noch weitere Templates bietet unter anderem das R
-Paket rticles
.
install.packages("rticles")
Nach einem Neustart von RStudio stehen die Templates bereit.
Das Nachschlagewerk liegt nun als Webseite hier: https://www.produnis.de/R/
…und als PDF-File hier: https://www.produnis.de/R/rbuch.pdf