Twitter Digest 2017-05-21
- i文庫HD(iPad)からBoxにログインしようとすると,何度やってもアプリが落ちる。仕方なくBoxアプリからファイルを送り出すことになる。ああ面倒。 12:24:31, 2017-05-21
まだ欠点があるが,とりあえず自家用としては使えるものが出来たので,メモ。
\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
図版の配置には,wrapfig.styによるwrapfigure環境を使っているのだが,たまに上手く行かないことがある。一番困るのは,図版はとっくに終わって,テキストの回り込み(短くなる部分)も終わっているのに,次の段落で,またもテキストが短くなってしまう現象だ。
前回これが発生したときは,wrapfigure環境の直後が垂直モードで,おそらくはそれが原因。そして \leavevmode を入れることで解決した。しかし,今回はそれとは違う。
原因は分からないものの,wrapfigureが行っている \parshape 関係の処理を強制的にリセットすれば何とかなるはず。検索したところ,同じ症状の人がいるようで,それを参考に以下のコードを挿入。
\makeatletter \@@par \ifnum\@@parshape=\z@ \let\WF@pspars\@empty \fi % reset `parshape' \global\advance\c@WF@wrappedlines-\prevgraf \prevgraf\z@ \ifnum\c@WF@wrappedlines< \tw@ \WF@finale \fi \makeatother
要するに,wrapfigureの内部マクロに直接アクセスしているわけで,いささか黒魔術的ではあるが,仕方ない。
[2017/05/02 の記録]
忘れていたが,今週火曜日の弁当。
ワンパターンで銀鱈粕漬けに,レンジチンしたキャベツとトマト。牛肉とシメジの甘辛炒めを少し入れて,隙間に,ブロッコリー,蒸した人参,細切り昆布煮を詰める。昆布煮は買ってきたお惣菜のもの。