名前: しっぽ愛好家 日時: 2003-11-16 13:11:40 IPアドレス: 211.4.43.*
>>23614 (enumerate 環境の実装に用いられている)list 環境における 個々の \item のラベル文字列の体裁は,\makelabel というマクロで 規定されます. %%% 実際,enumerate 環境で用いられている \makelabel は %%% \def\makelabel#1{\hss\llap{#1}} のように定義されるので, %%% ラベル文字列が右寄せになります. そこで,enumerate 環境の定義における \makelabel の定義部分を変更して, 然るべき \makelabel(適当な幅のボックスにラベル文字列を中央寄せにして 入れるような \makelabel)が用いられるように変更すればよいでしょう. 例えば,jaricle.cls における enumerate 環境の定義に手を加えるとすると, 次のようになります. \documentclass{jarticle} \makeatletter \def\enumerate{% \ifnum \@enumdepth >\thr@@\@toodeep\else \advance\@enumdepth\@ne \edef\@enumctr{enum\romannumeral\the\@enumdepth}% \list{\csname label\@enumctr\endcsname}{% \iftdir \ifnum\@listdepth=\@ne \topsep.5\normalbaselineskip \else \topsep\z@ \fi \parskip\z@ \itemsep\z@ \parsep\z@ \labelwidth1zw \labelsep.3zw \ifnum\@enumdepth=\@ne \leftmargin1zw\relax \else \leftmargin\leftskip \fi \advance\leftmargin 1zw \fi \usecounter{\@enumctr}% %%% \def\makelabel##1{\hss\llap{##1}}%%% original \labelwidth\leftmargin \def\makelabel##1{% \hskip\labelsep%%% これを入れているのは,list 環境での %%% ラベル文字列の配置の仕方に応じた補正です. %%% ラベル文字列を収めるボックスの幅の計算 \dimen@\labelwidth \advance\dimen@-\labelsep \setbox\z@\hbox{##1}% %%% ラベル文字列が長すぎる場合にはそのまま配置し,短い場合には %%% 先に計算しておいた \dimen@ の幅のボックスに詰めなおします. \ifdim\wd\z@>\dimen@ \box\z@ \else \hbox to\dimen@{\hfil \unhbox\z@ \hfil}% \fi}% }% \fi} \def\endenumerate{\endlist} \makeatother \def\theenumi{\roman{enumi}} \def\labelenumi{(\theenumi)} \begin{document} \begin{enumerate} \item ぱたぱた \item およよ \item ぱたぱたおよよあれれとほほおっとっと ぱたぱたおよよあれれとほほおっとっと ぱたぱたおよよあれれとほほおっとっと \end{enumerate} \end{document} [蛇足] これは,その場しのぎのやり方です. %%% 寸法 2zw は適宜変更してください(ただし,あまり大きくしすぎると, %%% ラベル文字列が左にはみ出す場合が生じます). \begin{enumerate} \item[{\makebox[2zw][c]{(i)}}] ぱたぱた \item[{\makebox[2zw][c]{(ii)}}] およよ \item[{\makebox[2zw][c]{(iii)}}] あれれ \end{enumerate} %%% この例の場合,単に \item[\makebox[2zw][c]{(i)}] のように記述すると, %%% \makebox[2zw だけが \item のオプション引数として扱われ, %%% (\makebox の処理に)支障が生じることに注意してください.
この書き込みへの返事: