Menu

HowTo_UseKomaVar

Wie man KOMA-Script-Variablen zum Setzen von PDF-Metadaten mit hyperref verwenden kann

Da heutzutage Briefe zunehmend nicht mehr in Papierform sondern als PDF archiviert werden, ist es sinnvoll, diese mit nützlichen Metainformationen zu versehen. Häufig will man dabei auf die bereits in den KOMA-Script-Variable, per \setkomavar definierten Informationen zurückgreifen. Allerdings wird ein einfaches \hypersetup{author=\usekomavar{fromname}} nicht funktionieren, da \usekomavar nicht expandierbar ist. Wie das folgende Beispiel zeigt, kann hier jedoch das optionale Argument von \usekomavar eingesetzt werden:

\documentclass[ngerman]{scrlttr2}
\usepackage{babel}
\usepackage{hyperref}

\setkomavar{fromname}{Meinereiner}
\setkomavar{fromaddress}{Seinestraße 13 \\34567 Meinestadt}
\setkomavar{fromemail}{mail@example.com}
\setkomavar{yourref}[Bestellnummer]{12345}
\setkomavar{yourmail}[Bestelldatum]{2014-11-08}

\setkomavar{invoice}[Angebot]{2015-0012}

\setkomavar{subject}{Angebot} % sehr aufdringlich

\newcommand*{\hypersetupone}[2]{\hypersetup{#1={#2}}}
\newcommand*{\hypersetupbykomavar}[2]{%
  \usekomavar[\hypersetupone{#1}]{#2}%
}
\newcommand*{\hypersetupbykomadescandvar}[2]{%
  \begingroup
    \usekomavar*[\def\desc]{#2}%
    \usekomavar[\def\value]{#2}%
    \hypersetup{#1={\desc{} \value}}%
  \endgroup
}
\hypersetupbykomadescandvar{pdftitle}{invoice}
\hypersetupbykomavar{pdfauthor}{fromname}
\hypersetupbykomavar{pdfkeywords}{invoice}
\hypersetupbykomavar{pdfsubject}{subject}

\begin{document}
\begin{letter}{Peter Pan\\Meinestraße 12\\34567 Meinestadt}

\opening{Hallo Peter,}

vielen Dank für Deine Anfrage. Wir haben mehrere „Lorem Ipsum“ auf Lager und
können diese kurzfristig an Deine Anforderungen anpassen.
Allerdings sind wir zur Zeit gut ausgelastet, es wird also ein paar Tage dauern.

\closing{Mit freundlichen Grüßen}

\end{letter}
\end{document}

Schaut man sich jetzt die Metadaten beispielsweise mit pdfinfo an, so findet man darin unter anderem:

Title:           Angebot 2015-0012
Subject:         Angebot
Keywords:        2015-0012
Author:          Meinereiner

Wie funktioniert das ganze?

Als erstes definieren wir eine neue Anweisung \hypersetupone, mit der genau eine hyperref-Option auf einen neuen Wert gesetzt werden kann. Dabei ist der Name der Option das erste Argument und der Wert das zweite:

\newcommand*{\hypersetupone}[2]{\hypersetup{#1={#2}}}

Diese neue Anweisung verwenden wir dann bei der Definition von \hypersetupbykomavar im optionalen Argument von \usekomavar, um eine hyperref-Option (erstes Argument) auf den Wert einer KOMA-Script-Variablen (zweites Argument) zu setzen.

\newcommand*{\hypersetupbykomavar}[2]{%
  \usekomavar[\hypersetupone{#1}]{#2}%
}

Die dritte neue Anweisung

\newcommand*{\hypersetupbykomadescandvar}[2]{%
  \begingroup
    \usekomavar*[\def\desc]{#2}%
    \usekomavar[\def\value]{#2}%
    \hypersetup{#1={\desc{} \value}}%
  \endgroup
}

zeigt, wie man vorgehen kann, wenn man mehr machen will, als nur den Wert der Variablen zu verwenden. Dabei werden lokal in einer Gruppe zwei Hilfsanweisungen \desc und \value via \usekomavar* und \usekomavar definiert. \desc ist dann die Bezeichnung der Variablen und \value der Wert. Anschließend werden diese wieder mit \hypersetup verarbeitet. Natürlich hätte man an der Stelle auch erneut auf \hypersetupone zurückgreifen können.

Es sei darauf hingewiesen, dass diese Methode nicht funktioniert, wenn KOMA-Script-Variablen selbst KOMA-Script-Variablen verwenden. Würde man also beispielsweise

\setkomavar{subject}{\usekomavar*{invoice} \usekomavar{invoice}}

definieren, so funktioniert das ganze nicht mehr. In solchen Fällen kommt man um die Definition von Hilfsmakros nicht herum, beispielsweise:

\providecaptionname{ngerman}{\invoicename}{Angebot}
\newcommand*{\invoicevar}{2015-0012}
\setkomavar{invoice}{\invoicevar}
\setkomavar{subject}{\invoicename{} \invoicevar}

Selbstverständlich kann man dann auch direkt \hypersetup{title={\invoicename{} \invoicevar}} verwenden.


Related

Wiki (Deutsch): HowTo_Letter

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.