Re: 水平方向スペース直前位置での改行

名前: ZR
日時: 2011-05-28 01:58:06
IPアドレス: 119.104.58.*

>>55955 >みなもさんのご提案である >>「単語間空白」を必要なところに挿入します。 >というのも検討しましたが,前の空白が単語間空白に固定されてしまい,大きさを調整できないので断念しました。 もし、 「空き(と行分割点)が欲しい場合に空白文字を入れる」ことは 我慢するが、空白の量は望むものにしたい ということであれば、 前にグルーがあるかを調べて、もしあれば、それを 「望みの量のグルー」で置き換える という方法が考えられます。つまり、 ・空きと行分割点が必要なら「 \sub...」と書く ・空きと行分割点が不要なら「\sub...」と書く という「約束」にするということです。 # ただこれは「別の命令名を用意する」のとあまり変わらない # ような気がするが。 \documentclass{jsarticle} \parindent0zw \def\sub#1#2{\preSub\lower.5em\hbox{#1}\nobreak\underline{#2}} \def\preSub{\leavevmode % 直前のグルーが正ならそれを除去して改めてグルーを入れる \ifdim\lastskip>0pt \unskip\hskip.2em\relax \fi} % ↓ページのボックスの中身をログに吐きます \showboxdepth=100 \showboxbreadth=100 \tracingoutput=1 \begin{document} 私は \sub{(1)}{ほげほげです}。 % 空白文字あり But ``\sub{(1)}{ほげほげです}'' そして“\sub{(1)}{ほげほげです}” \end{document} ところで、空白の入る条件と量が、何となく和欧文間空白と 似ている気がします。 もし、「\lower の前だが和欧文間空白を入れたい」ということで あれば、\lower の前に「ゼロ幅不可視の欧文文字」を入れる というトリックで実現できます。 \documentclass{jsarticle} \parindent0zw \def\sub#1#2{\preSub\lower.5em\hbox{#1}\nobreak\underline{#2}} % ec-lmr10(T1-encoding)の 23 番は compwordmark \font\eclmr=ec-lmr10 \def\preSub{{\eclmr\char23}} % 23 番の欧文文字の前後の和欧文間空白を有効にする % OT1 の 23 番はアクセント用文字だから問題ないはず \xspcode23=3 \showboxdepth=100 \showboxbreadth=100 \tracingoutput=1 \begin{document} % 和欧文間空白が入る、禁則でないので行分割可能 私は\sub{(1)}{ほげほげです}。 % 空白文字なし % 欧文同士だから空白も行分割点もなし But ``\sub{(1)}{ほげほげです}'' % pTeX の処理に従い、空白なし、行分割なし そして“\sub{(1)}{ほげほげです}” \end{document}

この書き込みへの返事:

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