Menu

HowTo_NewLCO

Markus Kohm
Attachments
fsgi-beispiel.png (108458 bytes)
fsgi-beispiel.tex (502 bytes)
fsgi-ci.lco (1936 bytes)
fsgi-pixel.lco (901 bytes)
fsgi.lco (1554 bytes)

Wie LCO-Dateien für einfache Briefdesigns erstellt werden am Beispiel der Fachschaft Geoinformatik der Westfälische Wilhelms-Universität Münster

Zwar sind die Standardformen für Briefe, die scrlttr2 und scrletter bieten, für die meisten Privatleute vollkommen ausreichend, im mehr geschäftsmäßigen Bereich kommt jedoch sehr schnell der Wunsch auf, dieses an eigene Bedürfnisse anzupassen. Dies war 2008 auch der Fall bei der Fachschaft Geoinformatik der Westfälischen Wilhelms-Universität Münster. Daher sind dort eine Wrapper-Klasse und eine Letter-Class-Option-Datei genau für diesen Zweck entstanden, die freundlicherweise auch im damaligen KOMA-Script Documentation Project zur Verfügung gestellt wurde. Eine überarbeitete Fassung der damaligen lco-Datei kann gut als allgemeines Beispiel dienen. Zum Zwecke der Verallgemeinerung und um deutlich zu machen, dass dies keine offizielle Datei der Fachschaft mehr ist, werden einige Texte jedoch durch verballhornte Platzhalter ersetzt.

Corporate Identity

Am kompliziertesten ist sicher die Umsetzung des Layouts oder der Corporate Identity, letztlich des Designs des Briefbogens. Daher beginnen wir mir der Letter-Configuration-Option-Datei (ehemals Letter-Class-Option-Datei) für diesen Zweck und nennen sie fsgi-ci.lco:

\ProvidesFile{fsgi-ci.lco}[2025-06-02 v1.0 unsupported Letter Configuration File (Corporate Identity)]

Was hier immer gleich sein soll, ist der Absender im Briefkopf. Dabei haben wir die Besonderheit, dass der Name aus mehreren Teilen besteht, nämlich der Fachschaft selbst, dem Namen der Universität und dem Namen des Instituts. Als weitere Besonderheit soll der Name der Fachschaft immer in fetten Kapitälchen gesetzt werden. Wir definieren also zunächst drei neue Variablen:

\newkomavar[\studentcouncilname]{studentcouncil}
\newkomavar[\universityname]{university}
\newkomavar[\institurename]{institute}

und ein neues Font-Element:

\newkomafont{studentcouncil}{\scshape\bfseries}

und verwenden diese dann für die neue Form des Absendernamens wie er im Briefkopf verwendet wird:

\setkomavar{fromname}{%
  {\usekomafont{studentcouncil}{\usekomavar{studentcouncil}}}\\%
  \usekomavar{university}\\
  \usekomavar{institute}
}

Wie zu sehen ist, haben wir hier keine klare Trennung zwischen Form und Inhalt mehr. Außerdem wurde das Zeilenende bei der ersten Zeile nicht wie eigentlich empfehlenswert innerhalb der Schriftumschaltung angegeben. Die Ursache liegt daran, dass \\ beispielsweise innerhalb der Signatur eine besondere Bedeutung hat, was zu einer Fehlermeldung führt, wenn \\ innerhalb einer Gruppe verwendet wird. Das zweite Problem kann man natürlich auch einfach umgehen, indem man explizit signature setzt. Die Lösung des ersten Problems, der Trennung von Form und Inhalt könnte dadurch gelöst werden, dass man statt eines vorgefertigten Briefkopfs einen eigenen über die Variable firsthead definiert, wie dies bei anderen Beispielen im Wiki gezeigt wird.

Da der Briefkopf rechtsbündig und ein Logo linksbündig gesetzt werden soll, können wir die entsprechenden Optionen an dieser Stelle ebenfalls setzen:

\KOMAoptions{fromalign=right,fromlogo=true}

Die Definition des Logos verschieben wir auf später.

An dieser Stelle wollen wir allerdings sicherstellen, dass die bevorzugte Schrift geladen ist, falls das noch möglich ist. Weil nämlich lco-Dateien explizit auch nach \begin{document} geladen werden dürfen, Schriftpakete aber nur davor, sichern wir das hier ab. Dazu dient uns die KOMA-Script-Anweisung \if@atdocument, die zwar wie eine interne Anweisung aussieht, für Autoren von lco-Dateien jedoch freigegeben ist.

\if@atdocument
  \normalfont
  \Ifstrstart{\f@family}{Libertinus}{}{%
    \LCOWarningNoLine{fsgi-ci}{%
      cannot load Libertinus\MessageBreak
      after \string\begin{document}%
    }
  }%
\else
  \RequirePackage{libertinus}
\fi

Wenn fsgi-ci nach \begin{document} geladen wird, wird also zunächst geprüft, ob die Standardschrift bereits Libertinus ist. Ist das nicht der Fall wird eine Warnung ausgegeben. Vor \begin{document} wird das Schriftpaket direkt angefordert.

Rechts neben der Anschrift sollen noch einige weitere Informationen erscheinen, nämlich der Raum, die Telefonnummer und die E-Mail-Anschrift. Dazu definieren wir erneut eine neue Variable für den Raum. Alle anderen benötigten Variablen existieren bereits:

\newkomavar[\usekomavar*{roomseparator}\usekomavar{roomseparator}]{room}
\newkomavar[\roomname]{roomseparator}
\setkomavar{roomseparator}{: }
\providecaptionname{english,USenglish,GBenglish,american}{\roomname}{Room}
\providecaptionname{ngerman,naustrian,nswiss}{\roomname}{Raum}

Die Definition aufgeteilt in room und roomseparator erscheint möglicherweise umständlich, erfolgt aber tatsächlich genau nach dem Muster anderer Variablen, deren Ausgabe im Kopf aktiviert werden kann. Und erleichtert die Definition von location:

\setkomavar{location}{%
  \raggedleft\footnotesize
  \Ifkomavarempty{room}{}{%
    \textsf{\textbf{\usekomavar*{room}}}%
    \usekomavar{room}\\
  }%
  \Ifkomavarempty{fromphone}{}{%
    \textsf{\textbf{\usekomavar*{fromphone}}}%
    \usekomavar{fromphone}\\
  }%
  \Ifkomavarempty{fromemail}{}{%
    \textsf{\textbf{\usekomavar*{fromemail}}}%
    \usekomavar{fromemail}\\
  }%
}%
\KOMAoption{locfield}{wide}

Wie zu sehen ist, wurde der Name des Felds room auch nicht fest mit Room oder Raum belegt, sondern sprachabhängig definiert. So kann man sie bei Bedarf einfach, beispielsweise per \renewcaptionname{ngerman}{\roomname}{Zimmer} ebenfalls sprachabhängig ändern.

Jetzt fehlt nur noch ein passender Fuß für die Seite. Hier machen wir es uns einfach. Es soll lediglich die Homepage ausgegeben werden, so eine solche definiert ist:

\setkomavar{firstfoot}{%
  \Ifkomavarempty{fromurl}{}{%
    \centering
    \textsf{\textbf{\usekomavar*{fromurl}}}%
    \usekomavar{fromurl}\\
  }%
}

Das war es schon.

Daten

Neben dem Design werden nun natürlich auch noch Daten für die Variablen, sowohl bei scrlttr2 und scrletter voreingestellte als auch in fsgi-co.lco neu definierte, benötigt. Dafür definieren wir eine weitere Letter-Configuration-Option-Datei fsgi.lco:

