\fontmatter
とかの話があるけどいったんそれはさておいて…….
以下は017b04に基づく.\DeclareBlockHeading
にはformatというキーがある.これはこういう風に使うつもり.
\documentclass[lualatex]{jlreq}
\usepackage{tcolorbox}
% subtitle_indentの頭に*をつけるのは最近実装した機能
\DeclareBlockHeading{heading}{0}{font=\bfseries,format={\begin{tcolorbox}[title={#1}]#2#3\end{tcolorbox}},after_label_space=0pt,second_heading_text_indent=*0pt,subtitle_indent=*1\zw,lines=}
\begin{document}
\heading{見出し}[副題]
\end{document}
formatキーは#1
,#2
および#3
を含み,それぞれラベル,見出し文字列,副題に置き換えられる.上記ではtcolorboxを使った見出しにしているので,\heading{見出し}[副題]
は
{\bfseries % フォント設定
\begin{tcolorbox}[title={\theheading}]
見出し\par
\noindent \hspace*{1\zw}---副題--- % 1\zw = subtitle_indent,---で囲まれるのはデフォルトのlabel_format由来
\end{tcolorbox}
}
という感じの形で処理される.(実際にはもっと処理が入る.)上の例でわかるとおり,#1
らは単純に見出し文字列などに置き換えられるわけではなく,その間に体裁を整えるための命令が挟まれる.(特にインデント関連が色々入るんだけど,formatが複雑だと何か障害が起きるかもしれない.)
行取り指定はformatキーが指定されていても有効であり,formatキーで指定された全体(今の例だとtcolorbox環境全体)が指定された場所に配置される.それをやめて自然な長さに合わせて配置するには上のようにlinesキーの中身を空にすればよい.
というわけで,凝った見出しに対しても柔軟に対応できるようにした(ている?)つもり.
追記:1b8ebd1で\jlreqBlockHeadingLabel
,\jlreqBlockHeadingHeadingText
,\jlreqBlockHeadingSubtitle
を追加した.format内で使うことができる.いずれも引数を一つとり,それぞれラベル,見出し文字,副題がない時は空に,ある時は引数そのものになる.例えばformat={\jlreqBlockHeadingLabel{#1\somemacro}#2#3}
とすると,ラベルがなければ#2#3
と同じ,ラベルがあれば#1\somemacro #2#3
と同じになる.なお,現在の実装ではこれらのマクロはformatに指定されたトークン列が実行される時に同時に展開される.
0 件のコメント:
コメントを投稿
コメントの追加にはサードパーティーCookieの許可が必要です