pTeX --> dvipdfmx で TeXinfo にリンクやしおりを付ける (W32TeX)
- ut の投稿
W32TeX の texinfotools-w32 に含まれている texinfo.tex (と texindex.exe) は、角藤先生が和文フォントも使えるように修正を加えてくださっているお蔭で、日本語で書かれている texi ファイルも普通に pTeX でタイプセット出来て、dvipdfmx で pdf も作れます。
でも、欧文のみの texi ファイルであれば、pdfTeX で処理すると、目次や索引からのリンクや、アウトライン (しおり) も出来ます。
本家の texinfo.tex と、XeTeX とか LuaTeX を使えば、trueroad さんの御尽力で日本語も使えるみたいなのですけれど、私の手元のシステムは古くて、また、XeTeX や LuaTeX も全然分かりません。
で、texinfo.tex の中味をパラパラと眺めてみましたら、XeTeX 用の設定が用意されているようなのですが、“@image support” という部分を別にすれば、格別 XeTeX 特有の設定というよりは、xdvipdfmx 用の special を発行するための設定のように見えます。また、「xdvipdfmx 用の special」 といっても (ちゃんと調べてはいませんが) dvipdfmx でも理解出来そうな基本的な special しか使われてないように見えます。
なので、XeTeX 用の設定が有効になるようにしつつ pTeX でタイプセットして、それを dvipdfmx で pdf にしたら、リンクやアウトラインが出来るんじゃないかな、と考えました。
適当に作った簡単な texi ファイルで試してみましたら、pTeX でも dvipdfmx でも特にエラーや警告も出ずに、リンクやしおりが付いた pdf が出来て、リンクからジャンプも出来ました (!)。しかし、自分で作ったものではない大部な texi ファイルを処理してみますと、dvipdfmx で警告が出ます。これが、XeTeX のふりをして pTeX で処理しているせいなのか、texi ファイルの書き方のせいなのかが、私には判断が出来ません。
というわけで、質問は、ざっくりしたお尋ねの仕方になってしまいますが、以下のようなやり方はまずいのでしょうか?、というものです:
(0) 前提
私の手元のシステムは W32TeX [2012/08/30] で、
pTeX 3.1415926-p3.3 (sjis) (TeX Live 2012/W32TeX)
This is dvipdfmx-20120420 by the DVIPDFMx project team,
modified for TeX Live,
an extended version of dvipdfm-0.13.2c developed by Mark A. Wicks.
です。
texinfo.tex は、2020-04-13 にダウンロードしてきた texinfotools-w32 の中のもので、
\def\texinfoversion{2020-02-11.09}
となっています。
(1) やってみたこと
XeTeX のふりをするには、〔W32TeX 版〕 texinfo.tex 内の以下の 3 箇所に対応すればよさそうに思えました (コメントは削ってあります):
a) \message{pdf,} の部分の 1154 行あたりの;
\ifx\XeTeXrevision\thisisundefined\else
\pdforxetextrue
\fi
b) \message{pdf,} の部分の 1562 行あたりの;
%
% For XeTeX
%
\ifx\XeTeXrevision\thisisundefined
\else
\ifnum\strcmp{\the\XeTeXversion\XeTeXrevision}{0.99996}>-1
\special{dvipdfmx:config C 0x0010}
\txiuseunicodedestnametrue
\else
\txiuseunicodedestnamefalse
\fi
c) \message{formatting,} の部分の 11349 行あたりの;
\def\internalpagesizes#1#2#3#4#5#6#7#8{%
\voffset = #3\relax
\topskip = #6\relax
\splittopskip = \topskip
%
\vsize = #1\relax
\advance\vsize by \topskip
\outervsize = \vsize
\advance\outervsize by 2\topandbottommargin
\txipageheight = \vsize
%
\hsize = #2\relax
\outerhsize = \hsize
\advance\outerhsize by 0.5in
\txipagewidth = \hsize
%
\normaloffset = #4\relax
\bindingoffset = #5\relax
%
\ifpdf
\pdfpageheight #7\relax
\pdfpagewidth #8\relax
\pdfhorigin = 1 true in
\pdfvorigin = 1 true in
\else
\ifx\XeTeXrevision\thisisundefined
\special{papersize=#8,#7}%
\else
\pdfpageheight #7\relax
\pdfpagewidth #8\relax
\fi
\fi
%
\setleading{\textleading}
%
\parindent = \defaultparindent
\setemergencystretch
}
a) と b) については、まず \XeTeXrevision を適当に定義しておいて、あと、b) の \ifnum が false になるように適当に \def\strcmp#1#2{-2} としてみました。
c) はデフォルトの \letterpaper の展開時に実行されますが、\XeTeXrevision を定義したせいで \special{papersize=#8,#7} でなくて \else のほうになってしまうので、予め \pdfpageheight と \pdfpagewidth を宣言しておいてやり過ごして、texinfo.cnf のほうで再定義してから、紙のサイズも改めて宣言することにしました。
これらの変更点を、forDvipdfmx.tex と texinfo.cnf にまとめました。
関連ファイルを zip に固めたものを添付します。
(2) dvipdfmx からの Warning の例
a) test.texi の元ネタである latex2e.texi ($Id: latex2e.texi 782 2020-04-03 23:00:48Z karl $) を pTeX でタイプセットしてから dvipdfmx で処理しますと、
latex2e.dvi -> latex2e.pdf
[1][2][3][4][5][6][7][8][9][10][11
** WARNING ** Could not find a name object.
** WARNING ** Could not find a key in dictionary object.
** WARNING ** Could not find a value in dictionary object.
** WARNING ** Ignoring invalid dictionary.
** WARNING ** Interpreting special command out (pdf:) failed.
** WARNING ** >> at page="11" position="(72, 769.89)" (in PDF)
** WARNING ** >> xxx "pdf:out [-] 2 << /Title (Backslash-space, \ ) /A << /S /Go
To..."
** WARNING ** >> Reading special command stopped around >> << /Title (Backslash-
space, \ ) /A << /S /GoTo /D (\(SPACE)...<<
][12]......[162
** WARNING ** Unknown PDF object type.
** WARNING ** No destination not specified for pdf:dest.
** WARNING ** Interpreting special command dest (pdf:) failed.
** WARNING ** >> at page="162" position="(72, 206.93)" (in PDF)
** WARNING ** >> xxx "pdf:dest (\(SPACE)) [@thispage /XYZ @xpos @ypos null]"
** WARNING ** >> Reading special command stopped around >>) [@thispage /XYZ @xpo
s @ypos null]<<
][163]......[245]
851668 bytes written
と言われます (一部省略)(画像の挿入は pTeX 実行時にスキップしています)。
b) 以前どこからかダウンロードしてきた emacs-lisp-intro-jp.texi という古いファイルがあったので、これで試してみますと、
emacs-lisp-intro-jp.dvi -> emacs-lisp-intro-jp.pdf
[1][2][3][4][5][6][7][8][9][10
** WARNING ** Object @1 already defined.
][11
** WARNING ** Object @2 already defined.
][12
** WARNING ** Object @3 already defined.
][13
** WARNING ** Object @4 already defined.
][14
** WARNING ** Object @5 already defined.
][15
** WARNING ** Object @6 already defined.
][16]......[212
** WARNING ** Empty bookmark node!
** WARNING ** You have tried to jump more than 1 level.
** WARNING ** Empty bookmark node!
** WARNING ** You have tried to jump more than 1 level.
** WARNING ** Empty bookmark node!
** WARNING ** You have tried to jump more than 1 level.
]
887976 bytes written
と言われました (でも、リンクやしおりは付いています)。
このトピックを読む
(現在の返信数: 18)