Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

\text... の \xkanjiskip 対策は必要か? #51

Closed
aminophen opened this issue Aug 19, 2017 · 9 comments
Closed

\text... の \xkanjiskip 対策は必要か? #51

aminophen opened this issue Aug 19, 2017 · 9 comments

Comments

@aminophen
Copy link
Member

pLaTeX カーネルには \check@nocorr@ が再定義されています。\xkanjiskip が入らない問題に対策するためらしいのですが,簡単なテストでは LaTeX のコードそのままでも問題なく見えます。

\documentclass{article}

\makeatletter
\def \check@nocorr@ #1#2\nocorr#3\@nil {%
  \let \check@icl \maybe@ic
  \def \check@icr {\ifvmode \else \aftergroup \maybe@ic \fi}%
  \def \reserved@a {\nocorr}%
  \def \reserved@b {#1}%
  \def \reserved@c {#3}%
  \ifx \reserved@a \reserved@b
    \ifx \reserved@c \@empty
      \let \check@icl \@empty
    \else
      \let \check@icl \@empty
      \let \check@icr \@empty
    \fi
  \else
    \ifx \reserved@c \@empty
    \else
      \let \check@icr \@empty
    \fi
  \fi
}
\makeatother

\begin{document}
\xkanjiskip10pt
あ\texttt{abc}い
\end{document}

pTeX の挙動が変わったのでしょうか? もしもう不要なのであれば,LaTeX との差分をなくすため修正を外してしまいたいと考えています。

@h-kitagawa
Copy link
Member

h-kitagawa commented Aug 19, 2017

aminophen さんによる上記のサンプルを試してみました.

  • pTeX-p3.1.10 (+ teTeX-3.0) や pTeX-p3.1.11 (+ TeX Live 2009) では xkanjiskip は入らなかった
  • TeX Live 2011 収録の pTeX-p3.2 では xkanjiskip が入った

この間に pTeX 本体に「xkanjiskip 挿入時にはイタリック補正を無視する」補正が入ったのだと思いますが,ちょっと記憶にないので探してみます.

@h-kitagawa
Copy link
Member

h-kitagawa commented Aug 19, 2017

私は LaTeX 本来の定義に戻して構わないと考えています.

2010-12-31 の ptex-base.ch の修正コミット をみると,それより前の pTeX では次のようになっていたようです(\/ はイタリック補正).

  1. 「欧文文字 → \/」の場合には \/ を無視する(つまり,後に \xkanjiskip 挿入可能)
  2. 「和文文字 → \/」の場合にはこの後に \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@

@aminophen
Copy link
Member Author

いつ頃の変更なのか追跡できていなかったのですが,2010 年,p3.2 とのヒントでさがしてみると

https://oku.edu.mie-u.ac.jp/~okumura/texfaq/qa/55068.html

からの「\textbfと直後の欧文とのアキ」がヒットしました。

「入るべきイタリック補正が入らない」のは確かなので,pTeX が修正されたいまは pLaTeX 側の workaround は外すほうがよさそうですね。例の qa も参考にテストケースを作ってみましょう。

@aminophen aminophen added bug and removed question labels Aug 19, 2017
@aminophen
Copy link
Member Author

556520f で exppl2e.sty に本家 LaTeX のコードを持ってきました。

qa から適当に拾ってきたテストケースも足して tests/icorr_xkanjiskip.tex を置いています。私の追加分は \showbox とかは使っていないですがとりあえず。

@kbhonda
Copy link

kbhonda commented Aug 22, 2017

この件ですが,北川さんの追跡の通りだと思います.

もともと\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が適用されたという流れでした.

@aminophen
Copy link
Member Author

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 をご覧いただくとわかりますが,そこでは

  • 「スタンダード版 \textmc/\textgt」の定義に \DeclareTextFontCommand を使用 ← (★)
  • あ)\textgt{(い} の JFM グルーの縮退を正常に扱える「改良版 \textmc/\textgt」の定義に \fixjfmspacing を入れた独自のものを使用

とあるので,もし仮に (★) で問題が起きるのであれば Yue ZHANG さんに伝えた方が良いと思うのです。どなたかわかる方いらっしゃいますか?

@zr-tex8r
Copy link

それでもなお \textmc と \textgt を簡略化しなければならない理由は何でしょうか?

この簡略化が2010年以前に必要だったのは確かでしょう。

古い pTeX については pLaTeX カーネル内(=今回の #51 で削除した jnic.sty 由来コード)で

古いpLaTeXでの修正は「右側のイタリック補正は残している」ので、「\textXX{和文}直後でxkanjiskipが消える」問題は残っていたわけです(それを対処したい、というのがqa:55068の話題)。なので、「中がほぼ確実に和文である」\textmc\textgtでは右側イタリック補正は不要なので、これを外してxkanjiskipを活かす、という処置が妥当だったでしょう。

2010年以降のpTeXしか考えないのであれば、恐らくこの処置も不要でしょう。

@aminophen
Copy link
Member Author

コメントありがとうございます。jsclasses は「古い TeX 環境でクラスだけ新しいものを使う」可能性がないとは言えないので,処置は残したほうがいいのでしょうね。pLaTeX のほうは安心して削除することにします。

@aminophen
Copy link
Member Author

次のリリースへ向けて,カーネルからも \check@nocorr@ 修正を削除しました。ひとまず完了とします。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants