
Ich verwende die Pakete XeLaTeX
mit fontspec
, polyglossia
, biblatex
und hyperref
(usw.), um meine Dokumente als zu setzen \documentclass[11pt,a4paper]{article}
. Das hyperref
Paket ist einfach großartig, ich habe jedoch einen wirklich nervigen Fehler gefunden.
Ich möchte pdftitle
eine Kombination aus statischem Text und einer zuvor definierten Variable verwenden \thetitle
. Soweit, so gut. Das Problem entsteht, wenn diese Variable Zeilenumbrüche enthält ( \\
). hyperref
scheint diese einfach automatisch wegzulassen, aber ich möchte dies manuell steuern können.
Um die Zeilenumbrüche loszuwerden, verwende ich dieses Makro \replacelinebreaks{}{}
:
% A macro to remove line breaks from any text #1 and replace them
% with #2 (can be void). E.g.: \replacelinebreaks{\thetitle}{\ }.
\newcommand{\replacelinebreaks}[2]{%
\begingroup\def\\{#2}#1\endgroup}
(Der Verdienst dafür gebührt vor allemEinfache Möglichkeit, Formatierungen (z. B. Zeilenumbrüche) zu entfernen.) Dieses Makro funktioniert im gesamten Dokument einwandfrei – außer in \hypersetup{pdftitle= ...}
.
Was übersehe ich hier? Es gibt eine ganze Reihe sehr ähnlicher Fragen auf dieser Site, aber keine scheint mein spezielles Problem zu lösen:
- Verwenden von Nicht-ASCII-Zeichen in Autorennamen und Titeln innerhalb von Hyperref PDFinfo, aber ich benutze bereits
\hypersetup
- Ich habe auch versucht, eine neue Variable ohne Zeilenumbrüche zu erstellen, aber der Fehler scheint sich einfach überall fortzupflanzen.
- Die Verwendung eines Codes für Sonderzeichen (z. B.
\040
sollte ein Leerzeichen sein) ergibt keinen Unterschied.
- hyperref: pdftitle und falsche Zeichenkodierung, gleiches Argument.
- pdfinfo scheint nicht zu funktionieren, nochmal das gleiche Argument.
- hyperref: lange Zeilen in pdftitle und anderen Feldern umbrechen.
\textLF
und\textCR
lösen mein Problem nicht. Foxit Reader erkennt diese Zeichen nicht, während Adobe Acrobat und Acrobat Reader nur die erste Zeile anzeigen. Mein Problem liegt beihyperref
. - Nicht-ASCII-Zeichen werden im PDF-Titel von Hyperref nicht angezeigt: Fehler in der Option „Unicode“?.Bei mir
\usepackage[pdfencoding=unicode]{hyperref}
ändert sich dadurch nichts. - Hyperref so einstellen, dass es PDF-Informationen aus \title und \author übernimmt. Zugegeben, wenn ich verwende, ist
\usepackage[pdfusetitle]{hyperref}
das\hypersetup
obsolet und die Zeilenumbrüche werden automatisch in Leerzeichen (für pdftitle) und in Kommas (für pdfauthor) umgewandelt. Wie bereits erwähnt, möchte ich jedoch eine Kombination aus statischem Text und\thetitle
, daher\hypersetup
ist das unvermeidlich.- Dieser
\@title
Ansatz würde nicht helfen, da er bereits zur Definition verwendet wird\thetitle
.
- Dieser
Hier ist mein MWE:
% !BIB TS-program = biber
% !TeX program = xelatex
% !TeX encoding = UTF-8
% !TeX spellcheck = en_GB
\documentclass[11pt,a4paper]{article}
\usepackage{polyglossia}
\usepackage{hyperref}
\newcommand{\replacelinebreaks}[2]{\begingroup\def\\{#2}#1\endgroup}
\def\thetitle{Type the\\Minimum Working Example\\Title Here\\}
\def\firstauthor{Abra} % Only the first author
\def\theauthor{\firstauthor % Add all other authors (no spaces! Use "\\" and "%")
\\Ca%
\\Dabra%
}
\begin{document}
\hypersetup{
pdftitle = MWE No.1 \space -- \replacelinebreaks{\thetitle}{\ },
pdfauthor = \replacelinebreaks{\theauthor}{; },
}
\begin{center}
{\Huge\thetitle}
\end{center}
\end{document}
Es fuehrt zu:
Bitte helfen Sie mir, dieses Verhalten zu verstehen und zu korrigieren, damit ich entweder mein \replacelinebreaks
Makro verwenden oder mein Ziel auf andere Weise erreichen kann. Ihre Hilfe wird sehr geschätzt.
Antwort1
Sie können die Art und Weise, wie Hyperref mit solchen Token umgeht, jederzeit neu definieren:
\documentclass{article}
\usepackage{hyperref}
\newcommand\myvar{abc\\cde}
\pdfstringdefDisableCommands{\def\\{XXX}}
\hypersetup{pdftitle= abc\\ cde\myvar}
\begin{document}
blub
\end{document}
Oder Sie definieren Ihre Variable so, dass sie an sinnvollen Stellen verwendet wird \texorpdfstring
:
\documentclass{article}
\usepackage{hyperref}
\newcommand\myvar{abc\texorpdfstring{\\}{XXX}cde}
\hypersetup{pdftitle= abcXXXcde\myvar}
\begin{document}
\myvar
\end{document}