LaTeX でPDF文書を作ってみよう --- DVI→PDF編

目次

はじめに

DVI→PDFのように直接変換するためのソフトに、dvipdfmxというものがあります。これは日本語のTeX文書をPDFに公開するという用途では非常に優秀なソフトです。

ここでは、このdvipdfmxを用いたPDF変換法についてみていきたいと思います。

dvipdfmxのインストール

最近(少なくともこのページが出来上がってきてから)角藤さんのpTeXを「標準イン ストール」でインストールした方なら、既に持っているはずです。そうでない方 は、TeXインストーラ3などからインストールしてください。

dvipdfmxの使い方

コマンドラインから行う場合

この方法は、もっとも応用性の高い方法なので、ぜひともマスターし てください。

基本的には、MS-DOSプロンプトを起動した後、ファイルのある場所にカレン トディレクトリを移動した後、次のコマンドを打てばDVIファイルからPDFファイ ルに変換されます。DVIファイル(たとえばfoo.dvi) の場所が「マイ ドキュメント」(C:\"My Documents")に(フォルダ の中に入れず)そのまま置いてあると仮定すると、 すると、

cd C:\"My Documents"
dvipdfm foo

とすればPDFファイルに変換されます。(最初のが、DVIファイルのある場所 へのディレクトリ(フォルダ)の移動、2番目のがdvipdfmによるPDF変換。) 2行目を"dvipdfmx"とすると、フォントが埋め込まれ、文書で使われ ているフォントのない環境での閲覧・印刷でも大丈夫となります。(ただし、ファイル サイズは大きくなります。)

cd C:\"My Documents"
dvipdfmx foo

あとはファイルをアップロードするな り、様々な方面に活用してください。

EasyTeX の場合

EasyTeXを持っている方は次のような設定をしておくとよいでしょう。メニューバーの[オプション]→[ツールの設定]より設定します。「PDF作成」などは[タイトル]に記入する際の一例です。

「PDF作成」
  • プログラム: dvipdfmx
  • 実行時引数: %n
「PDF閲覧」
  • プログラム: cmd.exe /c start
  • 実行時引数: %n.pdf

以上の設定により、メニューバーより[ツール]→[PDF作成]でDVIファイルがPDFファイルに変換され、[ツール]→[PDF閲覧]でPDFファイルを閲覧することが出来ます。

WinShell の場合

自分でボタンを作る必要があります。詳しくは 「TeX をカンタンにする方法(設定編)」の中の、ここ を見てください。User Defined の設定は、下図の通りに行えばよいでしょ う。(Name はお好みで名づけてください。User Tools はまねしなくて良 いです。)

dvipdfm の User Defined の設定の一例

PDFTeX みたく、1回ボタンを押しただけでTeXからPDFまで作れるようにした い場合は、上図の設定から、Name を「TeX -> PDF 変換」と書き換え、 [LaTeX first] にチェックを入れておくといいでしょう。

