まだ欠点があるが,とりあえず自家用としては使えるものが出来たので,メモ。

\makeatletter
\newcount\@HangLines
\newdimen\@IndentWidth
\let\@CurrentPar=\par
\def\@hangcarrypar{% hanging indentationの間は,\parはこの\@hangcarryparに置き換えられる。
	\edef\next{\hangafter=\the\hangafter\hangindent=\the\hangindent}% 現在の値を後で使うため
	\@CurrentPar %% パラグラフを終了。現在,垂直モードのはず。
	\next %%新しいパラグラフで以前の\hangindent, \hangafterを復活させる。
	\edef\next{\prevgraf=\the\prevgraf}% これまでのパラグラフで組み立てた行数を後で参照するため
	\ifnum\prevgraf>\@HangLines %% すでに組み立て行数が指定の字下げ行数より大きい場合は,
		\hangafter=0\hangindent=0pt\prevgraf=0 %%字下げを終了させて,
		\let\par=\@CurrentPar %% \parを元に戻す。
	\else %% まだまだ字下げを続行する場合。
		\leavevmode %% これなしに垂直モードのまま\next だとずっと字下げが続いてダメだった。
		%% しかし,これがあるため,\parが連続したとき無視されずに改行されるという欠点あり。要改良
		\next %% これまで組み立てた行数を\prevgrafに代入する。
	\fi}
\def\MyWrapFig#1#2#3{% #1=Lines, #2=Width, #3=図版など
	\@HangLines=#1%
	\@IndentWidth=#2%
	\setbox0=\vbox{#3}%
	\dimen0=\hsize \advance\dimen0 -\@IndentWidth
	\par
	\vbox to 0pt{\moveright\dimen0\box0\vss}%
	\vskip -\parskip
	\vskip -\baselineskip
	\def\par{\@hangcarrypar}
	\prevgraf=0%
	\hangafter=-#1
	\hangindent=-#2\relax
}
\makeatother

投稿者 sukarabe

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です