\scaleboxの縦組時挙動に付いて

\scaleboxの縦組時挙動に付いて

- 村上 TomOne の投稿
返信数: 4
Vine Linux
texlive-2009-22vl6.i686
dvipdfmx-20090708

での動作です。

================================================
\documentclass[a5paper,10pt]{jsbook}

\usepackage{plext} % 縦書き拡張

\usepackage[dvips]{graphicx}
%\usepackage[dvipdfm]{graphicx}
%\usepackage[dvipdfmx]{graphicx}

\begin{document}

scalebox のテスト。

\noindent\null
□\scalebox{1}[-1]{あ}□1,-1
\\
□\scalebox{-1}[1]{あ}□-1,1

\vspace{1cm}

\begin{minipage}<t>{4.5cm}
\noindent\null
□\scalebox{1}[-1]{あ}□1,-1
\\
□\scalebox{-1}[1]{あ}□-1,1
\end{minipage}

\end{document}
================================================

として、挙動調査しました。

オプション dvips で xdvi表示
横組み \scalebox{1}[-1]{あ}:上下反転、文字はベースラインより下に
横組み \scalebox{-1}[1]{あ}:左右反転
縦組み \scalebox{1}[-1]{あ}:左右反転
縦組み \scalebox{-1}[1]{あ}:上下反転

オプション dvipdfm で dvipdfm で変換、Adobe Reader表示
横組み \scalebox{1}[-1]{あ}:上下反転、文字はベースラインより下に
横組み \scalebox{-1}[1]{あ}:左右反転
縦組み \scalebox{1}[-1]{あ}:左右反転
縦組み \scalebox{-1}[1]{あ}:上下反転

オプション dvipdfmx で dvipdfmx で変換、Adobe Reader表示
横組み \scalebox{1}[-1]{あ}:上下反転、文字はベースラインより下に
横組み \scalebox{-1}[1]{あ}:左右反転
縦組み \scalebox{1}[-1]{あ}:上下反転、1個上に
縦組み \scalebox{-1}[1]{あ}:左右反転、1個下に

と、dvipdfmxの縦組時のみ挙動が違います。
dvipdfm.def, dvipdfmx.def を一応覗いてみたんですが、
どこを直せば良いのか全く分かりません。

dvipdfmxだとhiresbbが使えると思ったら、こんな罠がありました。

村上 TomOne への返信

Re: \scaleboxの縦組時挙動に付いて

- Z. R. の投稿

極めて古い(dvipdfm-jpn 時代)情報ですが、
W32TeX の $TEXMF/doc/dvipdfm/base/jpatch-p1.pdf
の 1.3 節にこの類の話が書いてあります。(私の環境の Adobe Reader だと非埋込の Heisei~ フォントが MS P フォントで代替されて悲惨なことになってますが、肝心の例の表示は欧文なので問題ないはず。)

その内容(および実験・解析の結果)によると、要するに

pTeX の縦書きの場合は、PS/PDF の変形の縦と横を交換する必要がある

ということのようです。その節の末尾に

単純に dvipdfm 側で縦ディレクションのときには PostScript オペレータ‘scale’の解釈をかえるようにするだけでもよいかもしれないが、(中略)しばらく様子を見るつもりである。

とありますが、現在の dvipdfmx ではこの「scale の解釈を変える」対策が施されているようです。そして、graphics/x パッケージの dvipdfm ドライバでは現在の版でも PostScript special を用いているようなので正常(= dvips と同じ)に出力されます。対して dvipdfmx ドライバ は PDF 用 special を用いるように改良されているため、先述の対策が効かなくなっているのが「異常な出力に戻った」原因です。

dvipdfmx ドライバの出力を正常にするには、ドライバの方で、縦と横を交換するのが最も簡単(そのコードも前傾の資料にある)です。取りあえず LaTeX ユーザが使えるように「パッチするパッケージ」を作ってみました。

pLaTeX で dvipdfmx 指定の graphicx の後にこのパッケージを読み込むと正常になるはずです。

Z. R. への返信

Re: \scaleboxの縦組時挙動に付いて

- 村上 TomOne の投稿
ありがとうございます。助かりました。
こう言うマクロをさらりと書けるのは流石です。

検証中に気づいたんですが、\scaleboxは句読点を全角幅でなく半角幅で扱うんですね。
そして、\ajTsumesuji2 とかの動作がおかしいのもここら辺が関係するのかと思ったら、違うようです。
村上 TomOne への返信

Re: \scaleboxの縦組時挙動に付いて

- aminophen の投稿
本トピックで出ていた pxtatescale パッケージは,2013 年時点で gist に出たものだと,
本日 2017/01/22 にリリースされた新しい dvipdfmx.def にはうまくパッチが
あたらなくなっています。CTAN に上がっている pxtatescale 2017/01/21 v0.4 は,
この新しい dvipdfmx.def に対応済みです。
(なお,これは TeX Live にも 2017/01/22 時点で収録済です)
https://www.ctan.org/pkg/pxtatescale
aminophen への返信

Re: \scaleboxの縦組時挙動に付いて

- aminophen の投稿
…と書き込んだ直後ですが:
LaTeX Team の中のかたが dvipdfmx.def 本体にパッチを取り込んでくださいました

> 本日 2017/01/22 にリリースされた新しい dvipdfmx.def

のリリースから一日も経っていませんが、数日後にはさらに新しいものを出してくださる
そうなので、それ以降はそもそも pxtatescale 自体が不要になります。

# \iftdir の if-トークン の扱いが面倒でこちらからは送らなかったのですが、
# なんとあちらからオファーが来て取り込まれるとは。