カスタム字下げ・地寄せ
ここまでで、日本語の文章に共通して出てくる要素はほぼ組めたと思います。これ以降は原稿に出てくる時にだけ使うオプショナルなコマンドが主ですが、体系的に覚えたい人・エラーが連発する人は原稿の中身に関わらず順番に読んでいって下さい。
さてデフォルトの1字下げはインデントの所で制御しましたが、文中にはあえてもっと字下げしてあるところや、下げるというかむしろページの一番下までつけてある行なんかもあります。ノンシャラン道中記の手紙のパートは、青空形式ではこんな風に表されています。
[#ここから1字下げ、折り返して2字下げ]
長男のジャック ――巴里大学の法科に入学させてくだされたく、行すえは弁護士。
二女のジャックリイヌ ――伯爵の継嗣《あととり》にお嫁《かたづ》け下さい。
三男のアンリ ――海軍士官学校へ。
四女のイレーヌ ――オペラの技芸学校へ。
五男のポオル ――マチスとか申す画描きのところに弟子入りさせて下さい。
六女のマリイ ――この子に学問はいりません。
七男のルイ ――安南のP・M・D木綿会社へ見習いにやって下さい。
八女のソフィ ――実のところ、わたくしも、この子の処置についてはまだ考えてはおりません。しかし、大実業家、又は相当の家柄から養女に望まれましたらば、そこへお遣《つかわ》し下さる様。
[#ここで字下げ終わり]
[#地から1字上げ]信実なるA・ジェルメエヌ。
字下げには\leftskip
コマンドを使います。
\leftskip = ○zw%
本文
\leftskip = 0zw%
と囲ってやります。○のところには、下げたい字数を入れてください。この場合は1zenkaku widthですね。
上げ下げするんだから幅じゃなくて高さだろう、と思うかもしれませんが、基本的に横書きシステムであるTeXにおいて、縦書き文書の中では全てがタテヨコ反転します。このleftskipコマンドも本来は横書きにおける行頭、つまり 左端 の空きを制御するものです。それを90°回転させて縦書きに適用すると、天の方向にある行頭を制御できることになります。レイアウトの時特に注意が必要になるので覚えておいてください。
[折り返して2字下げ]とは?という感じですが、例えば箇条書きや戯曲形式など、文がびっちり上まで入って欲しくない時に、折り返した行をある高さまで押し込むことがあります。これをぶら下げ(ハング)インデントといい、\hangindent
コマンドで対応します。
\hangindent = ●zw
ぶら下げたい行頭の 全て にこれをつけます(コマンドと本文の間は半角スペースで空ける)。●には押し込みたい字数を入れますが、十蘭の例では1字下げと組み合わさっているので、2字からleftskipの1字分を引いた1が入ります。改行ごとにリセットされるコマンドなので1、範囲の行頭全てに入れてください。
1、2行ならこれでいいですが、使いたい箇所が多かったり、台本など本文全体にハングインデントが入る場合はいちいち行頭に書かずに挟み込みで済ませたいですよね。そういう時には、自分で\begin{}~\end{}の環境を作ってしまいます。プリアンブルに以下の環境定義を入れた後、
\newenvironment{hangall}[1]{\hangindent = #1zw\everypar{\hangindent = #1zw}}{}
ぶら下げしたい範囲を以下で囲います。●が押し込む字数になります。
\begin{hangall}{●}%
本文
\end{hangall}%
環境の自作はマクロ同様覚えると大変便利なんですが、ここでは詳しくやりません。筆者もちゃんと分かっていないので、マスターできたら解説記事を立てたいです。
地寄せ・地付き
地寄せの方は一行か複数行かでコマンドが変わります。一行だけ、またはある行の中の一部分だけ寄せたい時は\hfill
、複数行の時は\raggedleft
で対応します。
二人はそれぎり黙って風呂へはいった。{\hfill \rightskip = ☆zw (掲載誌不詳、『十番随筆』所収)\par}%
{\raggedleft \rightskip = ☆zw%
昭和十八年四月二十四日稿了
同 四月二十九日清書
}%
{}の中にコマンドと寄せたい箇所が入ります。☆は下端からの距離で、十蘭の例なら1ですね。完全な地付きの場合は\rightskipごと割愛してOKです。
hfillはhorizontal fillの略で、水平方向(=文字送り方向。縦書きなので垂直方向)に伸縮するグルーを入れてくれるコマンドです。そもそも\hspace{長さ}
という余白を出力するコマンドがあって、これは数値を手動で指定して入れるものですが、hfillはその自動伸び縮み版というイメージです。
raggedleftの方は横書きで言ったら右寄せに当たるのになんで「left」かとなりますが、[左側に揃えない、左側がガタガタの]って意味だからいいんだそうです。raggedrightというコマンドもあるので混同しないようにしてください。2
これらを組み合わせることで、大概の字下げ地寄せには対応できると思います。コマンドを組み合わせて入れ子にする時は、入れ子構造が崩れないように書いていくことに気をつけてください(最初に書いたコマンドを最後に閉じることになる)。最終的なソースと出力は以下のようになりました。
コマンドの後ろにいちいち%がついていますが、これは改行マクロの副作用を打ち消すためのおまじないなので消さないでください。以降コマンドしかない行の最後には必ず%がつくことになります。3その後ろの日本語コメント部分は消しても大丈夫です。
\newenvironment{hangall}[1]{\hangindent = #1zw\everypar{\hangindent = #1zw}}{}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
︙
七、ドミノ遊びは白と黒との浮世の裏表。
\leftskip = 1zw% 1字下げ
\begin{hangall}{1}% ぶら下げインデント
長男のジャック ――巴里大学の法科に入学させてくだされたく、行すえは弁護士。
二女のジャックリイヌ ――伯爵の継嗣《あととり》にお嫁《かたづ》け下さい。
三男のアンリ ――海軍士官学校へ。
四女のイレーヌ ――オペラの技芸学校へ。
五男のポオル ――マチスとか申す画描きのところに弟子入りさせて下さい。
六女のマリイ ――この子に学問はいりません。
七男のルイ ――安南のP・M・D木綿会社へ見習いにやって下さい。
八女のソフィ ――実のところ、わたくしも、この子の処置についてはまだ考えてはおりません。しかし、大実業家、又は相当の家柄から養女に望まれましたらば、そこへお遣《つかわ》し下さる様。
\end{hangall}%
\leftskip = 0zw%
{\hfill \rightskip = 1zw 信実なるA・ジェルメエヌ。\par}% 地から1字上げ
出力は大分すっきりしてきましたがソースの方がごちゃごちゃしてきました。いろいろコマンドが出てきましたが、面倒だったらもう全部全角スペースを手で入れる方式でもいいと思います。紙の大きさが分かっていて変わる可能性がなく、かつ特殊字下げの量が少ないなら、ページレイアウトまで終わった時点でPDFの出力と見比べつつ手でポチポチ入れましょう。本来はやっちゃいけないけど通常字下げを全角スペースでやってる時点でもう怖いものなしです。
参考
- 凹凸の複雑な字下げ
- 字詰め
- horizontal alignment - How to align text to right without adding additional vertical spacing? - TeX - LaTeX Stack Exchange
- indentation - set hanging indent for more than one paragraph at a time - TeX - LaTeX Stack Exchange
- Length: LaTeX
- horizontal alignment - Combining leftskip, rightskip and raggedright - TeX - LaTeX Stack Exchange
- 正確には段落ごとにリセットされるものです。改行マクロのために「全ての行はことごとく段落に」なっています。 [return]
- flushrightコマンドの方が直感的なんですが、出力してみると前後の段落との間に隙間が空いてしまうので、ここではraggedleftを使います。 [return]
- こうすることで「改行文字をコメントアウト」しています。これをやらないとコマンドだけの行は「コマンド(組版結果には表示されない)+改行一つ分」と解釈されるので、余計な行が空いてしまいます。逆に本文とコマンドが混在した行の最後に%をつけてしまうと次の行との間が改行されないことになります。ただし\parとの絡みもあってケースバイケースなので、出力がおかしくなる時は%のつけ方、改行のしかたをガン見してみてください。 [return]