
私は、、、パッケージ(など)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= ...}
。
ここで何が欠けているのでしょうか? このサイトには似たような質問がかなりたくさんありますが、どれも私の特定の問題を解決してくれないようです:
- hyperref pdfinfo 内の著者名とタイトルに非 ASCII 文字を使用する、しかし私はすでに使用しています
\hypersetup
- 改行なしで新しい変数を作成することも試みましたが、エラーは全体に伝播しているようです。
- 特殊文字のコード (例
\040
: スペース) を使用しても、違いは生じません。
- hyperref: pdftitle と間違った文字エンコード、同じ議論です。
- pdfinfoが動作していないようです、また同じ議論。
- hyperref : pdftitle やその他のフィールドで長い行を分割する.
\textLF
では\textCR
問題は解決しません。Foxit Reader ではこれらの文字が認識されませんが、Adobe Acrobat と Acrobat Reader では最初の行のみが表示されます。私の問題は にありますhyperref
。 - 非 ASCII 文字が hyperref の pdftitle に表示されません: 「Unicode」オプションのバグですか?私の場合は
\usepackage[pdfencoding=unicode]{hyperref}
何も変わりません。 - hyperref が \title と \author から pdfinfo を取得するようにする
\usepackage[pdfusetitle]{hyperref}
確かに、を使用すると、\hypersetup
は廃止され、改行は自動的にスペース (pdftitle の場合) とコンマ (pdfauthor の場合) に変換されます。ただし、前述のように、静的テキストと の組み合わせが必要なので\thetitle
、 は\hypersetup
避けられません。- この
\@title
アプローチは、すでに定義に使用されているため、役に立ちません\thetitle
。
- この
これが私の 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}