Re: 段落解体ゼミ

名前: 北見 けん
日時: 2001-11-13 15:19:57
IPアドレス: 202.25.71.*

>>3661 いろいろうまくいかなかったようです。 リンクが辿りにくくなっているので、 そのまま走るソースを、長いですが、つけておきます。 >1. >>>これ、ちょっと確認できませんでした。サンプルありますか? >日本語表示だと行末が揃うのでしょうか. >以下のようなものだと私の環境では飛び出します. > >\documentclass[a4j]{jarticle} >\section{abc cde fadfa adfadskfjkld lksdjfa kldskf dksfj sdlfkdjf ad} あちゃーっ、そうですね。 これは、行を納めた水平ボックス(\hsize に収まるように グルーが縮められたりすることもある)を \hbox{\unhbox1} と いうふうに作りなおすと、自然な幅で組まれてしまうから、でした。 条件分岐でしのぎました。 >2. >北見さんのコードを用いて長さを取得し,オリジナルのコードで組 >版すると引数は二度処理されますが行間のグルーの問題は無くなる >と考えてよいのですよね. あっ、そうですね。フォローありがとうございます。 このことを念頭に置いた発言ではなかったですね。 ちなみに、最後の行の上の行間グルーを \unskip で取り除くのは うまくいかない場合が多いので、そのまま残すように変更しました。 (その代わりに、作りなおした最後の行を置くときに行間グルーを抑制しています) >3. >>>これは、二行にわたる場合に一行目と二行目の間でも起きますね。 >>>原因は \Gradation が結構な高さを持っているからです。 >私の環境の問題でしょうか.以下のコードで試しているのですが, 私のところではうまくいっています。 \Gradation の高さは適切に変更したんですよね。例えば“\vbox to 0pt{\vss”とか。 以下、テストソースです。 1ページ目が通常のもので、2ページ目が帯をつけたものです。 コメントアウトを一つ解除すると ps 変換不用の簡易版になります。 \documentclass[a4j]{jarticle} \makeatletter %3308より引用 \def\Gradation#1{\hbox{\lower5pt % 適当 設定の順番↓ \hbox{% % Begin濃度 cb=0.9,End濃度 ce=0.7 (1) \vbox to 8mm{\vss % 高さ h=8mm=22.677165bp (5) \special{" /y 23.244 def % 座標初期値 h+dy=23.244 (7) /c .905 def % 濃度初期値 cb+dc=.905 (4) 1 1 40 { % 初期値 1,増分 1,終端値 n=40 (2) c .005 sub /c exch def % 濃度変化量 dc=(cb-ce)/n=.005 (3) y .567 sub /y exch def % 座標増分量 dy=h/n=0.567 (6) newpath 0 0 moveto #1\space 0 rlineto 0 y rlineto -#1\space 0 rlineto closepath c setgray fill pop} for}}} }} %3350より引用 \def\Gradation#1{\hbox{\lower0pt% \hbox{% \vbox to 2mm{\vss% \special{" /y 5.6695 def /c .7 def /x 0 def /dx {#1\space 0 sub 40 div} def 1 1 40 { newpath x 0 moveto #1\space 0 lineto #1\space y lineto x y lineto closepath c setgray fill c .0075 add /c exch def x dx add /x exch def pop} for}}} }} %3342を参照のこと \def\pushprevdepth{\xdef\@tempprevdepth{\the\prevdepth}}% \xdef にしました \def\popprevdepth{\prevdepth=\@tempprevdepth\relax} %%%% \@sect を書き換えます、比較のためにもとの定義は残しておきます \def\@kksect#1#2#3#4#5#6[#7]#8{% kk は私のイニシャルです(^-^) \ifnum #2>\c@secnumdepth \let\@svsec\@empty \else \refstepcounter{#1}% \protected@edef\@svsec{\@seccntformat{#1}\relax}% \fi \@tempskipa #5\relax \ifdim \@tempskipa>\z@ \begingroup #6{% %%%% オリジナルはこれです % \@hangfrom{\hskip #3\relax\@svsec}% % \interlinepenalty \@M #8\@@par}% %%%% これを以下のように書き換えます \pushprevdepth \setbox\@tempboxa=\vbox{% \popprevdepth% 直前の行の深さを持ち込みます \@hangfrom{\hskip #3\relax\@svsec}% オリジナルのもの \interlinepenalty \@M #8\@@par% オリジナルのもの \setbox\@tempboxa=\lastbox% 最後の行を取り戻す \@tempdimb=\wd\@tempboxa% 後でまた使うので保存 \@tempdima=\hsize \advance\@tempdima by -\@tempdimb % \@tempdima はぶら下げ幅、後で使います % コードの実行回数を抑制するため苦労しています % \linewidth よりも \hsize の方が確実でしょう \setbox\@tempboxa=\hbox{\unhbox\@tempboxa\unskip\unskip}% % 行末のグルーは \parfillskip と \rightskip でしたね % 両方とも取り除いて、自然な長さで組みます \ifdim\@tempdimb<\wd\@tempboxa % 最後の行が縮められていた場合は再び縮めます \setbox\@tempboxa=\hbox to \@tempdimb{\unhbox\@tempboxa\hfil}% \fi \advance\@tempdimb by -\wd\@tempboxa% \@tempdimb はグラデーションの長さ \prevdepth=-1000pt% 行間のグルーは既に入れられているので、ここでは抑制 \moveright\@tempdima\hbox{\box\@tempboxa % 最後の行を作りなおします % \begingroup\def\iffalse{\iftrue\endgroup}\let\fi\fi% % ps 変換が面倒な場合は上の行頭の“%”を外してください \iffalse \vrule width\@tempdimb \else \Gradation{\strip@pt\@tempdimb}% \fi }% \pushprevdepth }% \unvbox\@tempboxa%上の全てを出力 \popprevdepth%\unvbox では \prevdepth が変更されませんでした }% %%%% ここまで書き換えた部分です \endgroup \csname #1mark\endcsname{#7}% \addcontentsline{toc}{#1}{% \ifnum #2>\c@secnumdepth \else \protect\numberline{\csname the#1\endcsname}% \fi #7}% \else \def\@svsechd{% #6{\hskip #3\relax \@svsec #8}% \csname #1mark\endcsname{#7}% \addcontentsline{toc}{#1}{% \ifnum #2>\c@secnumdepth \else \protect\numberline{\csname the#1\endcsname}% \fi #7}}% \fi \@xsect{#5}} \makeatother %%%%% \begin{document} \section{abcdefg} \section{Abracadabra abracadabra abracadabra abracadabra abracadabra abracadabra.} \subsection{ABRACADABRA ABRACADABRA ABRACADABRA ABRACADABRA ABRACADABRA ABRACADABRA ABRACADABRA ABRACADABRA.} \section{abc cde fadfa adfadskfjkld lksdjfa kldskf dksfj sdlfkdjf ad} \eject \setcounter{section}{0}\makeatletter\let\@sect\@kksect\makeatother \section{abcdefg} \section{Abracadabra abracadabra abracadabra abracadabra abracadabra abracadabra.} \subsection{ABRACADABRA ABRACADABRA ABRACADABRA ABRACADABRA ABRACADABRA ABRACADABRA ABRACADABRA ABRACADABRA.} \section{abc cde fadfa adfadskfjkld lksdjfa kldskf dksfj sdlfkdjf ad} \eject \end{document}

この書き込みへの返事:

お名前
題名 
メッセージ(タグは <a href="...">...</a> だけ使えます)