フォントを埋め込みたい場合は [exe - File] を"dvipdfmx"と書 き換えます。後述する暗号化機能を付けたい場合は[exe - File] を "dvipdfmx"、[cmd - Line] を"-S %m"とすればいい と思います。(新しいWinShell 2.1 の場合は%mを%cに変えます。

PDF ファイルの使い道

さて、「TeX ファイルのPDF への変換」で、LaTeX 文書をPDFファイルに変換することを 学んだので、これから具体的にPDFの一般的な扱い方について考えていきたいと思います。

1番考えられるのは、配布先に電子データの形で文書を見せるときでしょう。先ほ ども言ったように、PDFは多くのパソコンで読み込むことが出来ます。MS Wordの 場合、複雑な文書であれば相手がWordや(そのWord 文書のバージョンにきちん と対応した)「ワードパッド」を持っているかどうかを 確認する必要がありますし、万一持っ ていなかったり、バージョンの違いで読み込めなかったりする場合は、「最新版 のWord を買え」と同僚に勧めるか、ややレイアウトが崩れることを覚悟でリッチテキスト 形式(RTF)に直すしかありません。しかし、PDFなら、作成者の意図するレイアウ トと全く同じ物が得られますし、読み込みが正常に出来るかどうかを気にする必要は ほとんどありません。(ただし、フォントの埋め込みの問題は気にする必要 があります。)万一持ってなくとも無料で手に入りますので、Wordほど 大きな問題は起きにくいと思われます。

その一方で、文書を送り先に見てもらい、必要に応じて訂正ないしは校正して欲 しい時は、MS Word 文書のように簡単には行きません。本文を直接訂正したり校 正したりするには、最低でも相手が Acrobat や「やさしくPDFで文字入力」などのソフトを購入している必要があります。 もし購入していない場合は、いったん紙に印刷して校正してスキャナで取り込み、 画像として添付してもらうか、メールに訂正すべき項目を書いてもらうなど、間接 的な方法をとらざるを得ません。その点では若干不便であることは、知っておく べきでしょう。

なお、メールにせよweb server経由にせよ、秘密にしたい内容はPDFを暗号化する ことをお薦めします。無料で配布されているdvipdfmx にはこの機能がありま す。角藤版pTeXではdvipdfmxというコマンドのSオプションで、PDFを暗号化する ことが出来ます。(詳細は後述します。)それに加え、メールの送り先が高速回線で ない場合、データサイズにも気をつけましょう。

PDF 文書を作る際の基本

はじめに

まずはじめに、自分が作りたいPDF文書はどのような目的に使い、どのような 方法で使われるかをある程度想定しておくといいと思います。まず「目的」です が、通常の画像をあまり含まない、報告書のような文書であれば、これまでDVI ファイルを作ってきたように、普段どおり作っ てかまわないでしょう。また、公開する場合でも、ダウンロードした方に印刷し てもらうことを想定して作る場合も、普段どおり作ればよいと思います。

しかし、印刷せずに電子データのまま見てもらいたいときは、一工夫する必 要があるかもしれません。どのような内容の文書かにもよりますが、いくつかホー ムページでも見られるやり方を採用した方が良いかもしれません。

リンクを張ろう

「リンク」の機能は、もう既にホームページでいやというほど味わったので はないかと思いますが、改めて考えてみると、リンクは何に使われているでしょ うか。「リンク」は、現在読んでいる部分とは別の部分を参照 するために使われます。ホームページであれば、同じページの違った部分を参照 するリンクを張ったなら、リンクをクリックするとその部分へとジャンプすることになりますし、違うファイルであれば、 Web ブラウザはそのファイルを新たに読み込むことになります。

さて、この「リンク」は、たとえばどこで使われるでしょうか。例えば目次 の文字のある章をクリックすると、クリックした記述の章にジャンプできると便 利そうです。またURLが書いてあれば、その文字をクリックすることでそのURLの アドレスのファイルを読み込めれば便利そうです。前者は後に詳しく述べるとし て、後者の場合について説明します。まず、プリアンブルには次のように記述し てhyperrefパッケージを読み込みます。(これは標準で付属しているはずです。)

\usepackage[dvipdfm]{hyperref}

hyperref というパッケージは、簡単に言えばホームページのHTMLファイルで 実現されているようなことを、LaTeX 文書の中の命令で実現するパッケージで す。次に、リンクを張りたい本文中に、次のように書いてみましょう。(ここ ではGoogleへのリンクが張られています。)

\href{http://www.google.co.jp/}{Google} は、最も多くの人々に使われる検索 サイトとして有名です。

すると、「 Google は、最も多くの人々に使われる検索サイトとして有名です。」のように、リ ンクが張られます。(実際にリンクをクリックしてみてください。)リンクの形状は、おそらく水色の枠で囲った文字、という形 になると思いますが、そこをクリックすれば、先の上のリンクと同じ結果が出て くると思います。

また、リンクをクリックすると、指定したメールアドレスあてにメールを送れ るものもあります。それは次のように書きます。

御意見・ご感想は、\href{mailto:yas.axis@ma.mni.ne.jp}{私のメールアドレ ス} までお寄せください。

すると、「御意見・ご感想は、私 のメールアドレスまでお寄せください。」のようになります。(実際にリ ンクをクリックしてみてください。)

その他の基本的な工夫

公開する文書が特に印刷を想定していない場合、画像をふんだんに 使ってみるのも良いかもしれません。LaTeX でも 背景に色や画像を使う方法がありますので、かなり派手なことが出来るといっ てよいでしょう。(使い方は、上のリンクを参照してください。)

また、文 字のフォントをローマン書体や明朝体のペアからからサンセリフ体 やゴシック体のペアに変更した方が良いかもしれません。サンセリフ体やゴシッ ク体のペアに変更する方法は、次のようにします。
\gtfamily \sffamily

この後ろに文書を書いていけば、この命令以降の文字はすべてサンセリフ・ ゴシック体のペアに変わっていきます。一方、ローマン書体・明朝体のペアに 戻す方法は次の通りです。

\gtfamily \sffamily

ちょっと使い方が分かりにくいかもしれませんので、次のTeXソースと出力例 をご覧ください。明朝体・ローマン体のペアよりも、ゴシック体・サンセリフ 体のペアのほうが見やすいフォントでしょう。また、文字の大きさは、確実に 12pt 以上にするように心がけるべきです。

\documentclass[12pt]{jarticle}

\begin{document}
\gtfamily \sffamily
ここから先は、すべてゴシック体になります。

This is a pen.

\mcfamily \rmfamily
ここから先は、すべて明朝体になります。

This is a pen.
\end{document}
字体の変更

他にも、横長の文書にしてみたりなど、色々と工夫を凝らす余地がありそう です。

画像の埋め込み

dvipdfmx は、EPS, JPEG, PNG, BMP の各形式の画像を埋め込むことが出来ます。 EPSの方が扱いは楽かもしれませんが、埋め込む際にGhostscriptを呼び出します ので、多量の画像を扱う際には時間がかかります。dviout for WindowsはJPEG, PNGに対応していますので、JPEGやPNGあるいはBMPのままPDF に埋め込んだ方がいいでしょう。

他の形式のまま画像を扱う方法 で、このあたりの方法を述べていますので、よくわからない方はそちらを参 照してください。

目次や索引にリンクを張ろう!

ある命令を1行プリアンブルに挿入することで、目次、索引、\label等で相互 参照している箇所にリンクが張られ ます。これは使う側としても、大変便利です。ちなみに、リンクが四角の場合 (最初に示すやり方で変換した場合は赤い四角になるはず)は、紙に印刷する際にリ ンクの枠は印刷されませんので、ご安心を。

例として、昔作ったレポートをご覧ください。目次・注釈・索引部分にリン クが張られ、紙の文書とは別の意味での読みやすさがあると感じることでしょう。

リンクつき電子文書の例

使い方は簡単。プリアンブルに、次の1行を挿入するだけです。

\usepackage[dvipdfm,bookmarks=false]{hyperref}

リンクの枠の赤色がお気に召さなければ、linkbordercolor オプションにRGB値 で好きな色を示します。例を先に示しましょう。次の例は緑と青を1ずつ混ぜた 色、すなわち青緑になります。(そのまんまですが。)

\usepackage[dvipdfm,bookmarks=false,linkbordercolor={0 1 1}]{hyperref}

RGB値は{と}で囲み、区切りはスペースでつけます。値は最小0、最大1として 小数(1と0は整数)で示します。255でないことに注意してください。

RGB値はホームページ(web page)の編集等で知っている方もいらっしゃるかとは思います が、ここで、RGB値での示し方を知らない方への解説を行うことにします。 RGB値は、の順番で、最 大を1、最小を0として、それぞれの混ぜる色の度合いを示します。たとえば、 の混合物ですので {1 0 1}と示します。一般的 に、{ }のように、1を最大とした小数で書くわけです。

直感的にRGB値を知りたい方は、Windows付属の「ペイント」で[色 (C)] -> [色の編集 (E)] -> で出たウィンドウで、下の[色の作成 (D) >>] をクリックします。すると、下の図のようなウィンドウが出ますの で、1番右の濃淡を決めるパレットで黒と白の中間色をクリックしてから、左の パレットから望みの色をクリックします。その上で必要ならば右の濃淡パレッ トで白黒の濃淡を決めます。すると最大255、最小0でRGB値が示さ れますので、値から電卓で255を割ってください。これでお望みのRGB値が出る はずです。

RGB値の求め方

閑話休題、再びhyperrefのオプションの話に戻りましょう。

また、次のようにhyperrefのオプションに"colorlinks"を指定す ると、リンクの部分の文字色が赤で示されます。(赤い四角い枠はつきません。) ただし、 この場 合は、リンクの文字部分も赤で印刷されるようです。(モノクロプリンタだと薄 いグレーで印刷されるので、そう判断しました。手持ちにカラーのインクがない ので・・・。)印刷時にはご注意を。

\usepackage[dvipdfm,bookmarks=false,colorlinks]{hyperref}

こちらの方が見た目はきれいですが、リンクだと分かりにくいこと、純粋 に黒で印刷したいときに困ることがあるのが欠点です。そこで、次のように "linkcolor"を使い、リン クの部分の文字色を青にしてみるといいでしょう。

\usepackage[dvipdfm,bookmarks=false,colorlinks,linkcolor=blue]{hyperref}

こうすれば、直感的に「リンクだ」と分かってもらえるかもしれません。後 述する「アノテーション」(メモ)機能を使って、「文字色のついた部分はリン クだ」と示した方が、より分かりやすいかもしれません。

後は、普段どおりの処理を行うだけです。dvipdfm でも dvipdfmx (フォン ト埋め込み。サイズは当然重くなる。)でもどちらでも出来ます。

ちなみに、"bookmarks=true"と指定した場合、もしくはその記述 を省略した場合、「しおり」というものが左に作られます。この場合、本文の目次から「しおり」 が作られますが、「しおり」が日本語だと、文字化けします。この対処法を次に 述べましょう。

日本語しおりを作ろう!

はじめに

PDFには、「しおり」という機能があります。「し おり」は、下の図のように、左のほうに目次のようなものが現れ、そこのリンク をクリックすることで別の章へ容易にジャンプできるような機能です。しかし、 しおりに日本語を使うには、ちょっと一工夫する必要があります。(どうしてか といいますと、PDFの各機能では、日本語はUnicode(世界中の文字に対応したコー ド体系)として扱われなければならず、そのための処理を施さねばならないから です。)次の2つの方 法がありますので、お好きなほうをどうぞ。

日本語しおりの図。Acrobat Readerの左のほうに
あります。

dvipdfmx を使う方法

Web2C7.3.7 以降の角藤版pTeXでしか使えません。こ れより古いバージョン(Web2C7.3.3以前)の場合は下の「out2uniを使う方法」 を参照してください。

dvipdfmx はdvipdfm-cjkの開発版のMS-Windows版です。dvipdfmを角藤さんの サイトからダウンロードし、インストールしていれば、既に入っているはずです。

使い方は簡単です。プリアンブル(\begin{document}の前の部分)に

\AtBeginDvi{\special{pdf:tounicode 90ms-RKSJ-UCS2}}

\usepackage[dvipdfm]{color}
\usepackage[dvipdfm,bookmarks=true,bookmarksnumbered=true,%
bookmarkstype=toc]{hyperref}

と書いた(普通は「コピーした」)上で、 先ほど紹介したdvipdfmのコマンドの変わりにdvipdfmxを使えばよ いです。先ほどのコマンドにxが付くだけです。これで、日本語しおりが出来上 がります。(TeXファイル名を"foo.tex"とします。拡張子(.texや. dviなど)は省略できます。

platex foo
dvipdfmx foo

out2uni を使う方法

dvipdfmの中にはout2uniというツールが同梱されているかもしれません。こ れは、PDFファイルにおいて、 日本語しおりを作るためのソフトです。

out2uni は、dvipdfm と同様、MS-DOSプロンプト(コマンドプロンプト)で 使用します。成功すると、何も表示せず(空行出力)に処理を中断しますので、 最初のうちは (何だ・・・?)と思うかもしれません。「便りなきはよい知らせ」ともいいま すので、エラーメッセージが出なければ、成功とみなしてしまいましょう。

使い方ですが、まずプリアンブルに次のように記述します。

\usepackage[dvipdfm]{color}
\usepackage[dvipdfm,bookmarks=true,bookmarksnumbered=true,%
bookmarkstype=toc]{hyperref}

その上で、次の順にコマンドを実行します。

platex foo
platex foo
out2uni foo
platex foo
dvipdfm foo

私の環境では、out2uni コマンドの後のplatex コマンドは1回でないと、正 常に日本語しおりを作成できません。

日本語しおりの文字の色、および字体の変え方

掲示板で教えていただきました。どうもありがとうございました。

こうした設定は、C:\usr\local\share\texmf\tex\latex\hyperref にある hdvipdfm.def の設定をプリアンブルで再定義しなおすことで、変更できます。 (設定をそのまま貼り付けて、一部書き換えるというわけです。) 具体的には、プリアンブルに次のように書きます。

\makeatletter
\newcount\bkmkface
\def\bkmkcolor{1 0 0}
\def\BOOKMARK{\@ifnextchar[{\@BOOKMARK}{\@@BOOKMARK[1][-]}}
\def\@BOOKMARK[#1]{\@ifnextchar[{\@@BOOKMARK[#1]}{\@@BOOKMARK[#1][-]}}
\def\ReadBookmarks{%
  \begingroup
    \escapechar=`\\%
    \let\escapechar\@gobble %
    \def\@@BOOKMARK [##1][##2]##3##4##5{\calc@bm@number{##5}}%
    \InputIfFileExists{\jobname.out}{}{}%
    \ifx\WriteBookmarks\relax
      \global\let\WriteBookmarks\relax
    \fi
    \def\@@BOOKMARK[##1][##2]##3##4##5{%
      \def\Hy@temp{##4}%
      \@pdfm@mark{%
        outline ##1 <<
          /C [\bkmkcolor]
          /F \the\bkmkface
          /Title (\expandafter\strip@prefix\meaning\Hy@temp)
          /A <<
            /S /GoTo
            /D (##3)
          >>
        >>
      }%
   }%
   {%
    \def\WriteBookmarks{0}%
    \InputIfFileExists{\jobname.out}{}{}%
   }%
   %{\escapechar\m@ne\InputIfFileExists{\jobname.out}{}{}}%
   \ifx\WriteBookmarks\relax\else
     \if@filesw\immediate\openout\@outlinefile=\jobname.out
      \ifHy@typexml
       \immediate\write\@outlinefile{<relaxxml>\relax}%
      \fi
     \fi
   \fi
   \endgroup
}
\makeatother

\bkmkface2
\renewcommand{\bkmkcolor}{0 0 1}

文字色、文字の太さ及び斜体の設定は下の2行で行います。\bkmkface0 が、 太字にも斜体にもなっていない通常の文字、\bkmkface1が斜体のみ、\bkmkface2 が太字のみ、\bkmkface3 が太字+斜体となっています。色の変更は、1番最後の 命令にてRGB指定で行います。要領は、先ほど linkbordercolor をRGBで変更し たのと同じです。

TeXやPDFの命令に通じてきたら、hdvipdfm.def をいじってみると、面白いか もしれません。

日本語しおり作成時の注意

日本語しおりは、古いバージョンのAcrobat Readerでは読み込めませ ん。心配な方は、目次を英語(ASCIIコード)で書いてしまったほうがいいでしょ う。英語のしおりの場合、先に述べた日本語しおりのような処理を行う必要 はありません。

PDF文書情報と、メモ(アノテーション)をつけよう

はじめに

Adobe Reader 7では、[ファイル] -> [文書のプロパティ] -> [概要]タブとたどり、「文書の概要」というウィンドウ内で、PDFの作成者やタイトル、PDF作成ソフトを見る機能が付い ています。この欄に作成者の名前を入れておくと、文書の信憑性を挙げるのに一 役買うかもしれません。

(ちなみに、[ファイル] -> [文書のプロパティ] -> [フォン ト]タブとたどると、フォント情報が見られます。dvipdfmx での(デフォルトでの)変換だと、MS-Gothic や MS-Mincho の「実際のフォン ト」欄が”埋め込みサブ セット”となっており、フォントが埋め込まれていることが分かると思います。 「埋め込み」が何なのかについては、後ほど説明しようと思います。)

また、下の図のように、PDF文書にメモを置いておく「アノテーション機能」 があります。メモは開いておくことも閉じておくことも、動かすことも 出来ます。PDF文書とは別に読者に伝えたいメモがある場合や、下書きの完成度 合いをメモしておくことに使えるかもしれません。

「アノテーション機能」の例です。上が開い
 ていて、下が閉じています。

この2つは関連性のない機能ですが、作り方は同じなので、一緒に紹介します。

dvipdfmx を使う方法

Web2C7.3.7 (2002年9月1日現在最新版)の角藤版pTeXでしか使えません。こ れより古いバージョン(Web2C7.3.3以前)の場合は下の「out2uniを使う方法」 を参照してください。

dvipdfmx はdvipdfm-cjkの開発版のMS-Windows版です。dvipdfmを角藤さんの サイトからダウンロードし、インストールしていれば、既に入っているはずです。

これまでは、日本語しおりやアノテーション機能を使う場合には、TeXファイ ルとは別に日本語を記述し、out2uniコマンドをかけなければならなかったので すが、現在はプリアンブルに

\AtBeginDvi{\special{pdf:tounicode 90ms-RKSJ-UCS2}}

と書いてdvipdfmxコマンドをかけさえすれば、日 本語が文字化けせずに出るようになっています。

まず、プリアンブル(\begin{document}の前の部分) には

\AtBeginDvi{\special{pdf:tounicode 90ms-RKSJ-UCS2}}

\usepackage[dvipdfm]{color}
\usepackage[dvipdfm,bookmarks=true,bookmarksnumbered=true,%
bookmarkstype=toc,colorlinks,linkcolor=blue,%
pdftitle=「免疫と病気」のレポート,%
pdfsubject=レポートの電子文書化,%
pdfauthor=大友 康寛,%
pdfkeywords=免疫、病気、多発性硬化症、自己免疫疾患、免疫寛容]{hyperref}

と書きます。pdftitleにはPDF文書のタイ トル、pdfsubjectには文書のテーマ、pdfauthorには文書の筆者、 pdfkeywordsには文書のキーワードを書きます。なお、pdfkeywordsに半角カン マを使う場合は、おそらく下の方法のように、別ファイルに記述しなければな らないと思います。直接書くと、オプションの区切りと勘違いしてエラーを出 してしまいます。

\begin{document} の後ろの本文の、メモを貼りたい場所には、次のコードを 挿入しておきます。

(1) 1箇所目
\special{pdf: ann width 7cm height 5cm
<< /Type /Annot /Subtype /Text /Open true
/Contents (1セメの時に作ったレポートで、実験したものです。) >>}
(2) 2箇所目
\special{pdf: ann width 7cm height 5cm
<< /Type /Annot /Subtype /Text /Open false
/Contents (青く反転している部分は、ハイパーリンクになっています。) >>}

メモの幅を調整したい時は、幅の場合は width の後ろの"7cm"、高 さの場合は height の後ろの"5cm"の部分を直していきます。PDFを 開いたときにメモが開いている状態にする場合は"/Open"の後ろを true, 閉じた状態にする場合はfalseにします。電球で言えばtrue がスイッチ がon、falseがスイッチoffの状態ですので、なんとなく分かるでしょう。

"/Contents"の後ろの括弧には、メモの内容を書きます。しつこい ようですが、日本語で直接書いてかまいません。

メモの色を変えたい場合は、下のように/C を使い、RGB値で指定します。これは linkbordercolor を変えたときと同じなので、なんとなく分かるでしょう。

\special{pdf: ann width 7cm height 5cm
<< /Type /Annot /Subtype /Text /Open false /C [0 0.5 1]
/Contents (青く反転している部分は、ハイパーリンクになっています。) >>}

後は、次のコマンドを実行するだけです。(ファイル名は "foo.tex")

platex foo
dvipdfmx foo

out2uni を使う方法

(上の方法のほうが、outファイルを作らない分、手間がかかりません。バージョ ンアップをお薦めします。)

この方法は、日本語部分をoutファイルとして別ファイルにし、そこだけ out2uniでUnicode化しておくことで、日本語をUnicodeでしか扱えないPDF の文字化けを防ぎます。

まず、新たに「拡張子がoutのファイル(ファイル名の語尾が .out のファイ ル)」を作ります。ここでは、そのファイルの名前を"infoout.out" としておきましょう。 (以下、このファイルを「out ファイル」と呼びます。それに次のように書いておきます。

\catcode`\@=0
@catcode`@\=12

@def@PDFTITLE{「免疫と病気」のレポート}
@def@PDFSUBJECT{レポートの電子文書化}
@def@PDFAUTHOR{大友 康寛}
@def@PDFKEYWORDS{免疫、病気、多発性硬化症、自己免疫疾患、免疫寛容}

@def@ANNOT{1セメの時に作ったレポートで、実験したものです。}
@def@BLUEISLINK{青く反転している部分は、ハイパーリンクになっています。}

@catcode`@\=0
\catcode`\@=12

"catcode"の文字のある2行が最初と最後にありますが、これは 「カテゴリーコード(pLaTeX2e での文字の役割分担)を変更するための命令 です。最初の2つのcatcode の後ろは\ の代わりのように @ が用いられてい ますね。よく分からない方は、おまじないのようなものだと考えてください。

def 命令がこの後に続きますが、これは「文字を入れる箱」(プログラムを やったことがある方は「変数」と便宜上考えてみます)だと思ってくだ さい。(本来は「コマンドを定義する命令」ですが、結果的に文字を入れる箱 の役割になっています。)箱の名前を2番目の@の後ろに、 この箱の中に入れる文字列を{と}の間に書きます。

次の空行までのdef命令では、4つのPDF文書の情報を入れるための箱を作成し ています。 PDFTITLEにはPDF文書のタイ トル、PDFSUBJECTには文書のテーマ、PDFAUTHORには文書の筆者、 PDFKEYWORDSには文書のキーワードを書いておきます。(別の文字列でももちろ んかまいません。確認のために「同じように」と言ったに過ぎません。)

次に、 TeXソースに次のように記述します。次の3箇所を書いてください。

(1) プリアンブル
\input infoout.out

\usepackage[dvipdfm]{color}
\usepackage[dvipdfm,bookmarks=true,bookmarksnumbered=true,%
bookmarkstype=toc,colorlinks,linkcolor=blue,%
pdftitle=\PDFTITLE,%
pdfsubject=\PDFSUBJECT,%
pdfauthor=\PDFAUTHOR,%
pdfkeywords=\PDFKEYWORDS]{hyperref}

\input の後 には先ほど作成したoutファイル名を書きます。これは、out ファイルに書かれ た内容を読み込む、ということです。したがって、out ファイルに入れた箱の 中身の文字列が、ここで生かされることになります。 hyperref のオプションが長く、複数行にわたる可能性がありま すので、行末に%をつけて、「次の行に続く」と表しておきます。 hyperref のオプションのpdftitle から pdfkeywords には、先ほど文書情報の文字列を入れた箱の名前を\の後に記述し ます。

\begin{document} の後ろの本文の、メモを貼りたい場所には、次のコードを 挿入しておきます。

(2) 1箇所目
\special{pdf: ann width 7cm height 5cm
<< /Type /Annot /Subtype /Text /Open true
/Contents (\ANNOT) >>}
(3) 2箇所目
\special{pdf: ann width 7cm height 5cm
<< /Type /Annot /Subtype /Text /Open false
/Contents (\BLUEISLINK) >>}

メモの幅を調整したい時は、幅の場合は width の後ろの"7cm"、高 さの場合は height の後ろの"5cm"の部分を直していきます。PDFを 開いたときにメモが開いている状態にする場合は"/Open"の後ろを true, 閉じた状態にする場合はfalseにします。電球で言えばtrue がスイッチ がon、falseがスイッチoffの状態ですので、なんとなく分かるでしょう。

"/Contents"の後ろの括弧には、メモの内容を書きます。英語の場 合はそのまま書いても大丈夫ですが、日本語の場合は out ファイルで使った箱 に\をつけたもので指定しないと、文字化けします。

その上で、次の順にコマンドを実行します。

out2uni foo
platex foo
platex foo
out2uni foo
platex foo
dvipdfm foo

最初のout2uni で、TeXソースにinputしたoutファイルを処理(Unicode化)するのです。私の環境では、out2uni コマンドの後のplatex コマンドは1回でないと、正 常に日本語しおりを作成できません。

PDF の暗号化

作ったPDFファイルを特定の人以外には見せたくない、ということがあります。 このような場合はPDFファイルを開いた人にパスワードを聞き、あってたら表示 する、という仕組みを使ったほうがよさそうです。

やり方は

dvipdfmx -S filename.pdf

です。(dvipdfmxなので、使うためには最新のpTeX(Web2C7.3.7)が必要です。 所有者権限のOwner passwordと一般ユーザー権限のUser passwordの2種類聞かれます。(User passwordはOwner passwordよりも制限の厳しいものです。)うまくいくと、 PDFファイルを開く際にはUser passwordを聞かれる様になります。ためしに ここ にアクセスして、パスワードのウィンドウで「secret」と入力して開いてみ てください。化学構造式が雑然と並べられただけのPDFファイルを開くことが出 来ます・・・。

pdfcryptでかける、PDFの使用制限

PDFにかけられる制限は、パスワードによる制限だけではありません。印刷の許可不許可、コピー・抽出の許可不許可などまで細かく設定することが出来ます。これはdvipdfmxでもできますが、角藤さんのpTeXに含まれるpdfcryptコマンドのほうがやりやすいです。また、dvipdfmx同様、パスワード制限もかけられます。

これはJavaアプリケーションなので、これを使うためにはあらかじめJavaプログラムを動かす道具であるJ2SE Runtime Environment(JRE)をインストールしておく必要があります。J2SE Runtime Environmentのインストール方法を書きましたので、必要な方はご覧ください。

さて、まずはあらかじめdvipdfmxで、暗号化をしていないPDFを作成しておきます。これをold.pdfとします。その上で、たとえば次のように実行します。

pdfcrypt -P 00100100 -K 128 old.pdf new.pdf

こうすることで、old.pdfから制限つきPDFであるnew.pdfを生成することが出来ます。owner passwordとuser passwordを聞かれますので、それぞれ記入しましょう。

-P オプションの後の二桁の0と1の並びは、「どれを許可してどれを許可しないか」を指定するためのものです。具体的には次のとおりです。

一番目 印刷の許可(Printing)
二番目 文書の変更の許可(Modify-Contents)
三番目 コピー・抽出の許可(Copy)
四番目 注釈・フォームフィールドの作成の許可(Modify-Annotations)
五番目 フォームフィールドの入力または署名の許可(FillIn)
六番目 アクセシビリティを有効にする許可(ScreenReaders)
七番目 文書アセンブリの変更の許可(Assembly)
八番目 低解像度での印刷の許可(Degraded-Printing)

上のコマンドでは、「コピー・抽出の許可(Copy)」および「アクセシビリティを有効にする許可(ScreenReaders)」の2つを許可し、それ以外は不許可にする設定を行いました。

ただし、owner passwordを入力して開いた場合は、-Pオプションで不許可に指定したものでも、一部は「許可」にされてしまいます。配布先にはowner passwordではなく、user passwordを教えるようにしましょう。

-Kオプションでは、どれくらいのセキュリティを保持したいかを決めるためのものです。40と128から選べます。40の場合はセキュリティが低めだが多くのAdobe Readerで開ける、128の場合はセキュリティは高いがAdobe Reader 5以降でないとPDFを開けなくなります。

では、new.pdfを開いてみましょう。パスワードを聞かれますが、ここではuser passwordを答えます。うまく開けたら、Adobe Readerの場合、メニューより[ファイル]→[文書のプロパティ]と選び、[セキュリティ]タブをクリックします。すると、たしかに「コピー・抽出の許可(Copy)」および「アクセシビリティを有効にする許可(ScreenReaders)」に相当する項目が許可され、それ以外は不許可になっていることが分かると思います。

PDFのセキュリティ設定

PDF で多書体

dvipdfmx で、(標準で)フォントをPDFファイルに埋め込むことが出来るこ とは既に述べました。その具体例として、様々な書体をPDFに埋め込む例を述べ たいと思います。今度はPDFで「みかちゃん」フォント!にその詳細を書いていますので、ご覧ください。

PDF でアンケート

さて、せっかく作った文書ですが、それを見た人がどのような感想を持った のかということは、けっこう気になります。そこでPDFで簡単なアンケート記入 欄および選択肢を作り、「送信」ボタンを押すことで、その内容がメールで送られるようにし てみましょう。(なお、こうした記入欄や選択肢の部分は「フォーム」と呼 ばれます。知っている方のほうが多いと思いますが、念のための確認です。)

まず、フォームの記入欄で日本語が使えるように、プリアンブルに次をコピー ・貼り付けしておきます。(もともとhyperrefパッケージの中のファイルが、記 入欄のフォントに欧文フォントを指定したので、記入欄に「平成角ゴシック」という日本語フォント を使うように指定しなおしたのです。)

\makeatletter

\def\PDFForm@List{%
  /Subtype /Widget
  \ifFld@hidden /F 6 \else /F 4 \fi
  /T (\Fld@name)
  /FT /Ch
  /Q \Fld@align\space
  /BS << /W \Fld@borderwidth\space /S /\Fld@borderstyle\space >>
  /MK <<
    /BC [\Fld@bordercolor]
    \ifx\Fld@bcolor\@empty
    \else
      /BG [\Fld@bcolor]
    \fi
  >>
  /DA (/KaGo \strip@pt\Fld@charsize\space Tf \Fld@color\space rg )
  /Opt [\the\Choice@toks]
  /DV (\Fld@default)
  \Fld@additionalactions
  \Fld@flags
}


\def\PDFForm@Text{%
  /Subtype /Widget
  \ifFld@hidden /F 6 \else /F 4 \fi
  /T (\Fld@name)
  /Q \Fld@align\space
  /FT /Tx
  /BS << /W \Fld@borderwidth\space /S /\Fld@borderstyle\space >>
  /MK <<
    /BC [\Fld@bordercolor]
    \ifx\Fld@bcolor\@empty
    \else
      /BG [\Fld@bcolor]
    \fi
  >>
  /DA (/KaGo \strip@pt\Fld@charsize\space Tf \Fld@color\space rg )
  /DV (\Fld@default)
  /V (\Fld@value)
  \Fld@additionalactions
  \ifFld@multiline
    \ifFld@readonly /Ff 4097 \else /Ff 4096 \fi
  \else
    \ifFld@password
      \ifFld@readonly /Ff 8193 \else /Ff 8192 \fi
    \else
      \ifFld@readonly /Ff 1 \fi
    \fi
  \fi
  \ifnum\Fld@maxlen>0/MaxLen \Fld@maxlen \fi
}
\makeatother

では、実際に私の作ったアンケートをご覧下さい。次は、そのTeXソースです。 (フォームの部分に関係する部分のみ抜粋しています。)

\setlength{\parindent}{0pt}
\setlength{\parskip}{10pt}
\begin{Form}[encoding=html,method=post,action=http://www.altoworld.com/form2/post.cgi]

私のつたないレポートを最後まで読んでくださり、どうもありがとうございまし
 た。お手数ですが、アンケートにご協力願います。

このレポートの感想を教えてください:

\CheckBox[name=Vgood]{大変良い}
\CheckBox[name=Good]{良い}
\CheckBox[name=Usual,checked]{まずまず}
\CheckBox[name=Lbad]{ダメ}
\CheckBox[name=Bad]{全然ダメ}

\ChoiceMenu[radio,name=kansin,borderwidth=3,bordercolor=0 1 0]
     {本レポートの分野に関心がありますか?}
     {Yes=Koutei,
      No=Hitei}

\ChoiceMenu[combo,name=whatchapter,
     ]{とりわけ何章に興味をもたれましたか。(複数回答の場合は、半角の数
 字をスラッシュ(/)で区切ってご記入ください。}
     {Chapter 1,Chapter 2,Chapter 3,Chapter 4}

\ChoiceMenu[menulength=3,width=2in,name=travel]
     {パソコン歴は何年になりますか?:}
     {...0.5,0.5..1,1..5,5..10,10..30,30..}

よろしければ、お名前とメールアドレスをご記入ください。

\TextField[width=3in,name=yourname]
    {お名前:}

\TextField[width=3in,name=mail]
    {メールアドレス:  }

よろしければ感想をお聞かせください。

\TextField[multiline,width=3in,name=kansou,color=0 0 0,backgroundcolor=1 1 1,]{感想: }

ご記入が終わりましたら、「送信」ボタンを押してください。やり直す場合は「リセッ
 ト」ボタンをクリックしてください。

% フォームデコードサービス
\TextField[hidden,name=_mailto,value=yas.axis@ma.mni.ne.jp]{}
\TextField[hidden,name=_subject,value=from_mailform]{}
\TextField[hidden,name=_location,value=http://klavis.fc2web.com/thanx.html]{}

\Submit[]{送信}

\Reset{クリア}

どうもありがとうございました。

\end{Form}

下が、上のTeXソースから出力されたPDF文書です。「送信」ボタンを押すと、 私宛にメールでアンケートの内容が送られます。(ただし、一旦「フォームデコー ドサービス」で文字化け対策処理を施してから、私にメールで届くことになりま す。ここで使用しているフォームデコードサービスは http://www.altoworld.com/のものです。無料で提供していただいている、そのご厚意に感謝します。)ただし、必ずブラウザのプラグ インから、以下のPDF文書のフォーム機能を利用することにしてください。この 文書をダウンロードして、Acrobat Readerでフォーム機能で「送信」ボタンを押 したとしても、失敗します。

docform9.pdf

うまく送信されない場合は、Acrobat Reader がフォーム送信機能に対応して いない可能性があります。

「LaTeX 文書を公開する方法」に戻る   目次に戻る

This document is dedicated to the Public Domain! --- この著作権を放棄した文書は「みなさんのもの」です!
This web page is written by Yasuhiro Otomo.
If you have any question about this page, send e-mail to me --- ご質問は大友まで。
You can link to this web page freely! --- リンクはご自由にどうぞ!
This web page typed on Meadow/1.15 (SHOUBU)