-
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
\footnote の合印直後の改行 #16
Comments
安直ですが,後ろの \hbox の後に \penalty\z@ を置くのはどうでしょう? \renewcommand\@makefnmark{%
\ifydir \hbox{}\hbox{\@textsuperscript{\normalfont\@thefnmark}}\hbox{}\penalty\z@%
\else\hbox{\yoko\@textsuperscript{\normalfont\@thefnmark}}\fi} |
\penalty\z@ だと直後が句読点の場合(割とよく見かけます)がマズイですね。 4あああああああああああああああああああ\footnote[1]{いいいいい}。 |
@makefnmark ではなく,@footnotetext の最後に \null を加えるとうまくいってそうな感じがしますが……. %#!ptex2pdf -l footnote
\documentclass{jarticle}
\makeatletter
\long\def\@footnotetext#1{%
\ifydir\def\@tempa{\yoko}\else\def\@tempa{\tate}\fi
\insert\footins{\@tempa%
\reset@font\footnotesize
\interlinepenalty\interfootnotelinepenalty
\splittopskip\footnotesep
\splitmaxdepth \dp\strutbox \floatingpenalty \@MM
\hsize\columnwidth \@parboxrestore
\protected@edef\@currentlabel{%
\csname p@footnote\endcsname\@thefnmark
}%
\color@begingroup
\@makefntext{%
\rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
\color@endgroup}\null}
\textwidth20zw
\parindent0zw
\begin{document}
1あああああああああああああああああああ\par
4ああ\kern-.2zwあああああああああああああああああ\footnote[1]{いいいいい}.うううううううう\par
4ああ\kern.0zwあああああああああああああああああ\footnote[1]{いいいいい}.うううううううう\par
4ああ\kern.2zwあああああああああああああああああ\footnote[1]{いいいいい}.うううううううう\par
4ああ\kern.4zwあああああああああああああああああ\footnote[1]{いいいいい}.うううううううう\par
----------
4ああ\kern-.2zwあああああああああああああああああ\footnotemark[2].うううううううう\par
4ああ\kern.0zwあああああああああああああああああ\footnotemark[2].うううううううう\par
4ああ\kern.2zwあああああああああああああああああ\footnotemark[2].うううううううう\par
4ああ\kern.4zwあああああああああああああああああ\footnotemark[2].うううううううう\par
\end{document}
|
確かに (luatexja.sty は beamer の関係で #36362 で |
ここを外してしまうと 2ああ\kern.4zwあああああああああああああああああ\footnotemark[1]うううううううう\par のときに合印の後に変なアキが入ってしまいますね…ということは |
簡単な \documentclass{article} % 欧文 latex
\begin{document}
\tracingonline1 \showboxdepth \showboxbreadth10000
a\footnote{}b\showlists
\end{document} でノードを見てみると,
のように,\hbox(合印)→ \insert(脚注の中身)→ その後の内容,とノードが並びます. pTeX では,\hbox の直後に和文文字が来た場合,そこでの改行は許されますが, |
なお,\xkanjiskip の挿入処理については,\insert は単純に無視されるので,今のコミュニティ版のように \footnotemark, \footnote いずれの場合も合印を出力する @makefnmark でのみ対処すれば十分だと思います. (LuaTeX-ja では,\insert の直後に和文文字が来た場合にも(禁則ペナルティを考慮した上で)改行が可能なので,今回の問題には当たっていないようです.) |
理解したような気がします。ありがとうございます。(pTeX 難しいです) |
2008 年の(e- でない)pTeX とアスキー版 pLaTeX を調べてみても、やはり合印直後の改行が抑制されていました。これが 2013 年の \xkanjiskip の仕様変更で偶然にも(アキが入る同時に)改行可能になって、それがまたコミュニティ版 pLaTeX で元に戻った、ということのようです。今回の aminophen/footnotetext の exppl2e.sty に突っ込みました。しばらくテストしてみます。 |
すみません。はっきり書きます。 現行仕様合印前後のアキなし、合印前後の改行禁止 変更後の仕様案合印前後のアキなし、合印前の改行禁止、合印後の改行許可 変更後の仕様案を実現する方法
\long\def\@footnotetext#1{%
\ifydir\def\@tempa{\yoko}\else\def\@tempa{\tate}\fi
\insert\footins{\@tempa%
\reset@font\footnotesize
\interlinepenalty\interfootnotelinepenalty
\splittopskip\footnotesep
\splitmaxdepth \dp\strutbox \floatingpenalty \@MM
\hsize\columnwidth \@parboxrestore
\protected@edef\@currentlabel{%
\csname p@footnote\endcsname\@thefnmark
}%
\color@begingroup
\@makefntext{%
\rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
\color@endgroup}\null} |
変更後の仕様案の方向性に賛成します. 合印後の改行許可について,例外は想定していますか.あるいはJIS X 4051への準拠を想定していますか.上の議論では句読点が直後にある場合を考察しているようですが.
約物直後に\footnoteが置かれた場合に約物直後で改行されるようで,形式的に変更後の仕様案をみたしてはいないようです. \documentclass{jarticle}
\makeatletter
\long\def\@footnotetext#1{%
\ifydir\def\@tempa{\yoko}\else\def\@tempa{\tate}\fi
\insert\footins{\@tempa%
\reset@font\footnotesize
\interlinepenalty\interfootnotelinepenalty
\splittopskip\footnotesep
\splitmaxdepth \dp\strutbox \floatingpenalty \@MM
\hsize\columnwidth \@parboxrestore
\protected@edef\@currentlabel{%
\csname p@footnote\endcsname\@thefnmark
}%
\color@begingroup
\@makefntext{%
\rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
\color@endgroup}\null}
\makeatother
\textwidth20zw
\parindent0zw
\begin{document}
1あああああああああああああああああああ\par
2あああああああああああああああああああ)\footnote[1]{いいいいい}うううううううう\par
3あああああああああああああああああああ\footnote[1]{いいいいい}\\うううううううう
\end{document} どうすればよいかは直ぐには思いつきません. |
「あ」を1つ減らしてみると,閉じ括弧「)」と合印の間に半角空きが入りますね. また,開き括弧類の直後に \footnotetext をおいた場合,その括弧の直後で
\lastpenalty を使う案を考えつきましたが,朝になってから提示することにします. |
私が書いた「現行仕様=合印前後のアキなし、合印前後の改行禁止」が、合印前について事実誤認であったようです。もう一度整理しなおします。 現行仕様(というか、現行挙動の調査状況)合印前後のアキなし(ただし合印直前については、終わり括弧類・句点類の場合は半角アキ、中点類の場合は四分アキ)、合印前後の改行禁止(ただし合印直前については、終わり括弧類・句点類・中点類の場合は可) 変更後の仕様案(理想?)合印前後のアキなし(合印直前の文字と合印の間はベタ組、ただし中点類の場合は四分アキ?← JIS X 4051)、合印前の改行禁止(完全)、合印後の改行許可(ただし終わり括弧類・句点類・中点類の場合は不可) 追記:上のまとめでは合印後のアキの例外について触れ忘れていました。合印直後が始め括弧類や中点類の場合は、それぞれ現行では半角アキ、四分アキになっています。これは新仕様でも現状維持がよいと思います。また、「合印前」と「合印後」にわけてみてみると、「合印後」については既出の |
h-kitagawa/platex@f5c907b で入れてみました.
\footnotetext では,直前にペナルティがあった場合は,そのペナルティを \footnotetext の直後に移動させています.そのため,\footnotetext がない場合に改行が不可能な箇所では,\footnotetext ありでも改行は不可能なはずです. |
ありがとうございます。確かめてみましたが、仕様どおりの実装になっているとおもいます。 |
1. \footnote と \footnotemarkjsclasses では独自に『和文の句読点・閉じかっこ類の直後で用いた際に余分なアキが入るのを防ぐため,\inhibitglue を入れることにします。』というコードが入っています。 \let\footnotes@ve=\footnote
\def\footnote{\inhibitglue\footnotes@ve}
\let\footnotemarks@ve=\footnotemark
\def\footnotemark{\inhibitglue\footnotemarks@ve} これとの兼ね合いをどうしましょうか。一つの案として、jsclasses 側に \@ifl@t@r\pfmtversion{2016/XX/XX}{yes}{no} を使用して「no の場合にだけ jsclasses がパッチするようにする(yes の場合は新しくなった pLaTeX に一任する)」というのが考えられます。 2. @footnotetextjsclasses では独自に「脚注で \verb が使えるように改変」というのが入っています。今回「合印直後での改行を許容」の \null を入れようとしているのも、ここと重なってしまいます。そこで、pLaTeX 本体にも「脚注で \verb が使えるように改変」のコードを入れてしまって、jsclasses 側ではやはり 3. @makefnmarkこれは本件と若干ずれていますが、 texjporg/jsclasses#1 の件で出た |
すぐ上に「実装は問題なさそう」と書いてしまったのですが、今度は exppl2e.sty のコード自体の問題点を見つけてしまいました。 \RequirePackage{exppl2e}
\documentclass[twocolumn]{jarticle}
%%%%% なんらかのパッケージが \footnote の定義を
%%%%% 書き換えた状況を想定:
\makeatletter
\def\footnote{%\inhibitglue\pltx@foot@penalty\z@
\@ifnextchar[\@xfootnote{\stepcounter\@mpfn
\protected@xdef\@thefnmark{\thempfn}%
\@footnotemark\@footnotetext}}
\makeatother
%%%%% これでは \pltx@foot@penalty\z@ を実行しない。
\textwidth42zw
\columnsep2zw
\parindent0zw
\makeatletter
\def\PENALTYINFO{\the\pltx@foot@penalty}
\makeatother
\begin{document}
最初は0で初期化:\PENALTYINFO
ああああああああああああああああああああ(\footnotetext[1]{いいいいい}うううううううう\par
これは10000になるはず:\PENALTYINFO
ああああああああああああああああああああ\footnote{いいいいい}うううううううう\par
これは0でないといけない:\PENALTYINFO
\end{document} 最後の \footnote で不必要に改行が禁止されてしまっています。 |
aminophen/platex@f6521d0 で「 追記:
|
\documentclass{article}
\begin{document}
\section[Support for Korean]{Support for Korean\footnotemark}\label{support_korean}
\footnotetext{Written by Karnes Kim and Kihwang Lee}
\end{document}
\footnotetext の定義に \leavevmode を追加すればエラーは起こらなくなるわけですが、入れることによる問題が起きないのかどうかがまたよくわかっていません。 |
\ifhmode\pltx@foot@penalty\lastpenalty\unpenalty\fi と水平モード時のみに |
よさそうなので merge しました。uplatex も platex に sync してあります。ありがとうございました。 |
ptex-texmf#2 の「脚注番号前後のアキ」の続き(?)です。
脚注番号の合印について
でした。これについて、合印の前は「\null を置いて \xkanjiskip 禁止」が妥当である一方、後について疑問を呈する指摘をみかけました。たしかに、後に \null を置いたことで行分割が禁止されていることがわかります(platexrelease のエミュレートで違いを確認できます)。
The text was updated successfully, but these errors were encountered: