Re: マクロでの行頭・行末判定方法

名前: ZR
日時: 2011-01-09 15:41:03
IPアドレス: 119.104.58.*

>>55531 >>55535 少しまじめに考えてみましたが、行頭・行中・行末の 3 パターンを 切り替える処理を \discretionary でやろうとすると、どうしても \discretionary をネストさせる必要があり、それは許されていない ので直接 \discretionary で処理するのは無理のようです。 # LuaTeX は \discretionary をネスト可能にすることを画策して # いるらしいが…。 これが、例えば「行頭とそれ以外」のように 2 パターンであれば 下に示したように \discretionary で対応できるのですが。 それならば、丁度 \mathchoice での類似の方法と同じように、 \discretionary の判定結果をファイルに遅延書き込みさせて、 2 パスで処理させることはできないかと試しましたが、これも \discretionary の中身には whatsit (遅延書き込みもこれの 一種です)を入れられないという仕様のため不可能でした。 「一度組みあがった段落を再解析する」という方法は、ルビの ような「どこにでも現れうる」ものについて適用すると、 「外側の処理」がかなり面倒になる気がします。 # 「切替付ルビを使う場合は一段落ごとに xxxxx 環境に入れて # ください」等の不便な仕様にしない場合。 何か、もっといい方法がないんでしょうか……。もし pTeX で 無理なら e-pTeX 限定でもよいとして。 #------------------------------- 2 パターンで切替をする例。 # これが「ありえないエラー」にならないのは、多分、 # あらかじめ組んであるボックスを入れているためだと思う。 %<sample.tex>----------- \documentclass[a4paper,10pt]{jsarticle} \setlength{\textwidth}{12zw} \def\fontRuby{\tiny} \def\makePattern#1#2{% \hbox to 0pt{\raise.94zw\hbox{\fontRuby ちゆうちよ}\hss}% \kern#1zw\hbox{躊躇}\kern#2zw% \relax} \newbox\boxBeginPattern \setbox\boxBeginPattern\hbox{\makePattern{0}{0.5}} \newbox\boxInnerPattern \setbox\boxInnerPattern\hbox{\makePattern{0.25}{0.25}} \newbox\boxEndPattern \setbox\boxEndPattern\hbox{\makePattern{0.5}{0}} \begin{document} \setlength{\parindent}{0zw} % 行頭・行中・行末の出力形 |\copy\boxBeginPattern |\copy\boxInnerPattern |\copy\boxEndPattern| % 行頭形と行中形だけ切り替える \def\躊躇{% \nobreak \discretionary{}{\unhcopy\boxBeginPattern}{\unhcopy\boxInnerPattern}% \penalty0\relax} \exhyphenpenalty=0 我々は \躊躇 したり\躊躇 しなかったり \躊躇 したり\躊躇 しなかったり \躊躇 したり\躊躇 しなかったり \躊躇 したり\躊躇 しなかったり \躊躇 したり\躊躇 しなかったり \躊躇 したり\躊躇 しなかったり \躊躇 したり\躊躇 しなかったり \躊躇 したり\躊躇 しなかったり した。 \end{document} %<EOF>------------------

この書き込みへの返事:

お名前
題名 
メッセージ(タグは <a href="...">...</a> だけ使えます。適宜改行を入れてください)