pdflatex で\section内で勝手に改行

pdflatex で\section内で勝手に改行

- liki の投稿
返信数: 8
その症状を再現できるものを表示も添付もできないので、申し訳ありません。

uplatex+dvipdfmxでは問題ないのですが、pdflatexにおいて\section{}の文字数が15文字以上になると勝手に改行されてしまいます。
\section{あいうえおかきくけこさしすせそ}とすると
8 あ
いうえおかきくけこさしすせそ

但し、そのファイルの他の\section{}で15文字以上にしても改行されません。

問題のある\sectionの前後をいろいろ変更しても結果はかわりません。

再現性が無いので回答のしようもないとは思いますが、よろしくお願いいたします。
liki への返信

Re: pdflatex で\section内で勝手に改行

- liki の投稿
自分なりにいろいろいじってみて原因らしきものはわかりました。
uplatexとpdflatexで挙動が違うしのでわかりませんでした。
添付の1行目と2行目のコメントアウトを変更してそれぞれuplatexとpdflatexでコンパイルしてみてください。

①の行を削除するか②の90mmの値を小さくしてpdflatexでコンパイルしてみてください。

図面の幅の影響がなぜか次の\sectionまで影響していました。
liki への返信

Re: pdflatex で\section内で勝手に改行

- aminophen の投稿
もう少し小さくしてみました。これなら platex + dvipdfmx でも uplatex + dvipdfmx でも,
pdflatex でも似たような現象が起きます。

\documentclass{article}
\usepackage{wrapfig}
\begin{document}
hoge
\section{A B C D E F G H I J K L M N O P Q R}
\begin{wrapfigure}{r}{90mm}
\begin{picture}(120,90)
\framebox(120,90){fuga}
\end{picture}
\end{wrapfigure}
a\par b\par c\par d\par e\par f\par g\par h\par i
\section{A B C D E F G H I J K L M N O P Q R}
piyo
\end{document}

改行位置は上の図の開始位置と関係しているようですから,結局 wrapfig が
悪さをしているようですね。解決法はわかっていません。
aminophen への返信

Re: pdflatex で\section内で勝手に改行

- liki の投稿
ありがとうございます。
(u)platexでもなるんですね。
wrapfigの問題ですか。
liki への返信

Re: pdflatex で\section内で勝手に改行

- 前田 一貴 の投稿
アセト アミノフェンさんの例は,単にまだ「wrapfigure の影響範囲」が終わっていないだけで,
\par i のあとに \par j を追加すれば正常になると思います.

問題の例と本質的に似たようなものとしては,調べてみるとこんなのがあります.

\documentclass{article}
\usepackage{wrapfig}
\usepackage{hyperref}
\begin{document}
\begin{wrapfigure}{r}{90mm}
  \begin{picture}(120,10)
    \framebox(120,10){fuga}
  \end{picture}
\end{wrapfigure}
\href{http://example.com/}{a}\par%この行を消すと正常になる
b\par c\par d\par e\par f\par g\par h\par i
\section{A B C D E F G H I J K L M N O P Q R}
piyo

\section{A B C D E F G H I J K L M N O P Q R}
\end{document}

参考:
http://tex.stackexchange.com/questions/42374/wrapfigure-apparently-creating-dummy-space-on-a-following-page

これは,wrapfigure 環境の直後に \href があると,その後 \section の類のものが出てくる
たびに wrapfigure があるかのように働いてしまうという問題です.
おそらく CJK.sty の場合も wrapfigure 環境の直後に CJK 文字がくると同様のことが
起きているのだと思います.

解決策としては,\end{wrapfigure} 後の最初の段落の前に \leavevmode を入れればよいようです.
前田 一貴 への返信

Re: pdflatex で\section内で勝手に改行

- aminophen の投稿
> アセト アミノフェンさんの例は,単にまだ
> 「wrapfigure の影響範囲」が終わっていないだけで
確かにそうですね。失礼しました。
aminophen への返信

Re: pdflatex で\section内で勝手に改行

- 北見 けん の投稿
普段使っていないので、この機会に wrapfig.sty を読んでみました。
以下、ちょっと長いですが、自分の備忘のつもりと、あと何かの参考になれば。

使い方ですが、
\begin{wrapfigure}{r}{90mm}
の最後の引数は図のために確保する幅ですが、
これを 0pt にすると自動的に幅を測ってくれるようです。
なので、
\begin{wrapfigure}{r}{0pt}
のようにするのが便利ですね。
図の高さ(行数)のほうはオプション引数になっていて、
例えば5行分なら
\begin{wrapfigure}[5]{r}{90mm}
のように明示的に指定することもできますが、
省略した場合に図の高さを自動で測って合わせてくれるます。
なんで幅のほうはオプション引数にしなかったのか解せませんが。

また、図の上下の余白は \intextsep で設定するようです。
今回は \intextsep が大きかったために、
図が終わっているのに次の行(セクションタイトル)が折り返される
というように見えたのでしょうか。
\intextsep をたとえば 0pt くらいに設定すれば、図の後のセクションタイトルも
折り返されなくなるのではないでしょうか。

他に、\WFclear という命令が用意されているようで、
次のように使うと回り込みを途中で解除できます。

\documentclass{article}
\usepackage{wrapfig}
\begin{document}
hoge
\section{A B C D E F G H I J K L M N O P Q R}
\begin{wrapfigure}{r}{90mm}
\begin{picture}(120,90)
\framebox(120,90){fuga}
\end{picture}
\end{wrapfigure}
This is a sample text.\par
This is a sample text.\par
\WFclear
This is a sample text.\par
\section{A B C D E F G H I J K L M N O P Q R}
piyo
\end{document}

回り込みを解除しただけだと次の段落の文章が折り返されずに図にかかってしまいますが、
そこに空行を設けて図の後から次の段落を始めるような命令は用意されていないみたいですね。
そこで、内部の変数を拝借して、\WFclear だけのところを
\vskip\csname c@WF@wrappedlines\endcsname\baselineskip\WFclear
のようにしてみると、
図の横を空行で満たした後で次の段落を折り返しなしで続けることができるようになりました。
セクションが変わるときはいつもこのように処理するというポリシーはありうると思うので
標準の命令でできるようにしておいてくれたらよかったかなと思いました。

以上、長文失礼しました。
北見 けん への返信

Re: pdflatex で\section内で勝手に改行

- liki の投稿
ありがとうございます。
英語は苦手ですが、マニュアルを見てみました。
\WFclearはマニュアルに載ってないっぽいですね。
幅の指定が0でもいいなんて初めて知りました。
明日、また試してみます。
liki への返信

Re: pdflatex で\section内で勝手に改行

- liki の投稿
途中にどれだけ文章があろうが関係なく影響するようです。
最初に全く原因がわからなかったのは影響のある図形と\sectionのページが離れていたからです。

再度添付しましたが、別の図形で幅を変更すればよいようです。