\ProvidesFile{fsgi.lco}[2025-06-02 v1.0 unsupported Letter Configuration File (Corporate Identity + Data)]
\LoadLetterOption{fsgi-ci}
\setkomavar{studentcouncil}{Fachschaft Geodäddy}
\setkomavar{university}{Westerwälder Wilhelminen-Universität}
\setkomavar{institute}{Insitut für Geodäddy}
\setkomavar{fromaddress}{Kaldentalweg~2\\94184 Monster}
\setkomavar{backaddress}{Fachschaft Geodäddy\\\usekomavar{fromaddress}}
\setkomafont{fromname}{\sffamily}
\setkomafont{fromaddress}{\sffamily}
\@ifundefined{includesvg}{%
  \if@atdocument\else\RequirePackage{svg}\fi
}{}
\setkomavar{fromlogo}{%
  \@ifundefined{includesvg}{%
    \missingsvgwarning
  }{%
    \includesvg[width=3cm]{Gabepacman.svg}%
  }%
}
\newcommand*{\missingsvgwarning}{%
  \LCOWarningNoLine{fsgi}{%
    To use logo Gabepacman.svg you need\MessageBreak
    to use either\MessageBreak
    \space\space\string\LoadLetterOption{fsgi}\MessageBreak
    or\MessageBreak
    \space\space\string\usepackage{svg}\MessageBreak
    in your document preamble.\MessageBreak
    Leaving logo empty%
  }%
  \global\let\missingsvgwarning\relax
}
\setkomavar{room}{3.6}
\setkomavar{fromphone}{+49\,123\,45-6789}
\setkomavar{fromemail}{fsgi@um.invalid}
\setkomavar{fromurl}{https://fsgi.um.invalid}

Das im Beispiel verwendete Logo Gabepacman.svg (commons.wikimedia.org) benötigt allerdings nicht nur das Paket svg, sondern auch den Aufruf von LuaLaTeX mit Option --shell-escape. Wer daher lieber eine der auf WikiMedia Commons ebenfalls verfügbaren Pixeldateien verwenden will, kann stattdessen einfach fsgi-pixel.lco:

\begin{filecontents*}[overwrite]{fsgi-pixel.lco}
\LoadLetterOption{fsgi}
\setkomavar{fromlogo}{%
  \@ifundefined{includegraphics}{%
    \missinggraphicxwarning
  }{%
    \includegraphics[width=3cm]{Gabepacman.svg.png}
  }%
}
\newcommand*{\missinggraphicxwarning}{%
  \LCOWarningNoLine{fsgi}{%
    To use logo Gabepacman.svg.png you\MessageBreak
    need to use either\MessageBreak
    \space\space\string\LoadLetterOption{fsgi-pixel}\MessageBreak
    or\MessageBreak
    \space\space\string\usepackage{graphicx}\MessageBreak
    in your document preamble.\MessageBreak
    Leaving logo empty%
  }%
  \global\let\missinggraphicxwarning\relax
}
\end{filecontents*}

verwenden. Bei beiden Beispielen wird wieder dafür gesorgt, dass nicht versehentlich svg bzw. graphicx nach \begin{document} geladen wird. Über den Trick einer eigenen Anweisung für die Warnung wird außerdem sichergestellt, dass die Warnung ggf. nur einmal ausgegeben wird. Bei Verwendung von fsgi-pixel.lco an Stelle von fsgi.lco wird natürlich kein --shell-escape benötigt.

Beispiel

Will nun der/die Vorsitzende einen Brief schreiben, so möchte er/sie natürlich nicht mit seinem/ihrem Namen unterzeichnen und verwendet dann selbstverständlich \setkomavar{signature}{Geoline\\(Fachschaftsvorsitzende)} und erhält dann beispielsweise:

Figure: Beispielbrief der Fachschaftsvorsitzenden

Schlussbemerkung

Die Originaldateien, die in Münster bis 2016 verwendet wurden, definierten noch einige weitere Variablen wie chairPerson, assistant, presence. Für die Demonstration einer lco-Datei werden diese jedoch nicht benötigt und wurden daher weggelassen. Ebenso wurde im Original im Fuß eine Tabelle mit URL, Geo-Informationen, IRC-Channel und OpenPGP-Hash verwendet. Auch darauf wurde im Rahmen des Beispiels hier verzichtet. Im Gegenzug wurden im gezeigten Beispiel aktuelle Mechanismen genutzt und Erweiterungen wie die Verwendung von Font-Elementen oder der Test auf leere Variablen ergänzt und gezeigt, wie man Paketabhängigkeiten in lco-Dateien regeln kann, ohne deren Verwendbarkeit nach \begin{document} zu verhindern.


MongoDB Logo MongoDB