改行・段落

 それにしても読みづらいですね。改行が全然なくて一面に字が植えてある。面倒なことにTeXは、いわゆる普通の改行を感知しません。
 いやさすがに語弊があるな。正しくは下のように、間に空行を入れることで改行、つまり新たな段落が製造されます。

新しい段落

 じゃあ改行したいところに空行を入れていけばいいのかとなると、そうとも言い切れません。だってこうなるんだよ。(十蘭は改行少ないので乱歩で)

行間の空きすぎた乱歩

 いやだ!こんなの乱歩じゃない!なにより面倒くさい。いちいち空きを入れてくなんてミスも増えそうだし。
 間が開かない段落内強制改行のやり方は、一般的には行末に\\\newlineを入れることです。ただこれも、面倒くささとミスのしやすさでは大して変わりません。

 もともと英語の特に論文では、新しい行=新しい段落という認識なので、空行方式で破綻なく書いて組版できます。でも小説でいうと、改行って必ずしも新しい段落に移るわけじゃないですよね。特にセリフがそうで、会話になると改行のオンパレードだけど段落は全部一緒です。
 この改行・段落問題はMarkdownなどとも共通で、個人的にはかなり根深い問題だと思っています。単なる英語と日本語の壁かと思ったんですが、機械にとっての解析のしやすさや伝統的な組版ルールとの絡みなどもあり、また英語圏でも空行派vs反対派議論は存在するようです。1
 というわけでここでは正しい文法を模索するよりも、.texファイルの扱いやすさおよび表現としての柔軟さを重視します。たとえ段落と強制改行を使い分けてきちんと整形した正しいTeX文書でも、エディタでファイルを開いた時に行の間がスカスカだと腹が立ってくるからです。編集作業は楽しくやりたい。

 そのためにはあらかじめこちら側で、「全部の行を見たまま改行する」的なコマンドを指定しなければなりません。TeXにはもともと\obeylinesというコマンドがあって、これを書いてやると大体望む動作になります。
 エスケープの時のような部分的なコマンドではない、文書全体に関わるコマンドは本文が始まる前、\documentclass\beginの間で指定します。ここの間のことをプリアンブルといいます。以降のコード例ではプリアンブルの部分のみを示していることがあります。
 これでちゃんと改行できたかのように見えるんですが、実はまだ落とし穴があります。

空行が反映されない

 空きが反映されてない。実はobeylinesは、「 文字のない空白だけの行は無視する 」というTeX本来の動作に従います。なので一行アキや二行アキを入れたくて何回改行しても無視されます。
 空行の制御には\vspaceコマンドなどがあるんですが、本文が読みづらくなるのであまり使いたくありません。どうしたもんかと悩んでいたところ、xsceyさんが解決法を教えて下さいました。(ありがとうございます!)
 \obeylinesは使わず、以下のようにしてやります。

\documentclass{utbook}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{\catcode`\^^M=\active%
\gdef\xobeylines{\catcode`\^^M\active \def^^M{\par\leavevmode}}%
\global\def^^M{\par\leavevmode}}
\AtBeginDocument{\xobeylines}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
︙

 何やら恐ろしげな呪文ですが、意味は分からなくても大丈夫です。(詳しい技術的な解説はブログの方にあります) こういうTeXへの命令を組み合わせた一種のプログラムをマクロと呼ぶことだけ覚えておいてください。
 それから%の羅列はただの区切りで、意味はありません。TeXでは頭に半角の%をつけた文は本文にも組版にも影響を与えないコメントとして扱われるので、それを利用してプリアンブル部分を挟んでみました。以降はプリアンブルでの命令はこの区切り線の内側に書いていきます。うるさかったら省いてもOKです。(ただしマクロ行末の%は消さないで!)

 これで、本文通りの改行になりました。

exobeylines適用後

 とここまで説明してきましたが、実はこの改行方法は裏技です。やってはいけないわけではないんですが、厳密に言えば本来はTeX上級者にのみ許された抜け道と言わねばなりません。
 どういうことかというと、この改行マクロ(命令の名前は\xobeylinesです)を使うと、後々紹介するTeXの機能を拡張してくれる種々の命令群(パッケージ)とかち合って予期せぬ結果を引き起こすことがあるんです。
 このチュートリアルに書かれていることだけをやっている間はいいですが、後々自分でいろいろなパッケージを追加したくなった時に問題が起こる場合があります。煩わしいと思った方は、上記の“正しい”空行方式で改行していくことをおすすめします。詳しくは改行マクロの副作用の項で取扱いますので、まずはそこまで順番に読んでいってください。

参考

comments powered by Disqus