Hyperref pdftitle управляет переносами строк странным образом

Hyperref pdftitle управляет переносами строк странным образом

Я использую XeLaTeXс fontspec, polyglossia, biblatexи hyperrefпакетами (и т. д.) для набора документов как \documentclass[11pt,a4paper]{article}. hyperrefПакет просто потрясающий, однако я обнаружил действительно раздражающую ошибку.

Я хочу pdftitleиспользовать комбинацию некоторого статического текста и ранее определенной переменной \thetitle. Пока все хорошо. Проблема возникает, когда эта переменная содержит переносы строк ( \\). hyperrefпохоже, просто автоматически их пропускает, но я хочу иметь возможность контролировать это вручную.

Чтобы избавиться от переносов строк, я использую этот макрос \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}

(В этом заслуга прежде всегоПростой способ удалить форматирование (например, переносы строк).) Этот макрос отлично работает во всем документе, за исключением \hypersetup{pdftitle= ...}.

Что я упускаю? На этом сайте довольно много очень похожих вопросов, но ни один из них, похоже, не решает мою конкретную проблему:

Вот мой 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}

В результате получается:

введите описание изображения здесь

Пожалуйста, помогите мне понять и исправить это поведение, чтобы я мог либо использовать свой \replacelinebreaksмакрос, либо достичь своей цели каким-то другим способом. Ваша помощь очень ценится.

решение1

Вы всегда можете переопределить способ обработки таких токенов hyperref:

\documentclass{article}
\usepackage{hyperref}

\newcommand\myvar{abc\\cde}

\pdfstringdefDisableCommands{\def\\{XXX}}
\hypersetup{pdftitle= abc\\ cde\myvar}

\begin{document}
blub

\end{document}

введите описание изображения здесь

Или вы можете определить свою переменную так, чтобы она использовалась в разумных местах \texorpdfstring:

\documentclass{article}
\usepackage{hyperref}

\newcommand\myvar{abc\texorpdfstring{\\}{XXX}cde}

\hypersetup{pdftitle= abcXXXcde\myvar}

\begin{document}
\myvar

\end{document}

Связанный контент