2018年10月8日

\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の許可が必要です