Closed aminophen closed 6 years ago
aminophen さんによる上記のサンプルを試してみました.
この間に pTeX 本体に「xkanjiskip 挿入時にはイタリック補正を無視する」補正が入ったのだと思いますが,ちょっと記憶にないので探してみます.
私は LaTeX 本来の定義に戻して構わないと考えています.
2010-12-31 の ptex-base.ch の修正コミット をみると,それより前の pTeX では次のようになっていたようです(\/
はイタリック補正).
\/
」の場合には \/
を無視する(つまり,後に \xkanjiskip
挿入可能)\/
」の場合にはこの後に \xkanjiskip
は挿入できない前段落で述べたコミットは,もともとはアクセント付き文字についての \xkanjiskip
挿入の修正でしたが,副作用として次のように仕様変更されています.
\xkanjiskip
挿入に関しては,いかなる場合も \/
を無視するさて,今問題になっている pLaTeX カーネルの \check@nocorr@
修正は 2. に対応するものだと推測されます.ただ,これは「左への \/
挿入」を無効化しているので,以下のソースで LaTeX と pLaTeX の間に差異が発生しています(pLaTeX では f と a の間の \/
が入らない):
\documentclass{article}
\begin{document}
\setbox0=\hbox{\textit{f\textup{af}b}}
\showboxdepth10000
\showboxbreadth10000
\tracingonline1
\showbox0
\end{document}
(修正:\check@nocorr
→\check@nocorr@
)
いつ頃の変更なのか追跡できていなかったのですが,2010 年,p3.2 とのヒントでさがしてみると
https://oku.edu.mie-u.ac.jp/~okumura/texfaq/qa/55068.html
からの「\textbfと直後の欧文とのアキ」がヒットしました。
「入るべきイタリック補正が入らない」のは確かなので,pTeX が修正されたいまは pLaTeX 側の workaround は外すほうがよさそうですね。例の qa も参考にテストケースを作ってみましょう。
556520f で exppl2e.sty に本家 LaTeX のコードを持ってきました。
qa から適当に拾ってきたテストケースも足して tests/icorr_xkanjiskip.tex を置いています。私の追加分は \showbox とかは使っていないですがとりあえず。
この件ですが,北川さんの追跡の通りだと思います.
もともと\textXXとitalic correctionに問題があって \xkanjiskip vs icみたいな議論がありました. 乙部さんの指摘から始まったpTeX MLとかでの話です (乙部さんによるjnic.sty(Japanese No Italic Correction style)が pLaTeX2eに取り込まれたのでした). icより\xkanjiskipだよねーみたいな流れでした.
そのあと,pTeX MLとかQ&Aで アクセント付き文字で\xkanjiskipが消える話, AAA\textXX{和文}BBBで\xkanjiskipが入る・入らない話(qa55068)を 指摘して,ともに北川さんが作られたpatchが適用されたという流れでした.
texjporg/jsclasses#37, texjporg/jsclasses#59 の話題で:
jsclasses では \textmc と \textgt が \DeclareTextFontCommand を使わずに,単純な(=イタリック補正を削除して)定義に変更されています。その説明に
次のコマンドはイタリック補正なども含めて定義されていますが,和文ではイタリック補正はあまり役に立たず,欧文・和文間のグルーが入らないという副作用もありますので,単純な定義に直します。 [2016-08-26] 和欧文間の\xkanjiskip が入らない問題は,plfonts.dtx v1.3i (2000/07/13) の時点で修正されていました。逆に,amsmath パッケージを読み込んだ場合に,数式内の添字で文字サイズが変化するようになるはずのところが,変わらなくなっていましたので,修正しました。
とあります。ここでいう「副作用」つまり「イタリック補正と和欧文間グルーの衝突」は
完全に対処されていると思われます。それでもなお \textmc と \textgt を簡略化しなければならない理由は何でしょうか?
というのも,fixjfm.sty をご覧いただくとわかりますが,そこでは
あ)\textgt{(い}
の JFM グルーの縮退を正常に扱える「改良版 \textmc/\textgt」の定義に \fixjfmspacing を入れた独自のものを使用とあるので,もし仮に (★) で問題が起きるのであれば Yue ZHANG さんに伝えた方が良いと思うのです。どなたかわかる方いらっしゃいますか?
それでもなお \textmc と \textgt を簡略化しなければならない理由は何でしょうか?
この簡略化が2010年以前に必要だったのは確かでしょう。
古い pTeX については pLaTeX カーネル内(=今回の #51 で削除した jnic.sty 由来コード)で
古いpLaTeXでの修正は「右側のイタリック補正は残している」ので、「\textXX{和文}
直後でxkanjiskipが消える」問題は残っていたわけです(それを対処したい、というのがqa:55068の話題)。なので、「中がほぼ確実に和文である」\textmc
と\textgt
では右側イタリック補正は不要なので、これを外してxkanjiskipを活かす、という処置が妥当だったでしょう。
2010年以降のpTeXしか考えないのであれば、恐らくこの処置も不要でしょう。
コメントありがとうございます。jsclasses は「古い TeX 環境でクラスだけ新しいものを使う」可能性がないとは言えないので,処置は残したほうがいいのでしょうね。pLaTeX のほうは安心して削除することにします。
次のリリースへ向けて,カーネルからも \check@nocorr@
修正を削除しました。ひとまず完了とします。
pLaTeX カーネルには
\check@nocorr@
が再定義されています。\xkanjiskip が入らない問題に対策するためらしいのですが,簡単なテストでは LaTeX のコードそのままでも問題なく見えます。pTeX の挙動が変わったのでしょうか? もしもう不要なのであれば,LaTeX との差分をなくすため修正を外してしまいたいと考えています。