回り込みの一形式と変形list系環境

名前: 安田 亨
日時: 2006-05-17 09:57:28
IPアドレス: 59.147.230.*

回り込みの1つの形式ymawarikomiに気づいたので,報告を致します. もしかしたら既知なのかもしれません.その場合は寛容の精神でお許しください. リスト系環境でなければこのように短いマクロで回り込みができるというのは驚きました. 大学受験の数学では狭いところに図と文を押し込むのが普通です. そのために,基本的には,図が右上に入り, その左側と下側に文字が回り込む形になります. 回り込みについてはwrapfig,emathのスタイルなどが知られています. 今回,The TeXbookのappendixEを応用して下のymawarikomiを作りました. ymawarikomiの引数は6つです.右に何文字分空けるか, 回り込みの行数(この2つで図の背景となる白い部分のサイズを決める), 読み込む図の左右のサイズ,図の名前,その図を何センチ下に下げるか, 図を右にどれだけ移動するかです. 受験雑誌「大学への数学」の場合ですと,左右2段組,一段は左右25字です. 図の基本サイズは7行12字, 図は4.5センチの透明の正方形内に描き,印刷仕上がりは3.5センチですから, 13,7,3.5cm,図の名前,3.5cm,13と入れます. 図はそのコマンドを入れたところに右寄せで入ります. 最後の引数は微妙に左右にずらす必要があることも多いので入れました. \ymawarikomi{12}{7}{3.5cm}{fig2-1.eps}{3cm}{13} と使います.この回り込みは図を自由な位置(欄外でもどこでも)に移動して 重ね書きできるため,左右に表と図をいれるという使い方もできます. また(空行で段落をあらためると回り込みが解除されるが) \\で改段落すれば段落をまたいで(段をまたいでではありません) 回り込みが行われます. いいことばかりではありません. hangindent,hangafterを使って白い部分を成形しているため, wrapfigと同様に,リスト系環境では効きません. リスト系環境の字下げをしているparshapeと同時には使えないからです. そこで,リスト系環境をparshape以外のもの(leftskip,rightskip) で字下げをすればよいのではないかと思いました. leftskip,rightskipはhangindent,hangafterと同居ができます. ceo.sty内の,問題編などで字下げをする環境はlistを改変したalistを用いたもの にしました.これで,(変更後の)ceo.sty内では一応有効に働いています. ただし,既存のリスト系環境との併用ではおそらく効かないケースもあると思います. そうした環境が入れ子になるケースでは既存のどれかの環境をあきらめればすむこと ですから,実用上は問題ないかと思っています. 一応,今のところ実験でおきた問題は解決したつもりですが... なお,受験雑誌「大学への数学」の場合,図はMathematica+イラストレータで作った epsだけですので,コマンドはそのために特化した形のものだけ示しました. 表を入れることができますが,その場合はincludegraphicsなどを取った形にします. 今回書き込んだ目的は次のことです. 「ceo.sty内ではなく,他のスタイルではこの回り込み, 新リスト系環境との相性はどの程度有効 (無茶で安易な案をいうと,alistのaを削除して読み込むとオリジナルlist を置き換えることができますが,そんなことはするにしても自己責任でお願いします) か,ご興味がある方にお試しいただけたら」 と思い,書き込みました.どんな不具合が出るのかわかるとうれしく思います. なお,これに変更したceo.styはアップしてありません.しばらく実験を続けます. さらに,回り込みは邪道であるという主張もあると思いますが, それはここではお忘れください. 日本評論社では回り込みを許してくれなかったので,私の本でも, 図の左右は空いているという形です. さらに,既存のリスト系環境でもインデントスタイルを使って字下げをすると 図の分の空白をあけることができますから「リスト系環境で効かない」というのは listを書き換えてまで行うことか?という主張もあるとは思います. また,以上の結果は友人達との試行錯誤によって生まれました. \def\ymawarikomi#1#2#3#4#5#6{% \par % \begingroup\clubpenalty=150 \def\par{\endgraf\endgroup}% \noindent\hangindent-#1zw\hangafter=-#2% \raisebox{-#5}[0pt][0pt]{% \hbox to 0pt{\hskip#6zw\includegraphics[width=#3]{#4}\hss}}} 先に \newdimen\@totalrightmargin \@totalrightmargin=0pt を定義しておいて, \def\alist#1#2{% \ifnum \@listdepth >5\relax \@toodeep \else \global\advance\@listdepth\@ne \fi \rightmargin\z@ \listparindent\z@ \itemindent\z@ \csname @list\romannumeral\the\@listdepth\endcsname \def\@itemlabel{#1}% \let\makelabel\@mklab \@nmbrlistfalse #2\relax \@trivlist \parskip\parsep \parindent\listparindent \advance\linewidth -\rightmargin \advance\linewidth -\leftmargin \advance\@totalrightmargin \rightmargin \advance\@totalleftmargin \leftmargin \leftskip=\@totalleftmargin \rightskip=\@totalrightmargin \ignorespaces}

この書き込みへの返事:

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