-
Notifications
You must be signed in to change notification settings - Fork 9
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
強制改行と \par で Underfull 警告が出ない(← platex と pdflatex でハイフネーションが変わる) #27
Comments
あれ,うちではどちらもハイフネーション起こりません。pdflatex 32966バイト,platex 4379バイト。 |
バイト数だとよくわからない(両方とも symlink のはず)なので、platex --version などをもらえますか? うちの win32 と北川さんの linux で再現していて、platex では foot-note の分割が一箇所減ります。 |
PDFのバイト数はバージョンを示すためではなく,ずいぶん違うサイズになるという意味でした。 |
tests/hyphtest0.tex でログに結果が出るようにしました. pdflatex で実行すると
と discretionary が入りますが,platex では入りません. |
plcore.ltx では \def\@gnewline #1{%
\ifvmode
\@nolnerr
\else
\unskip \reserved@e {\reserved@f#1}\nobreak \hfil \break \null
\ignorespaces
\fi} と @gnewline を再定義しており,最後に \null を追加しています. これをなくす(LaTeX でのオリジナルの定義に戻す)と解決しますが,plcore.dtx にある通り, よくわかりませんが, \def\@gnewline #1{%
\ifvmode
\@nolnerr
\else
\unskip \reserved@e {\reserved@f#1}\nobreak \hfil \break \break
\ignorespaces
\fi} と \null の代わりにもう一度 \break を入れると両方ともうまく動いているようです. |
これについてはすみません、北川さんに例示したときとココに書き込んだソースが違っていました(ので今追記しました)。\hyphenpenalty=0 を設定してコンパイルすると再現するはずです。
ああこれは生成した pdf のサイズだったのですね。てっきり実行ファイルか何かのサイズかと… pdf のサイズは dvipdfmx と pdftex で結構違いますからそういうものでしょうね。 |
\hyphenpenalty=0 でMacでも再現しました。なるほどplcoreがらみの話だったんですね。PDFのサイズがpdflatexで肥大しているのでmicrotypographyがenableされてしまったのかと思いましたが,これはむしろdvipdfmxの最適化(おかげで行末が揃わないことがある,Windowsの游とか)のおかげなのでしょうか。 |
c778a48 で exppl2e.sty に入れました.
dvipdfmx では Type1 フォントを CFF に変換していますが,pdfTeX(, LuaTeX) ではそのような処理をしていないことによると思われます. |
2ヶ月前に発見していたのですが、pTeX / e-pTeX バイナリ由来なのか plcore 絡みなのか、はたまたフォーマット作成時に読まれるハイフネーションパターンファイルの違い由来なのかが区別できず、報告を怠っていました。今回北川さんのご尽力で TeX Live 2016 の期間中の pLaTeX カーネルの変更は、基本的には次回(今月末?)を最後にしようと思っています。今回のハイフネーションのような古いバグの fix は、TeX Live 2017 pretest までカーネルには入れません。今月末のリリースでは、100% 副作用がなさそうな #3 の FAM256 だけカーネルにインストールし、 |
それが原因ですか。ありがとうございます。 |
例の \RequirePackage{exppl2e}
\documentclass{article}
\begin{document}
XXX\\XXX\par
\end{document} 新しい定義だと、おかしな空行が入って
が出てきます。(発見のきっかけは LaTeX2e の tl2e2.lvt より) |
確認しました.
XXX\\XXX\par
XXX\\\\XXX\par
あいう\\!かきく\par
あいう\\\\!かきく\par
a footnote\\ はうまくいっているみたいです. 2016-11-07 20:51追記: |
なるほど \def\@gnewline #1{%
\ifvmode
\@nolnerr
\else
\unskip \reserved@e {\reserved@f#1}\nobreak \hfil \break \nobreak
\ignorespaces
\fi} を試すとたしかにうまくいってそうです…が、まだよくわかってないので不安です。
これは厄介ですね… 実際問題として \hyphenpenalty=0 とでもしないと組版上で露呈しないようなら、諦めて \null が入ったアスキーの定義を「仕様」と定めるのも手だと思います。 LuaTeX は TeX82 とハイフネーション規則が異なるというのも、私は全く把握していませんでした。また、 |
さっぱりわかりませんが \def\@gnewline #1{%
\ifvmode
\@nolnerr
\else
\unskip \reserved@e {\reserved@f#1}\nobreak \hfil \break \space
\ignorespaces
\fi} という定義を試してみると、これはハイフネーションできるようです。 さらに、これはどうやら現行の jsclasses にある定義 \def\@gnewline #1{%
\ifvmode
\@nolnerr
\else
\unskip \reserved@e {\reserved@f#1}\nobreak \hfil \break \null
\inhibitglue \ignorespaces
\fi} の \inhibitglue 発行と同様の JFM グルーを消す結果になっているようにも見えます。 まだ以下のソースでしか試していませんので怪しいですが。 \documentclass{article}
\hyphenpenalty=0
\begin{document}
ABC\footnote{footnote footnote footnote footnote
footnote footnote footnote footnote
footnote footnote footnote footnote\\\begin{enumerate}\item TEST\end{enumerate}}
あいう\\!かきく
\end{document} |
どうやらこの issue は、「ハイフネーションが変わる」ことではなく「LaTeX で空行を入れた場合の挙動」が本質だったようです。 以下のソースを考えます。 \documentclass{article}
\begin{document}
a test\\
b test
\end{document} latex で処理すると
が出ますが、platex では出なくなります。 このようなソースの書き方は、本来 LaTeX では好ましくないとされるもの(TeX.SX のこの回答の下の議論などを参照)でしょうから、Underfull 警告が出るのが期待される挙動だと思われます。latex で Underfull 警告が出て platex で出ない理由は、ZR さんが説明してくださっています。
「ハイフネーションが変わる」という現象は Underfull 警告をトリガとしていて、latex の場合だけ分綴の可能性を考慮した行分割を試そうとするからのようです。platex の場合は Underfull 警告が出ないので、2パス目にあたる分綴を加味した demerit の最小化ルーチンに渡ることなく、1パス目の行分割ルーチンがそのまま採用されるので、結果的に \discretionary が出なくなると理解できます。
一方、jsclasses のほうは JFM グルーを消したいという明確な意図があるので、そちらは「Underfull 警告の復活」も可能であると思われます。 |
texconf16 の懇親会の雑談で出した話題です:
このハイフネーションが、platex と pdflatex で異なります。
The text was updated successfully, but these errors were encountered: