
Eu uso XeLaTeX
with fontspec
, polyglossia
e packages biblatex
( hyperref
etc.) para compor meus documentos como \documentclass[11pt,a4paper]{article}
. O hyperref
pacote é simplesmente incrível, no entanto, encontrei um bug realmente irritante.
Quero pdftitle
usar uma combinação de algum texto estático e uma variável definida anteriormente \thetitle
. Até agora tudo bem. O problema surge quando esta variável contém quebras de linha ( \\
). hyperref
parece simplesmente omiti-los automaticamente, mas quero poder controlar isso manualmente.
Para me livrar das quebras de linha eu uso esta macro \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}
(O crédito por isso vai principalmente paraManeira fácil de remover formatação (por exemplo, quebras de linha).) Esta macro funciona bem em qualquer lugar do documento - exceto em \hypersetup{pdftitle= ...}
.
O que estou perdendo aqui? Existem muitas perguntas semelhantes neste site, mas nenhuma parece resolver meu problema específico:
- Usando caracteres não ASCII em nomes de autores e títulos no hyperref pdfinfo, mas eu já uso
\hypersetup
- Também tentei criar uma nova variável sem quebras de linha, mas o erro parece se propagar por toda parte.
- Usar um código para caracteres especiais (por exemplo,
\040
deve ser um espaço) não produz nenhuma diferença.
- hyperref: pdftitle e codificação de caracteres errada, mesmo argumento.
- pdfinfo não parece estar funcionando, mesmo argumento novamente.
- hyperref: quebra linhas longas em pdftitle e outros campos.
\textLF
e\textCR
não resolva meu problema. O Foxit Reader não reconhece esses caracteres, enquanto o Adobe Acrobat e o Acrobat Reader exibem apenas a primeira linha. Meu problema está emhyperref
. - Caracteres não-ascii não são exibidos no pdftitle do hyperref: bug na opção 'unicode'?. No meu caso,
\usepackage[pdfencoding=unicode]{hyperref}
não muda nada. - Faça o hyperref pegar o pdfinfo de \title e \author. É certo que se eu usar
\usepackage[pdfusetitle]{hyperref}
o\hypersetup
é obsoleto e as quebras de linha serão automaticamente convertidas em espaço (para pdftitle) e em vírgula (para pdfauthor). No entanto, como observado anteriormente, quero uma combinação de texto estático e\thetitle
, portanto,\hypersetup
é inevitável.- A
\@title
abordagem não ajudaria, pois já é usada para definir\thetitle
em primeiro lugar.
- A
Aqui está meu 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}
Isso resulta em:
Por favor, ajude-me a entender e corrigir esse comportamento, para que eu possa usar minha \replacelinebreaks
macro ou atingir meu objetivo de alguma outra forma. Sua ajuda é muito apreciada.
Responder1
Você sempre pode redefinir a maneira como o hyperref lida com esses tokens:
\documentclass{article}
\usepackage{hyperref}
\newcommand\myvar{abc\\cde}
\pdfstringdefDisableCommands{\def\\{XXX}}
\hypersetup{pdftitle= abc\\ cde\myvar}
\begin{document}
blub
\end{document}
Ou você pode definir sua variável para que ela seja usada em locais sensíveis \texorpdfstring
:
\documentclass{article}
\usepackage{hyperref}
\newcommand\myvar{abc\texorpdfstring{\\}{XXX}cde}
\hypersetup{pdftitle= abcXXXcde\myvar}
\begin{document}
\myvar
\end{document}