でちょっと困るのが箇条書き(itemize環境、enumerate環境)でのインデントの調整。
いろいろ設定項目があって、よく分からなくなることが多い。
ここではjlreqドキュメントクラスを使ったときのインデントの調整方法を残しておく。
これはTeX & LaTeX Advent Calendar 2019 - Adventarの7日目の記事です。
Lua(La)TeX関係ないですが・・・
6日目はuwabamiさんのTeX on Debian 10 (Buster) - 平衡点(2019-12-06)でした。
8日目はtrueroadさんのLuaTeXで原ノ味フォントを使う - Qiitaです。
jlreqドキュメントクラス
jlreqドキュメントクラスは、日本語組版処理の要件にしたがうように作られたドキュメントクラス。
日本語文書を作る場合、jsclasses(やbxjscls)を使うことが多いと思うけど、後発のjlreqは見出しやページスタイルのカスタマイズが圧倒的に楽。
もっと実績を増やして使われるようになって欲しい・・・
bxjsclsでのカスタマイズは以下も参照:
jlreqでのカスタマイズは以下も参照:
jlreqでの箇条書きのインデント調整
jlreqで箇条書きのインデントを調整する場合、プリアンブルで\jlreqsetup
および\setlength
を使って長さを指定する。
\jlreqsetup
で指定itemization_label_length
ラベルの長さ(≒一行目の左マージン;マージン部分にラベルが出る)itemization_labelsep
ラベルとの間隔
\setlength
で指定\leftmargin<X>
(二行目以降の)左マージン(<X>
はレベルの深さでi
、ii
、など)
なお、ここで言うラベルとは、itemize環境での点やenumerate環境での番号など。
また、jlreqは2019-09-24版。
(ドキュメントに記載がないので変更の可能性がある)
図で表すと、次のようになる:
たとえば、次のようなソースがあったとする:
\documentclass[uplatex,dvipdfmx,paper=a5,open_bracket_pos=nibu_tentsuki]{jlreq} \usepackage{bounddvi} % ここに設定を書く \begin{document} \noindent\hrulefill \begin{itemize} \item あああああああああああああああああああああああああああああああああ \begin{itemize} \item いいいいいいいいいいいいいいいいいいいいいいいいいいいいい \end{itemize} \item ううううううううううううううううううううううううううううううううう \end{itemize} \noindent\hrulefill \end{document}
デフォルトだとこんな出力:
一行目のインデントをちょうど全角一文字にしたい場合、次のようにする:
\jlreqsetup{ itemization_label_length={1zw}, }
さらに、レベル2の一行目のインデントだけ全角三文字分にしたい場合は、次のようにする:
\jlreqsetup{ itemization_label_length={1zw, ii=3zw}, }
ラベルとの間隔を全角一文字にしたい場合はこう:
\jlreqsetup{ itemization_labelsep={1zw}, }
二行目以降の左マージンを全角三文字分にしたい場合は、こうなる:
\setlength{\leftmargini}{3zw} \setlength{\leftmarginii}{3zw}
一行目と二行目以降の先頭が揃ってた方がキレイだと思うので、個人的には次のようにするといいと思う:
\jlreqsetup{ itemization_label_length={1zw, i=2zw},% レベル1だけインデントをより深くしてみた itemization_labelsep={0.5zw}, } \setlength{\leftmargini}{2.5zw}% 2+0.5 \setlength{\leftmarginii}{1.5zw}% 1+0.5
括弧類で始まる場合
jlreqでは括弧類が行頭にきた場合の処理をクラスオプションで指定できるようになってる。
オススメは、段落開始のときは二分空き(=半角だけ下がる)、折り返して行頭になったときは天付き(スペース入らない)になる設定。
こうすると、変なことしなくても会話文がそのまま書ける。
\documentclass[uplatex,dvipdfmx,paper=a5, open_bracket_pos=nibu_tentsuki,% この設定! ]{jlreq} \usepackage{bounddvi} \begin{document} % 『響け!ユーフォニアム 北宇治高校吹奏楽部、決意の最終楽章 前編』より 机の上で丸めた手を、久美子は強く握り締めた。 「黄前久美子」 「はい!」 こうして、久美子の一年は始まった。 北宇治高校での、最後の一年が。 \end{document}
ただ、これがちょっと悪さして、箇条書きの先頭に括弧類がきた場合、インデントがおかしくなる場合があった。
\documentclass[uplatex,dvipdfmx,paper=a5,open_bracket_pos=nibu_tentsuki]{jlreq} \usepackage{bounddvi} \jlreqsetup{ itemization_label_length={1zw}, itemization_labelsep={0.5zw}, } \setlength{\leftmargini}{1.5zw} \begin{document} \noindent\textbf{参考文献} \begin{itemize} \item 『響け!ユーフォニアム』\\ 武田綾乃 著、宝島社 \item その他もろもろ \end{itemize} \end{document}
この場合、\item
のあとに\hspace{0zw}
を入れると、普通の行頭と同じように動くみたい。
ただ、上記の場合は二分空きじゃなくて天付きの方が自然に感じたので、自分は次のように\bitem
というマクロを定義して使った:
\newcommand{\bitem}{\item\hspace{-0.5zw}}
\item
の代わりに\bitem
を使うと、次のようになる:
enumerate環境に関して
itemize環境はこれまでので大体問題ないんだけど、割と困るのがenumerate環境。
というのも、ラベル部分で必要な長さがドキュメントを通して一定とは限らないから。
特に、enumerateパッケージを使ってラベルの書式を指定する場合、かなり困る。
一応、\jlreqsetup
では環境名を指定しての長さの指定もできる:
\documentclass[uplatex,dvipdfmx,paper=a5,open_bracket_pos=nibu_tentsuki]{jlreq} \usepackage{bounddvi} \jlreqsetup{ itemization_label_length={1zw,enumerate={5zw}},% enumerateでは全角5文字分 itemization_labelsep={0.5zw}, } \setlength{\leftmargini}{1.5zw} \setlength{\leftmarginii}{5.5zw} \begin{document} \noindent\hrulefill \begin{itemize} \item あああああああああああああああああああああああああああああああああ \begin{enumerate} \item いいいいいいいいいいいいいいいいいいいいいいいいいいいいい \item ううううううううううううううううううううううううううううう \end{enumerate} \end{itemize} \noindent\hrulefill \end{document}
なので、書式を特に変えないのであれば、この方法もあり。
(ただし、\leftmargin<X>
は適当に変える必要がある)
ただ、次のようにenumerateパッケージを使うと途端におかしなことになる:
\documentclass[uplatex,dvipdfmx,paper=a5,open_bracket_pos=nibu_tentsuki]{jlreq} \usepackage{bounddvi} \usepackage{enumerate} \jlreqsetup{ itemization_label_length={1zw,enumerate={3zw}}, itemization_labelsep={0.5zw}, } \setlength{\leftmargini}{3.5zw} \begin{document} \noindent\hrulefill \begin{enumerate}[(a)] \item あああああああああああああああああああああああああああああああああ \item いいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいい \item ううううううううううううううううううううううううううううううううう \end{enumerate} \begin{enumerate}[\hbox{Step-}1.] \item あああああああああああああああああああああああああああああああああ \item いいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいい \item ううううううううううううううううううううううううううううううううう \end{enumerate} \noindent\hrulefill \end{document}
一行目の設定はjlreqによるものが反映されてるが(ただしそれもラベルの長さがそれぞれ違うので変に見える)、二行目の設定はまったくおかしくなってる。
これはなぜかというと、実はenumerateパッケージ内で\leftmargin<X>
の値が書き換えられてしまってるから。
% enumerate.styより \def\@@enum@[#1]{% \@enLab{}\let\@enThe\@enQmark \@enloop#1\@enum@ \ifx\@enThe\@enQmark\@warning{The counter will not be printed.% ^^J\space\@spaces\@spaces\@spaces The label is: \the\@enLab}\fi \expandafter\edef\csname label\@enumctr\endcsname{\the\@enLab}% \expandafter\let\csname the\@enumctr\endcsname\@enThe \csname c@\@enumctr\endcsname7 % 以下で\leftmargin<X>が変えられる \expandafter\settowidth \csname leftmargin\romannumeral\@enumdepth\endcsname {\the\@enLab\hspace{\labelsep}}% \@enum@}
ラベルの長さをそのまま\leftmargin<X>
の値にされてしまってる。
これを直すには、コピペしてきて長さを設定している部分をコメントアウトする。
% enumerateパッケージの修正 \makeatletter \def\@@enum@[#1]{% \@enLab{}\let\@enThe\@enQmark \@enloop#1\@enum@ \ifx\@enThe\@enQmark\@warning{The counter will not be printed.% ^^J\space\@spaces\@spaces\@spaces The label is: \the\@enLab}\fi \expandafter\edef\csname label\@enumctr\endcsname{\the\@enLab}% \expandafter\let\csname the\@enumctr\endcsname\@enThe \csname c@\@enumctr\endcsname7 % \leftmargin<X>の設定を無効にする % \expandafter\settowidth % \csname leftmargin\romannumeral\@enumdepth\endcsname % {\the\@enLab\hspace{\labelsep}}% \@enum@} \makeatother
また、それぞれでインデントの深さを変えたい場合には、\jlreqsetup
を使わずに長さを指定するしかない:
\documentclass[uplatex,dvipdfmx,paper=a5,open_bracket_pos=nibu_tentsuki]{jlreq} \usepackage{bounddvi} \usepackage{enumerate} % enumerateパッケージの修正 \makeatletter \def\@@enum@[#1]{% \@enLab{}\let\@enThe\@enQmark \@enloop#1\@enum@ \ifx\@enThe\@enQmark\@warning{The counter will not be printed.% ^^J\space\@spaces\@spaces\@spaces The label is: \the\@enLab}\fi \expandafter\edef\csname label\@enumctr\endcsname{\the\@enLab}% \expandafter\let\csname the\@enumctr\endcsname\@enThe \csname c@\@enumctr\endcsname7 % leftmargin設定を無効にする % \expandafter\settowidth % \csname leftmargin\romannumeral\@enumdepth\endcsname % {\the\@enLab\hspace{\labelsep}}% \@enum@} \makeatother \begin{document} \noindent\hrulefill { % \leftmarginiを('(a)'の幅)+(ラベルとの間隔)に設定 \settowidth{\leftmargini}{(a)} \addtolength{\leftmargini}{0.5zw} \begin{enumerate}[(a)] \setlength{\itemindent}{0zw}% 一行目の追加のインデント \setlength{\labelsep}{0.5zw}% ラベルとの間隔(\leftmargini+\itemindentから左側に空白) \item あああああああああああああああああああああああああああああああああ \item いいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいい \item ううううううううううううううううううううううううううううううううう \end{enumerate} } { % \leftmarginiを('Step-1.'の幅)+(ラベルとの間隔)に設定 \settowidth{\leftmargini}{Step-1.} \addtolength{\leftmargini}{0.5zw} \begin{enumerate}[\hbox{Step-}1.] \setlength{\itemindent}{0zw}% 一行目の追加のインデント \setlength{\labelsep}{0.5zw}% ラベルとの間隔(\leftmargini+\itemindentから左側に空白) \item あああああああああああああああああああああああああああああああああ \item いいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいい \item ううううううううううううううううううううううううううううううううう \end{enumerate} \noindent\hrulefill \end{document}
ここまで頑張ると、いい感じになる。
このあたりは改善されるといいんだけど・・・
今日はここまで!