LaTeXでPDF出力する際のTips

hyperrefパッケージをうまく使って、メタデータとかブックマークがついたPDF文書を作ろう。

参考文献:

PDFのメタデータを指定する

PDFファイルには、「タイトル」「作成者」「主題」などの情報を指定できる。LaTeXでhyperrefパッケージを使うと、出力されるPDFファイルについてこれらの情報を設定できる。

PDFメタデータ

PDFのタイトル、作成者、主題など

platex+dvipdfmxの場合

プリアンブルで \usepackage{hyperref} する。ここで、ドライバ(dvipdfmx)を指定してやらないとおかしなことになる。指定する箇所は \documentclass のオプションでもいい(例1)し、 \usepackage のオプションでもいい(例2)。他のパッケージもでドライバの指定が必要かもしれないので、 \documentclass に指定する方がいいかもしれない。

% 例1
\documentclass[dvipdfmx]{jsarticle}
\usepackage{hyperref}
% 例2
\documentclass{jsarticle}
\usepackage[dvipdfmx]{hyperref}

PDFタイトルや作成者を指定するには、hyperrefの pdftitle オプションや pdfauthor オプションを指定する。指定方法は、 \usepackage のオプションとして指定する(例3)か、別途 \hypersetup コマンドで指定する(例4)。ちなみに、PDFの主題は pdfsubject を指定すればよい。詳しくはhyperrefのマニュアルを参照すべし。

% 例3(注意:文字化け)
\documentclass[dvipdfmx]{jsarticle}
\usepackage[pdftitle={すごい文書},pdfauthor={天才}]{hyperref}

% 例4(注意:文字化け)
\documentclass[dvipdfmx]{jsarticle}
\usepackage{hyperref}
\hypersetup{
  pdftitle={すごい文書},
  pdfauthor={天才}
}

だがしかし!生成されたPDFを見てみると、メタデータが文字化けしている。前世で積んだ徳が足りなかったのだろうか…。

「タイトル」と「作成者」が文字化けしている

「タイトル」と「作成者」が文字化けしている

platex+dvipdfmxでの文字化けの解消方法

昔やった時は \AtBeginShipoutFirst とかいう謎のコマンドを使ってごにょごにょやっていた気がするが、今は PXjahyperパッケージ を使えばいい感じにやってくれるらしい。めでたしめでたし。

% 例5
\documentclass[dvipdfmx]{jsarticle}
\usepackage{hyperref}
\usepackage{pxjahyper}
\hypersetup{
  pdftitle={すごい文書},
  pdfauthor={天才}
}

LuaLaTeXの場合

最近はLuaTeX-jaを使って日本語文書を書いている人もいるかもしれない。(俺だ)

LuaTeXを使ってPDF出力する分には、ドライバの指定とかは必要ない。やったー!

% 例6(注意:文字化け)
\documentclass{ltjsarticle}
\usepackage[pdftitle={すごい文書},pdfauthor={天才}]{hyperref}
% 例7(注意:文字化け)
\documentclass{ltjsarticle}
\usepackage{hyperref}
\hypersetup{
  pdftitle={すごい文書},
  pdfauthor={天才}
}

と思ったら、タイトルや作成者が文字化けする。人類がLuaTeXを使うには100年早かったか…?いやいやそんなことはない。
スクリーンショット 0027-09-15 19.18.11

文字化けを解消するには、hyperrefのオプションに pdfencoding=auto または unicode を指定する。(ちなみに、pdfencoding はhyperrefのマニュアルに記載がない。READMEには記載がある)(あと、なんで pdfencoding=autounicode がデフォルトじゃないんだろう)

% 例8
\documentclass{ltjsarticle}
\usepackage[unicode,pdftitle={すごい文書},pdfauthor={天才}]{hyperref}
% 例9
\documentclass{ltjsarticle}
\usepackage[unicode]{hyperref}
\hypersetup{
  pdftitle={すごい文書},
  pdfauthor={天才}
}

これで文字化けが解消する。めでたしめでたし。

\title, \author の内容をPDFメタデータに反映させる

さて、LaTeXで文章を書く時に、\title, \author コマンド等でタイトルと著者を指定して、\maketitle コマンドでタイトルをつけている人も多いだろう。このとき、LaTeXソース中にタイトルと著者名が2回ずつ出てくることになる(例10)。

% 例10(LuaLaTeX + LuaTeX-ja の場合。 platex+dvipdfmx の場合は省略)
\documentclass{ltjsarticle}
\usepackage[unicode]{hyperref}

\title{すごい文書}
\author{天才}

\hypersetup{
  pdftitle={すごい文書},
  pdfauthor={天才}
}

\begin{document}
\maketitle

すごい内容

\end{document}

同じ内容が2回出てくるのはちょっと…美しくない。\title\author に指定した内容を使いまわせないだろうか。

そういう場合は、マニュアルには載っていない(READMEには載っている) pdfusetitle オプションを使うといい感じにやってくれるらしい。いやいやいや……そういう重要なオプションはちゃんとマニュアルにも書いてくれよ……。

参考:

% 例11
\documentclass{ltjsarticle}
\usepackage[unicode,pdfusetitle]{hyperref}

\title{すごい文書}
\author{天才}

略

ちなみに、この便利なオプションを使わないで自力でなんとかすると、以下のようになる。

% 例12(上級者向け)
\documentclass{ltjsarticle}
\usepackage[unicode]{hyperref}

\title{すごい文書}
\author{天才}

\makeatletter
\hypersetup{
  pdftitle={\@title}, % \@title は \title の後に書くこと
  pdfauthor={\@author} % \@author は \author の後に書くこと
}
\makeatother

Beamerで \title, \author の内容をPDFメタデータに反映させない(追記)

Beamerを使っていると上に書いたような pdfusetitle の設定が勝手にされるらしい。
これを抑制するには、 \documentclass のオプションで

\documentclass[dvipdfmx,usepdftitle=false]{beamer}

とか

\documentclass[unicode,usepdftitle=false]{beamer}

のように usepdftitle=false を指定する。…と、Beamerのマニュアルに書いてある。

あとは \hypersetup を使えば好きなPDFタイトルを指定できる。

思ったこと

hyperrefのマニュアル見つけて喜んでたら重要なオプションがREADMEにしか書いてないという罠をなんとかしてくれ。

PDFの目次(ブックマーク)についても何か書こうと思ったが、長くなったので別の記事にする。(これだけの内容でこんなに長くなるのはおかしいッ!)


LaTeXでPDF出力する際のTips” に1件のフィードバックがあります

  1. ピンバック: LaTeXでPDF出力する際のTips その2 | 雑記帳

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です