-
Notifications
You must be signed in to change notification settings - Fork 13
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
\@ の互換性 #62
Comments
この互換性は私も気になっていて,以前こんなことを考えたことがありました。 例えば pp. 46--48 のような列では,既定では pp. の後の空白が文末空白として扱われてしまいます。普通の LaTeX の定義であれば 実はこれを妨げるために \documentclass{article}
\begin{document}
% pp. の後は文末空白として扱われてしまう
See the next few pages (pp. 44--46).
% pp. の後を単語間空白にしたい
See the next few pages (pp.\@ 44--46).
\end{document} のように機能させることができます。source2e.pdf を見る限りこのような使い方は想定外でしょうけど,実用上はこれが便利なので,実際に使っている人がいそうだ,と勝手に思っていました。(もちろん jsclasses では 1000 ではなく 3000 にしてあるため,このような使い方は封じられている。)パッケージ等でそのような使い方をしているケースは知りません。 |
「 |
ちなみに、「防御的な \chardef\bxjs@periodchar=`\.
-\bxjs@protected\def\bxjs@SE{\spacefactor\sfcode\bxjs@periodchar}
+\bxjs@protected\def\bxjs@SE{%
+ \ifnum\spacefactor<\m@ \spacefactor\m@
+ \else \spacefactor\sfcode\bxjs@periodchar
+ \fi}
\def\@{\bxjs@SE{}} ※この対策をする場合、 先述の「目的外の |
探してみると に付いている回答は,本当に の回答者は,目的外の用法が回答に登場することについてよく思っていないようですが。 |
jsclasses では
\@
の仕様を次のように変更しています:TV.\@␣
のように書く。これだと’V’と’.’の間のカーニングが生きる。TV\@.␣
と書いてもよい。これだとカーニングは(従来通り)無効。これに応じて実装を次のように変更しています:
この実装だと
\@
の直後に空白トークンが続いた場合の出力が(当然)標準の場合と異なることになります。恐らく「ユーザ(文書作成者)は絶対にこんな列は書かない」ので問題が無いと判断されたのでしょう。しかし実際には「特殊な単語やロゴを出力する命令」の実装において、その単語が英大文字で終わる場合に、防御的に
\@
を入れるという使い方が行われています。従って、実際には(出力レベルで)「
\@
の直後に空白トークン」は起こりえて、実際に標準の場合と異なる出力になります。The text was updated successfully, but these errors were encountered: