Hatena::ブログ(Diary)

アセトアミノフェンの気ままな日常

2016-10-21

marginnote パッケージが pLaTeX でアレな話(続き)

前回「ひとまず \chardef\pdfoutput=1TeX ファイル冒頭に書いておくと正常になる」と書いたが、こうしたバッドノウハウではなく「パッケージ側に e-pTeX をサポートしてもらう」ということにすれば

--- marginnote.sty.1~	Sun Jun 12 08:18:53 2016
+++ marginnote.sty	Fri Oct 21 07:20:59 2016
@@ -121,7 +121,12 @@
       \begingroup\expandafter\expandafter\expandafter\endgroup
       \expandafter\ifx\csname pdfoutput\endcsname\relax % bg 3
         \begingroup\expandafter\expandafter\expandafter\endgroup
-        \expandafter\ifx\csname XeTeXrevision\endcsname\relax\else % bg 4
+        \expandafter\ifx\csname XeTeXrevision\endcsname\relax % bg 4
+          \begingroup\expandafter\expandafter\expandafter\endgroup
+          \expandafter\ifx\csname epTeXinputencoding\endcsname\relax\else % bg 5
+            \@mn@pdfmodetrue
+          \fi % ed 5
+        \else % or 4
           \@mn@pdfmodetrue
         \fi % ed 4
       \else % or 3

で横書きは大丈夫になる。しかし、縦書きはやはり駄目である。2パス処理でダメになることを根拠に aux ファイルの中身を覗いてみると

[1] pdflatex/lualatex

\newmarginnote{note.1.1}{{1}{7030046sp}}
\newmarginnote{note.1.2}{{1}{7030046sp}}

[2] platex(上記のパッチなし)

\newmarginnote{note.1.1}{{1}{}}
\newmarginnote{note.1.2}{{1}{}}

[3] platex(上記のパッチあり)横書き (book)

\newmarginnote{note.1.1}{{1}{7030046sp}}
\newmarginnote{note.1.2}{{1}{7030046sp}}

[4] platex(上記のパッチあり)縦書き (tbook)

\newmarginnote{note.1.1}{{1}{34700926sp}}
\newmarginnote{note.1.2}{{1}{32472702sp}}

[5] lualatex 縦書き (ltjtbook)

\newmarginnote{note.1.1}{{1}{5915934sp}}
\newmarginnote{note.1.2}{{1}{5915934sp}}

LuaTeX-ja 縦組では正常っぽくなった。eptexdoc.pdf をみると

\pdflastxpos, \pdflastypos
\pdfsavepos が置かれた場所の,dvi における出力位置を返す内部整数(読み取り専用).原点は紙の(物理的な意味の)左下隅であり,y 軸は(物理的な)上方向に向かって増加する.
pTeX では横組・縦組と組方向が複数あるので,\pdflastxpos, \pdflastypos の値の座標系を「物理的な」向きとすべきか,それとも「組方向に応じた」向きとすべきかは悩みどころである.110227 版以降,現在までの版では上記のように物理的な向きとしている.

とあるが、もしかして marginnote の計算と合致していないのだろうか? いずれにせよ pLaTeX の縦書きはヤヤコシイ…

そもそも marginnote パッケージもアレ

現在の marginnote の実装だと「素の e-TeX」すら自分でつぶしてダメにしている気がする。パッケージ作者の意図としては

  • e-TeX なしだとエラー
  • (素の)e-TeX ありなら動作して手動調節機能が使える状態
  • pdfTeX/XeTeX/LuaTeX のように \(pdf)savepos が使える場合は自動調節

ということのように見える。ところが、この「素の e-TeX」の場合には手動調節機能が使えるようになってほしいはずなのに:

Package marginnote Info: xpos not known,
(marginnote)             using \marginnoterightadjust on input line 8.

これが出てほしいのに、代わりに

Package marginnote Info: xpos seems to be 0.0pt,
(marginnote)             \marginnoterightadjust ignored on input line 7.

これが出て注の位置が吹っ飛んでしまっているっぽい。「位置を取得していないはずなのに 0.0pt が湧いてくる」という現象がまずいのは明らかなので、これを直すには

--- marginnote.sty.1~	Sun Jun 12 08:18:53 2016
+++ marginnote.sty	Fri Oct 21 09:01:37 2016
@@ -212,7 +212,9 @@
     \edef\@mn@currpage{\csname
       mn@note.\@mn@thispage.\@mn@atthispage\endcsname}%
     \edef\@mn@currxpos{\expandafter\@secondoftwo\@mn@currpage}%
-    \edef\@mn@currxpos{\the\dimexpr \@mn@currxpos -\hoffset\relax}%
+    \ifx\@mn@currxpos\@empty\else %%% !!!
+      \edef\@mn@currxpos{\the\dimexpr \@mn@currxpos -\hoffset\relax}%
+    \fi                           %%% !!!
     \begingroup\expandafter\expandafter\expandafter\endgroup
     \expandafter\ifx\csname pdfhorigin\endcsname\relax\else
       \begingroup\expandafter\expandafter\expandafter\endgroup

でよさそう。

…アレ、こうすると(最初のパッチのように e-pTeX サポートを入れてもらわなくても)pLaTeX 縦書きでも(だいたい)正常になるぞ!*1

→ 2016-10-21 18:16 パッチ(すぐ上に書いてある「そもそも素の e-TeX でダメ」なところに書いたもの)を作者に送ったところ、早速 CTAN に修正版をアップロードしたと返信が来ました。ありがとうございます!

(とはいえ、せっかく「\pdfsavepos などのプリミティブが e-pTeX で使える」のに、その機能を相変わらず marginnote が活用しないままなのはあまり嬉しくないかもしれない。単純に活用したら上記のように縦組でおかしくなるわけだから、「e-pTeX 向けにはどうコードを書くのが望ましいか」というのも考えておいたほうが良いのかもしれない。)

*1:ただし、marginnote v1.1 のときと比べて、縦組の場合の marginnote の配置が微妙に違う。まあ許容範囲とみなすこともできる?

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証