diff options
Diffstat (limited to 'macros/jptex/latex/jlreq/jlreq.cls')
-rw-r--r-- | macros/jptex/latex/jlreq/jlreq.cls | 324 |
1 files changed, 177 insertions, 147 deletions
diff --git a/macros/jptex/latex/jlreq/jlreq.cls b/macros/jptex/latex/jlreq/jlreq.cls index b8e5c3dbcb..efde6158b8 100644 --- a/macros/jptex/latex/jlreq/jlreq.cls +++ b/macros/jptex/latex/jlreq/jlreq.cls @@ -5,28 +5,39 @@ %% % (based on JLReq 20200811 https://www.w3.org/TR/2020/NOTE-jlreq-20200811/) \NeedsTeXFormat{LaTeX2e} -\ProvidesClass{jlreq}[2024/02/16 jlreq] -\RequirePackage{l3keys2e} +\ProvidesClass{jlreq}[2024/10/04 jlreq] \RequirePackage{etoolbox} \RequirePackage{jlreq-helpers}[2024/02/13] \ExplSyntaxOn +\cs_new:Nn \l_jlreq_do: {} \int_new:N \l__jlreq_tmpa_int +\int_new:N \l__jlreq_tmpb_int +\int_new:N \l__jlreq_tmpc_int \tl_new:N \l__jlreq_tmpa_tl \tl_new:N \l__jlreq_tmpb_tl \tl_new:N \l__jlreq_tmpc_tl -\cs_new:Nn \l_jlreq_do: {} \str_new:N \l__jlreq_tmpa_str \str_new:N \l__jlreq_tmpb_str \str_new:N \l__jlreq_tmpc_str -\bool_new:N \l_jlreq_tmpa_bool -\clist_new:N \l_jlreq_tmpa_clist +\bool_new:N \l__jlreq_tmpa_bool +\bool_new:N \l__jlreq_tmpb_bool +\bool_new:N \l__jlreq_tmpc_bool +\clist_new:N \l__jlreq_tmpa_clist +\clist_new:N \l__jlreq_tmpb_clist +\clist_new:N \l__jlreq_tmpc_clist \seq_new:N \l__jlreq_tmpa_seq +\seq_new:N \l__jlreq_tmpb_seq +\seq_new:N \l__jlreq_tmpc_seq \dim_new:N \l__jlreq_tmpa_dim -\skip_new:N \l_jlreq_tmpa_skip -\box_new:N \l_jlreq_tmpa_box -\box_new:N \l_jlreq_tmpb_box -\box_new:N \l_jlreq_tmpc_box +\dim_new:N \l__jlreq_tmpb_dim +\dim_new:N \l__jlreq_tmpc_dim +\skip_new:N \l__jlreq_tmpa_skip +\skip_new:N \l__jlreq_tmpb_skip +\skip_new:N \l__jlreq_tmpc_skip +\box_new:N \l__jlreq_tmpa_box +\box_new:N \l__jlreq_tmpb_box +\box_new:N \l__jlreq_tmpc_box \prop_new:N \l__jlreq_tmpa_prop \prop_new:N \l__jlreq_tmpb_prop \prop_new:N \l__jlreq_tmpc_prop @@ -91,7 +102,8 @@ % ものは\jlreq@option@<key>に格納する. % _とかは@に変換する. % エンジン類 -\keys_define:nn { jlreq } { +\DeclareKeys [jlreq] { + name.usage = load, uplatex .code:n = { \let\jlreq@engine=u }, uplatex .value_forbidden:n = true, platex .code:n = { \let\jlreq@engine=p }, platex .value_forbidden:n = true, lualatex .code:n = { \let\jlreq@engine=l }, lualatex .value_forbidden:n = true, @@ -115,13 +127,13 @@ \tl_gput_right:Nn \g__jlreq_papersizelist_tl { { ##1 } { \setlength{\paperwidth}{#3} \setlength{\paperheight}{#4} } } } \clist_map_inline:nn {#2} { - \keys_define:nn { jlreq } { + \DeclareKeys [jlreq] { ##1 .code:n = { \setlength{\paperwidth}{#3} \setlength{\paperheight}{#4} }, ##1 .value_forbidden:n = true } } } -\keys_define:nn { jlreq } { +\DeclareKeys [jlreq] { paper .code:n = { \str_case:nVF {#1} \g__jlreq_papersizelist_tl { \jlreq@helper@dividebycomma{#1}% @@ -153,7 +165,7 @@ } \clist_map_inline:nn {#2} { \cs_set:Nx \l__jlreq_do: { - \exp_not:N \keys_define:nn { jlreq } { + \exp_not:N \DeclareKeys [jlreq] { ##1 .code:n = { \exp_not:o { \l__jlreq_tmpa:n {##1} } \exp_not:n { \setlength{\paperwidth}{#3} \setlength{\paperheight}{#4} } @@ -276,7 +288,7 @@ %.. フォントサイズ,行長,1ページあたりの行数で基本版面のサイズを決める(2.4.1.a) \__jlreq_aftercls_addtodeletecs:N \jlreq@option@fontsize -\keys_define:nn { jlreq } { +\DeclareKeys [jlreq] { fontsize .tl_set:N = \jlreq@option@fontsize, 10pt .code:n = {\def\jlreq@option@fontsize{10pt}}, 10pt .value_forbidden:n = true, 11pt .code:n = {\def\jlreq@option@fontsize{11pt}}, 11pt .value_forbidden:n = true, @@ -287,69 +299,68 @@ \__jlreq_aftercls_addtodeletecs:N \jlreq@option@jafontsize \__jlreq_aftercls_addtodeletecs:N \jlreq@option@jafontscale %.. 行の長さ -\keys_define:nn { jlreq } { line_length .tl_set:N = \jlreq@option@line@length } +\DeclareKeys [jlreq] { line_length .tl_set:N = \jlreq@option@line@length } \__jlreq_aftercls_addtodeletecs:N \jlreq@option@line@length %.. 1ページあたりの行数 -\keys_define:nn { jlreq } { number_of_lines .tl_set:N = \jlreq@option@number@of@lines } +\DeclareKeys [jlreq] { number_of_lines .tl_set:N = \jlreq@option@number@of@lines } \__jlreq_aftercls_addtodeletecs:N \jlreq@option@number@of@lines % 地の空き量,のどの空き量で配置位置を決める(2.4.1.b)省略されたら中央配置. %.. 天 -\keys_define:nn { jlreq } { head_space .tl_set:N = \jlreq@option@head@space } +\DeclareKeys [jlreq] { head_space .tl_set:N = \jlreq@option@head@space } \__jlreq_aftercls_addtodeletecs:N \jlreq@option@head@space %.. 地 -\keys_define:nn { jlreq } { foot_space .tl_set:N = \jlreq@option@foot@space } +\DeclareKeys [jlreq] { foot_space .tl_set:N = \jlreq@option@foot@space } \__jlreq_aftercls_addtodeletecs:N \jlreq@option@foot@space %.. のど -\keys_define:nn { jlreq } { gutter .tl_set:N = \jlreq@option@gutter } +\DeclareKeys [jlreq] { gutter .tl_set:N = \jlreq@option@gutter } \__jlreq_aftercls_addtodeletecs:N \jlreq@option@gutter %.. 小口 \__jlreq_aftercls_addtodeletecs:N \jlreq@option@fore@edge -\keys_define:nn { jlreq } { +\DeclareKeys [jlreq] { fore_edge .tl_set:N = \jlreq@option@fore@edge, fore-edge .tl_set:N = \jlreq@option@fore@edge } %.. 柱とノンブル % 本文とヘッダ/フッタの間の空き -\keys_define:nn { jlreq } { headfoot_verticalposition .tl_set:N = \jlreq@option@headfoot@verticalpos } +\DeclareKeys [jlreq] { headfoot_verticalposition .tl_set:N = \jlreq@option@headfoot@verticalpos } \__jlreq_aftercls_addtodeletecs:N \jlreq@option@headfoot@verticalpos % 柱やノンブルの左右の空き -\keys_define:nn { jlreq } { headfoot_sidemargin .tl_set:N = \jlreq@headfoot@sidemargin } +\DeclareKeys [jlreq] { headfoot_sidemargin .tl_set:N = \jlreq@headfoot@sidemargin } %.. 段間 -\keys_define:nn { jlreq } { column_gap .tl_set:N = \jlreq@option@column@gap } +\DeclareKeys [jlreq] { column_gap .tl_set:N = \jlreq@option@column@gap } \__jlreq_aftercls_addtodeletecs:N \jlreq@option@column@gap %.. 行送り,指定無しの場合は文字サイズの1.7倍とする.(1.5から2倍が好ましい:2.4.2.d 注3) -\keys_define:nn { jlreq } { - baselineskip .tl_set:N = \jlreq@option@baselineskip, - linegap .code:n = { \def\jlreq@option@baselineskip{1zw + #1} } +\DeclareKeys [jlreq] { + baselineskip .tl_set:N = \jlreqbaselineskip, + linegap .code:n = { \def\jlreqbaselineskip{1zw + #1} } } -\__jlreq_aftercls_addtodeletecs:N \jlreq@option@baselineskip %.. 組み方系 % 行頭に括弧が来たときの配置:3.1.5 % 段落頭指定_折り返し行頭指定 で与える. -\keys_define:nn { jlreq } { open_bracket_pos .choices:nn = {zenkaku_tentsuki,zenkakunibu_nibu,nibu_tentsuki}{\def\jlreq@open@bracket@pos{#1}} } +\DeclareKeys [jlreq] { open_bracket_pos .choices:nn = {zenkaku_tentsuki,zenkakunibu_nibu,nibu_tentsuki}{\def\jlreq@open@bracket@pos{#1}} } % ぶら下げ組みをするか:3.8.2 注1 \newif\ifjlreq@burasage\jlreq@burasagefalse -\keys_define:nn { jlreq } { hanging_punctuation .code:n = {\jlreq@burasagetrue}, hanging_punctuation .value_forbidden:n = true} +\DeclareKeys [jlreq] { hanging_punctuation .code:n = {\jlreq@burasagetrue}, hanging_punctuation .value_forbidden:n = true} % jsarticleと同じkanjiskipを使う \newif\ifjlreq@narrow@kanjiskip\jlreq@narrow@kanjiskipfalse -\keys_define:nn { jlreq } { narrow_kanjiskip .code:n = {\jlreq@narrow@kanjiskiptrue}, narrow_kanjiskip .value_forbidden:n = true} +\DeclareKeys [jlreq] { narrow_kanjiskip .code:n = {\jlreq@narrow@kanjiskiptrue}, narrow_kanjiskip .value_forbidden:n = true} \__jlreq_aftercls_addtodeleteif:N \ifjlreq@narrow@kanjiskip %.. 注 % 傍注のタイプ -\keys_define:nn { jlreq } { sidenote_length .tl_set:N = \jlreq@option@sidenote@length } +\DeclareKeys [jlreq] { sidenote_length .tl_set:N = \jlreq@option@sidenote@length } \__jlreq_aftercls_addtodeletecs:N \jlreq@option@sidenote@length %.. 逆ノンブル \newif\ifjlreq@option@use@reverse@pagination \__jlreq_aftercls_addtodeleteif:N \ifjlreq@option@use@reverse@pagination \jlreq@option@use@reverse@paginationfalse -\keys_define:nn { jlreq } { use_reverse_pagination .code:n = {\jlreq@option@use@reverse@paginationtrue}, use_reverse_pagination .value_forbidden:n = true } +\DeclareKeys [jlreq] { use_reverse_pagination .code:n = {\jlreq@option@use@reverse@paginationtrue}, use_reverse_pagination .value_forbidden:n = true } %.. もろもろ \newif\if@restonecol\@restonecolfalse @@ -358,7 +369,7 @@ \newif\if@tate \@tatefalse \newif\ifjlreq@option@titlepage \jlreq@option@titlepagefalse % titlepageかnotitlepageかが指定された \__jlreq_aftercls_addtodeleteif:N \ifjlreq@option@titlepage -\keys_define:nn { jlreq } { +\DeclareKeys [jlreq] { landscape .code:n = {\@landscapetrue}, landscape .value_forbidden:n = true, tombo .code:n = {\ClassWarningNoLine{jlreq}{The~option~`tombo'~is~not~supported~by~jlreq~class.~Please~use~the~jlreq-trimmarks~package}}, tombow .code:n = {\ClassWarningNoLine{jlreq}{The~option~`tombow'~is~not~supported~by~jlreq~class.~Please~use~the~jlreq-trimmarks~package}}, @@ -368,7 +379,7 @@ \newif\ifjlreq@option@twoside\jlreq@option@twosidefalse % onesideかtwosideが指定された \__jlreq_aftercls_addtodeleteif:N \ifjlreq@option@twoside -\keys_define:nn { jlreq } { +\DeclareKeys [jlreq] { oneside .code:n = { \@twosidefalse\@mparswitchfalse\jlreq@option@twosidetrue }, oneside .value_forbidden:n = true, twoside .code:n = { \@twosidetrue\@mparswitchtrue\jlreq@option@twosidetrue }, twoside .value_forbidden:n = true, onecolumn .code:n = { \@twocolumnfalse }, onecolumn .value_forbidden:n = true, @@ -381,7 +392,7 @@ \newif\if@openright \newif\ifjlreq@option@open \jlreq@option@openfalse % openrightかopenanyが指定された \__jlreq_aftercls_addtodeleteif:N \ifjlreq@option@open -\keys_define:nn { jlreq } { +\DeclareKeys [jlreq] { openright .code:n = { \@openrighttrue\jlreq@option@opentrue }, openright .value_forbidden:n = true, openany .code:n = { \@openrightfalse\jlreq@option@opentrue }, openany .value_forbidden:n = true, leqno .code:n = { \input{leqno.clo } }, leqno .value_forbidden:n = true, @@ -389,12 +400,12 @@ } \newif\ifjlreq@option@enablejfam \jlreq@option@enablejfamtrue \__jlreq_aftercls_addtodeleteif:N \ifjlreq@option@enablejfam -\keys_define:nn { jlreq } { disablejfam .code:n = { \jlreq@option@enablejfamfalse }, disablejfam .value_forbidden:n = true} +\DeclareKeys [jlreq] { disablejfam .code:n = { \jlreq@option@enablejfamfalse }, disablejfam .value_forbidden:n = true} \def\jlreq@note#1{} -\keys_define:nn { jlreq } { jlreq_notes .code:n = { \def\jlreq@note##1{\message{^^JJLReq note: ##1^^J}}}, jlreq_notes .value_forbidden:n = true} +\DeclareKeys [jlreq] { jlreq_notes .code:n = { \def\jlreq@note##1{\message{^^JJLReq note: ##1^^J}}}, jlreq_notes .value_forbidden:n = true} -\keys_set:nn { jlreq } { +\SetKeys [jlreq] { article_type=article,paper=a4, number_of_lines={},line_length = {}, head_space={},foot_space={},gutter={},fore_edge={}, @@ -402,8 +413,9 @@ sidenote_length=0pt,column_gap={2zw}, headfoot_verticalposition = {},headfoot_sidemargin={0pt}, open_bracket_pos=zenkaku_tentsuki, - onecolumn,final } -\ProcessKeysOptions { jlreq } + onecolumn,final +} +\ProcessKeyOptions [jlreq] \legacy_if:nF { jlreq@option@titlepage } { \str_if_eq:VnTF \jlreq@article@type { article } { \@titlepagefalse } { \@titlepagetrue } @@ -1189,23 +1201,22 @@ % \baselineskipの計算 % いったん文字サイズを変更((u)platexの際にzh/zwをきちんとするため) \@setfontsize\normalsize{\jlreq@fontsize}{\jlreq@fontsize}% -\newdimen\jlreq@baselineskip +% 現在の\baselineskipを計算し#1に入れる \ifx l\jlreq@engine - \setlength{\jlreq@baselineskip}{% - \dimexpr\directlua{ + \edef\jlreqbaselineskip{ + \directlua{ local~act = string.char(92)~ - local~s = [[\jlreq@option@baselineskip]]~ + local~s = [[\jlreqbaselineskip]]~ s = s:gsub("[QH]",act .. "dimexpr 0.25mm" .. act .. "relax"):gsub("zh",act .. "zh"):gsub("zw",act .. "zw")~ - tex.print(s)~ - }\relax - }% -\else - \setlength{\jlreq@baselineskip}{\dimexpr\jlreq@option@baselineskip\relax} + tex.print(act .. "unexpanded{" .. s .. "}")~ + } + } \fi -\ifdim\jlreq@fontsize>\jlreq@baselineskip +\dim_set:Nn \l__jlreq_tmpa_dim {\jlreqbaselineskip} +\ifdim\jlreq@fontsize>\l__jlreq_tmpa_dim \ClassError{jlreq}{The~baselineskip~is~less~than~fontsize}{\@ehc}% \fi -\bool_if:nT { \dim_compare_p:n { \jlreq@baselineskip < 1.5\zw } || \dim_compare_p:n { \jlreq@baselineskip > 2\zw } } { +\bool_if:nT { \dim_compare_p:n { \l__jlreq_tmpa_dim < 1.5\zw } || \dim_compare_p:n { \l__jlreq_tmpa_dim > 2\zw } } { \jlreq@note { 行間は二分以上全角以下が望ましい (2.4.2.d~注3).} } @@ -1266,7 +1277,7 @@ \fi \renewcommand{\normalsize}{% - \@setfontsize\normalsize{\jlreq@fontsize}{\jlreq@baselineskip}% + \@setfontsize\normalsize{\jlreq@fontsize}{\dimexpr\jlreqbaselineskip\relax}% \abovedisplayskip 1.1\jlreq@fontsize \@plus .3\jlreq@fontsize \@minus .4\jlreq@fontsize \abovedisplayshortskip \z@ \@plus .3\jlreq@fontsize \belowdisplayskip .9\jlreq@fontsize \@plus.3\jlreq@fontsize \@minus.4\jlreq@fontsize @@ -1286,26 +1297,49 @@ % 2.5.2 \baselineskipは一定の方がよい? % \@listiは再定義しないようにした.(\normalsizeと共用でJLReq通りだと思う.) \newcommand{\footnotesize}{% - \@setfontsize\footnotesize{.8\jlreq@fontsize}{\dimexpr 115\jlreq@baselineskip/170\relax}% 脚注文字サイズの二分より少し小さい値を行間に: 4.2.5.e + \setlength{\jlreq@tempdima}{\dimexpr\jlreqbaselineskip\relax} + \@setfontsize\footnotesize{.8\jlreq@fontsize}{\dimexpr 115\jlreq@tempdima/170\relax}% 脚注文字サイズの二分より少し小さい値を行間に: 4.2.5.e \abovedisplayskip .6\jlreq@fontsize \@plus.2\jlreq@fontsize \@minus.4\jlreq@fontsize \abovedisplayshortskip \z@ \@plus.1\jlreq@fontsize \belowdisplayshortskip .3\jlreq@fontsize \@plus.1\jlreq@fontsize \@minus.2\jlreq@fontsize \belowdisplayskip \abovedisplayskip} -% tsize10.cloの引数を,そのまま\jlreq@fontsize/\jlreq@baselineskipでスケーリングしているだけ. +% tsize10.cloの引数を,そのまま\jlreq@fontsize/\jlreqbaselineskipでスケーリングしているだけ. \newcommand{\small}{% % jsarticleのもの - \@setfontsize\small{.9\jlreq@fontsize}{\dimexpr 13\jlreq@baselineskip/17\relax}% + \setlength{\jlreq@tempdima}{\dimexpr\jlreqbaselineskip\relax} + \@setfontsize\small{.9\jlreq@fontsize}{\dimexpr 13\jlreq@tempdima/17\relax}% \abovedisplayskip .9\jlreq@fontsize \@plus.3\jlreq@fontsize \@minus.4\jlreq@fontsize \abovedisplayshortskip \z@ \@plus.3\jlreq@fontsize \belowdisplayshortskip \abovedisplayshortskip \belowdisplayskip \abovedisplayskip} -\newcommand{\scriptsize}{\@setfontsize\scriptsize{\dimexpr 7\jlreq@fontsize/10\relax}{\dimexpr 8\jlreq@baselineskip/17\relax}} -\newcommand{\tiny}{\@setfontsize\tiny{\dimexpr 5\jlreq@fontsize/10\relax}{\dimexpr 6\jlreq@baselineskip/17\relax}} -\newcommand{\large}{\@setfontsize\large{\dimexpr12\jlreq@fontsize/10\relax}{\jlreq@baselineskip}} -\newcommand{\Large}{\@setfontsize\Large{\dimexpr14\jlreq@fontsize/10\relax}{\dimexpr 21\jlreq@baselineskip/17\relax}} -\newcommand{\LARGE}{\@setfontsize\LARGE{\dimexpr17\jlreq@fontsize/10\relax}{\dimexpr 25\jlreq@baselineskip/17\relax}} -\newcommand{\huge}{\@setfontsize\huge{2\jlreq@fontsize}{\dimexpr 28\jlreq@baselineskip/17\relax}} -\newcommand{\Huge}{\@setfontsize\Huge{\dimexpr 25\jlreq@fontsize/10\relax}{\dimexpr 33\jlreq@baselineskip/17\relax}} +\newcommand{\scriptsize}{ + \setlength{\jlreq@tempdima}{\dimexpr\jlreqbaselineskip\relax} + \@setfontsize\scriptsize{\dimexpr 7\jlreq@fontsize/10\relax}{\dimexpr 8\jlreq@tempdima/17\relax} +} +\newcommand{\tiny}{ + \setlength{\jlreq@tempdima}{\dimexpr\jlreqbaselineskip\relax} + \@setfontsize\tiny{\dimexpr 5\jlreq@fontsize/10\relax}{\dimexpr 6\jlreq@tempdima/17\relax} +} +\newcommand{\large}{ + \setlength{\jlreq@tempdima}{\dimexpr\jlreqbaselineskip\relax} + \@setfontsize\large{\dimexpr12\jlreq@fontsize/10\relax}{\jlreq@tempdima} +} +\newcommand{\Large}{ + \setlength{\jlreq@tempdima}{\dimexpr\jlreqbaselineskip\relax} + \@setfontsize\Large{\dimexpr14\jlreq@fontsize/10\relax}{\dimexpr 21\jlreq@tempdima/17\relax} +} +\newcommand{\LARGE}{ + \setlength{\jlreq@tempdima}{\dimexpr\jlreqbaselineskip\relax} + \@setfontsize\LARGE{\dimexpr17\jlreq@fontsize/10\relax}{\dimexpr 25\jlreq@tempdima/17\relax} +} +\newcommand{\huge}{ + \setlength{\jlreq@tempdima}{\dimexpr\jlreqbaselineskip\relax} + \@setfontsize\huge{2\jlreq@fontsize}{\dimexpr 28\jlreq@tempdima/17\relax} +} +\newcommand{\Huge}{ + \setlength{\jlreq@tempdima}{\dimexpr\jlreqbaselineskip\relax} + \@setfontsize\Huge{\dimexpr 25\jlreq@fontsize/10\relax}{\dimexpr 33\jlreq@tempdima/17\relax} +} %. plextから拝借 \def\jlreq@Kanji#1{\expandafter\kansuji\csname c@#1\endcsname} @@ -1833,42 +1867,32 @@ %.. 別行見出し % \jlreq@BlockHeading@start:別行見出しを出力する命令. -% \jlreq@BlockHeading@start{1 = 命令名}{2 = レベル}{3 = スペース関連}{4 = カウンタ関連}{5 = フォーマット関連}{6 = 全体フォーマット}*{見出し}[副題] +% \jlreq@BlockHeading@start{1 = 命令名}{2 = レベル}{3 = スペース関連}{4 = カウンタ関連}*[running head]{見出し}[副題] % カウンタ関連=-,*,無し:-はカウンタ関連を処理しない.*はさらに目次に追加しない(星付き命令と同様).星付きで呼び出された時は常に*同等. % スペース関連={配置:lcr(左中央右)}{字下げ(寸法)}{字上げ(寸法)}{前空き}{後空き}{行取りの行数}{空か*か,偶数ページでも改ページを許可するならば空} % 前/後空きはprefixにa:/s:/r:が入る.r:は空きがその値そのものになる.a:/s:は行取りに加えて入る.a:で指定された空きはページ行頭では入らない % 後空きの時はs:は指定できない. -% フォーマット関連: -% フォーマット関連={{ラベルのみのフォーマット}{ラベルフォーマット}{見出し文字列フォーマット}{見出し文字列フォーマット(ラベル無し)}{副題フォーマット}{副題フォーマット(ラベル無し)}}{{前フォーマットラベルあり}{前フォーマットラベルなし}{見出し全体のフォーマット}{後ろフォーマットラベルあり}{後ろフォーマットラベルなし}} +% フォーマット関連:あらかじめマクロに入れておく +% \jlreq@BlockHeading@start@eachformat: {ラベルのみのフォーマット}{ラベルフォーマット}{見出し文字列フォーマット}{見出し文字列フォーマット(ラベル無し)}{副題フォーマット}{副題フォーマット(ラベル無し)} +% \jlreq@BlockHeading@start@format: {前フォーマットラベルあり}{前フォーマットラベルなし}{見出し全体のフォーマット}{後ろフォーマットラベルあり}{後ろフォーマットラベルなし} +% \jlreq@BlockHeading@start@totalformat: 全体フォーマット % 見出しそのものは「全体フォーマット」に従い出力される.パラメータトークン#1を含み,#1=見出し本体:スペース関連と上の「見出し全体のフォーマット」に基づいて整形される. % 見出し全体のフォーマット内では#1=ラベル,#2=見出し文字列,#3=副題,それぞれ各々のフォーマットに基づき整形される. % ラベルフォーマットでは#1=カウンタ名,見出し文字列フォーマットでは#1=見出し文字列,副題フォーマットでは#1=副題 % ラベルのみのフォーマットは目次に使われる. -\long\def\jlreq@BlockHeading@start#1#2#3#4#5#6{% - \if@noskipsec\leavevmode\fi - % #5と#6は\parを含むかもしれないので引数渡しはしない(後の\@ifstarで詰まる) - \edef\jlreq@BlockHeading@start@eachformat{\exp_not:o {\@firstoftwo#5}}% - \edef\jlreq@BlockHeading@start@format{\exp_not:o {\@secondoftwo#5}}% - \edef\jlreq@BlockHeading@start@totalformat{\unexpanded{#6}}% - \jlreq@BlockHeading@start@{#1}{#2}{#3}{#4}% -} -% {1 = 命令}{2 = レベル}{3 = スペース関連} -\long\def\jlreq@BlockHeading@start@#1#2#3#4{% - \@ifstar{\@dblarg{\jlreq@BlockHeading@start@@{#1}{#2}{#3}{*}}}{\@dblarg{\jlreq@BlockHeading@start@@{#1}{#2}{#3}{#4}}}% -} % {1 = 命令}{2 = レベル}{3 = スペース関連}{4 = *}[5 = running head]{6 = 見出し} -\long\def\jlreq@BlockHeading@start@@#1#2#3#4[#5]#6{% - \@ifnextchar[{\jlreq@BlockHeading@start@@@{#1}{#2}{#3}{#4}{#5}{#6}}{\jlreq@BlockHeading@start@@@{#1}{#2}{#3}{#4}{#5}{#6}[]}% +\long\def\jlreq@BlockHeading@start#1#2#3#4[#5]#6{% + \@ifnextchar[{\jlreq@BlockHeading@start@i{#1}{#2}{#3}{#4}{#5}{#6}}{\jlreq@BlockHeading@start@i{#1}{#2}{#3}{#4}{#5}{#6}[]}% } % {1 = 命令}{2 = レベル}{3 = スペース関連}{4 = *}{5 = running head}{6 = 見出し}[7 = 副題] -\long\def\jlreq@BlockHeading@start@@@#1#2#3#4#5#6[#7]{% - \edef\jlreq@do{\unexpanded{\jlreq@BlockHeading@start@@@@{#1}{#2}{#3}}{\exp_not:o {\jlreq@BlockHeading@start@totalformat}}}% +\long\def\jlreq@BlockHeading@start@i#1#2#3#4#5#6[#7]{% + \edef\jlreq@do{\unexpanded{\jlreq@BlockHeading@start@ii{#1}{#2}{#3}}{\exp_not:o {\jlreq@BlockHeading@start@totalformat}}}% \jlreq@do{#4}{#5}{#6}{#7}% } % {1 = 命令}{2 = レベル}{3 = スペース関連}{4 = 全フォーマット}{5 = *}{6 = running head}{7 = 見出し}{8 = 副題} -\long\def\jlreq@BlockHeading@start@@@@#1#2#3#4#5#6#7#8{% +\long\def\jlreq@BlockHeading@start@ii#1#2#3#4#5#6#7#8{% \global\advance\jlreq@BlockHeading@spaces@current@count by 1 \tl_gput_right:Nn \jlreq@BlockHeading@spaces@current@sequence {_#1}% \edef\jlreq@tempa##1##2##3##4##5##6##7{% @@ -2200,18 +2224,12 @@ \jlreq@ifgluezero\jlreq@tempskipb{}{\vskip\jlreq@tempskipb}% \edef\jlreq@do{% \dim_compare:nF { \parskip=0pt } { -% \exp_not:N \cs_set:Nn \exp_not:N \g__jlreq_gyodori_hook_par: { -% \noexpand\parskip=\the\parskip\noexpand\relax -% \exp_not:n { \cs_set:Nn \g__jlreq_gyodori_hook_par: {} } -% } \exp_not:N \AddToHook { para/before } { \noexpand\parskip=\the\parskip\noexpand\relax } \noexpand\parskip=0pt } }% \expandafter}\jlreq@do } -%\cs_set:Nn \g__jlreq_gyodori_hook_par: {} -%\PushPostHook{par}{\g__jlreq_gyodori_hook_par:} % 行取り情報をゲットだぜ @@ -2498,34 +2516,46 @@ \def\jlreq@totalformat@after{}% }% \fi + % フォーマットを指定のマクロに入れる命令群 + \tl_set:Nx \l__jlreq_tmpa_tl { + \exp_not:n {\edef\jlreq@BlockHeading@start@eachformat}{\exp_not:N \unexpanded{% + {\exp_not:o {\jlreq@label@format}}{\exp_not:o {\jlreq@label@format@modified}}% + {\exp_not:o {\jlreq@heading@text@format@wlabel}}{\exp_not:o {\jlreq@heading@text@format@wolabel}}% + {\exp_not:o {\jlreq@subtitle@format@wlabel}}{\exp_not:o {\jlreq@subtitle@format@wolabel}}% + }}% + \exp_not:n {\edef\jlreq@BlockHeading@start@format}{\exp_not:N \unexpanded{% + {\exp_not:o {\jlreq@pre@format@wlabel}}{\exp_not:o {\jlreq@pre@format@wolabel}}% + {\exp_not:o {\jlreq@format}}% + {}{}% + }}% + \exp_not:n {\edef\jlreq@BlockHeading@start@totalformat}{\exp_not:N \unexpanded{% + {\exp_not:n { + \par + \addpenalty\@secpenalty + \addvspace{0pt}\relax % 改ページ関係(#54,#100),よくわかっていない + }} + {\exp_not:o {\jlreq@totalformat}}{\exp_not:o {\jlreq@totalformat@after}}% + }}% + } + % \jlreq@BlockHeading@startの第四引数 + \tl_set:Nx \l__jlreq_tmpb_tl { + {\exp_not:o {\jlreq@align}}{\exp_not:o {\jlreq@indent}}{\exp_not:o {\jlreq@end@indent}}\exp_not:o {\jlreq@spaceset}{\exp_not:o {\jlreq@allowbreak@evenpage}} + } \edef\jlreq@do{% \exp_not:o {\jlreq@do}% \noexpand\edef\exp_not:c {jlreq@headingcs@#1}{\noexpand\unexpanded{% \exp_not:N \g__jlreq_hook_beforeheading:n {#1} \exp_not:o {\jlreq@pagebreak}% \tl_if_empty:NF \l__jlreq_pagestyle_tl { \exp_not:N \thispagestyle {\exp_not:o { \l__jlreq_pagestyle_tl } } } - \unexpanded{\jlreq@BlockHeading@start{#1}{#2}}% - {{\exp_not:o {\jlreq@align}}{\exp_not:o {\jlreq@indent}}{\exp_not:o {\jlreq@end@indent}}\exp_not:o {\jlreq@spaceset}{\exp_not:o {\jlreq@allowbreak@evenpage}}}% - {\ifjlreq@number\else -\fi}% - {% - {% - {\exp_not:o {\jlreq@label@format}}{\exp_not:o {\jlreq@label@format@modified}}% - {\exp_not:o {\jlreq@heading@text@format@wlabel}}{\exp_not:o {\jlreq@heading@text@format@wolabel}}% - {\exp_not:o {\jlreq@subtitle@format@wlabel}}{\exp_not:o {\jlreq@subtitle@format@wolabel}}% - }% - {% - {\exp_not:o {\jlreq@pre@format@wlabel}}{\exp_not:o {\jlreq@pre@format@wolabel}}% - {\exp_not:o {\jlreq@format}}% - {}{}% - }% - }% - {{\exp_not:n { - \par - \addpenalty\@secpenalty - \addvspace{0pt}\relax % 改ページ関係(#54,#100),よくわかっていない - }}{\exp_not:o {\jlreq@totalformat}}{\exp_not:o {\jlreq@totalformat@after}}}% - }}% - \noexpand\def\exp_not:c {#1}{\exp_not:c {jlreq@headingcs@#1}}% + \exp_not:o \l__jlreq_tmpa_tl + \exp_not:N \@ifstar + {\exp_not:N \@dblarg{\exp_not:N \jlreq@BlockHeading@start{\exp_not:n {#1}}{\exp_not:n {#2}}{\exp_not:o {\l__jlreq_tmpb_tl}}{*}}}% + {\exp_not:N \@dblarg{\exp_not:N \jlreq@BlockHeading@start{\exp_not:n {#1}}{\exp_not:n {#2}}{\exp_not:o {\l__jlreq_tmpb_tl}}{\ifjlreq@number\else -\fi}}}% + } + }% + \noexpand\def\exp_not:c {#1}{ + \exp_not:c {jlreq@headingcs@#1} + }% }% \expandafter\endgroup \jlreq@do @@ -3027,8 +3057,8 @@ \cs_set:Nn \__jlreq_CutinHeading_start_aux:nnnnnn{% % 一行で処理したときの見出し長さを計測 \group_begin: - \hbox_set:Nn \l_jlreq_tmpa_box {#1#6} - \dim_set:Nn \l__jlreq_tmpa_dim { \box_wd:N \l_jlreq_tmpa_box} + \hbox_set:Nn \l__jlreq_tmpa_box {#1#6} + \dim_set:Nn \l__jlreq_tmpa_dim { \box_wd:N \l__jlreq_tmpa_box} % 何行必要かを\l__jlreq_cutinheading_linecount_tlに入れる \dim_compare:nTF { \l__jlreq_tmpa_dim > #5} { \tl_set:Nn \l__jlreq_cutinheading_linecount_tl {3} @@ -3038,31 +3068,31 @@ } { \tl_set:Nn \l__jlreq_cutinheading_linecount_tl {1} } } % \l__jlreq_tmpa_dimが実際の一行の長さに近い \dim_set:Nn \l__jlreq_tmpa_dim { \l__jlreq_tmpa_dim / \l__jlreq_cutinheading_linecount_tl } - % \l_jlreq_tmpb_boxに見出し部分を,\l__jlreq_cutinheading_linecount_tlに見出し自身に何行使うかを入れる + % \l__jlreq_tmpb_boxに見出し部分を,\l__jlreq_cutinheading_linecount_tlに見出し自身に何行使うかを入れる \int_compare:nTF { \l__jlreq_cutinheading_linecount_tl = 1 }{ - \vbox_set:Nn \l_jlreq_tmpb_box {\parindent=0pt\rightskip=0pt\leftskip=0pt\box_use_drop:N \l_jlreq_tmpa_box} + \vbox_set:Nn \l__jlreq_tmpb_box {\parindent=0pt\rightskip=0pt\leftskip=0pt\box_use_drop:N \l__jlreq_tmpa_box} \tl_set:Nn \l__jlreq_cutinheading_linecount_tl {2} }{ \jlreq@inlinenote@determinelength{#6}{#1}{}{\l__jlreq_cutinheading_linecount_tl}{\l__jlreq_cutinheading_linecount_tl}{\l__jlreq_tmpa_dim}{\linewidth}% - \box_set_eq:NN \l_jlreq_tmpb_box \jlreq@resultbox + \box_set_eq:NN \l__jlreq_tmpb_box \jlreq@resultbox \tl_set:Nn \l__jlreq_cutinheading_linecount_tl {3} } % 普通の一行の高さ/深さに合わせて見出しのボックスを作る - \setbox\l_jlreq_tmpa_box =\vtop to \dimexpr\numexpr\l__jlreq_cutinheading_linecount_tl - 1\relax\baselineskip + 1\jlreq@zh\relax{\skip_vertical:n {0pt~plus~1fill~minus~1fill} \box_use_drop:N \l_jlreq_tmpb_box \skip_vertical:n {0pt~plus~1fill~minus~1fill}}% + \setbox\l__jlreq_tmpa_box =\vtop to \dimexpr\numexpr\l__jlreq_cutinheading_linecount_tl - 1\relax\baselineskip + 1\jlreq@zh\relax{\skip_vertical:n {0pt~plus~1fill~minus~1fill} \box_use_drop:N \l__jlreq_tmpb_box \skip_vertical:n {0pt~plus~1fill~minus~1fill}}% % 高さを通常の一行のそれにする - \hbox_set:Nn \l_jlreq_tmpc_box {阿} - \box_set_dp:Nn \l_jlreq_tmpa_box { \box_ht:N \l_jlreq_tmpa_box + \box_dp:N \l_jlreq_tmpa_box - \box_ht:N \l_jlreq_tmpc_box } - \box_set_ht:Nn \l_jlreq_tmpa_box { \box_ht:N \l_jlreq_tmpc_box } + \hbox_set:Nn \l__jlreq_tmpc_box {阿} + \box_set_dp:Nn \l__jlreq_tmpa_box { \box_ht:N \l__jlreq_tmpa_box + \box_dp:N \l__jlreq_tmpa_box - \box_ht:N \l__jlreq_tmpc_box } + \box_set_ht:Nn \l__jlreq_tmpa_box { \box_ht:N \l__jlreq_tmpc_box } \noindent \hspace*{#2}% - \box_use:N \l_jlreq_tmpa_box + \box_use:N \l__jlreq_tmpa_box \hspace*{#3}% % でかい見出しボックスの分をキャンセルする空きを入れる - % \baselineskip - box_ht:N \l_jlreq_tmpc_boxはTeXが挿入するスキップの分 + % \baselineskip - box_ht:N \l__jlreq_tmpc_boxはTeXが挿入するスキップの分 \cs_set:Nx \l__jlreq_do:{ \exp_not:N \par - \exp_not:N \skip_vertical:n {\dim_eval:n {-\box_ht:N \l_jlreq_tmpa_box - \box_dp:N \l_jlreq_tmpa_box - \baselineskip + \box_ht:N \l_jlreq_tmpc_box}} - \exp_not:N\hangindent= \dim_eval:n {#2 + \box_wd:N \l_jlreq_tmpa_box + #3} \exp_not:N \relax + \exp_not:N \skip_vertical:n {\dim_eval:n {-\box_ht:N \l__jlreq_tmpa_box - \box_dp:N \l__jlreq_tmpa_box - \baselineskip + \box_ht:N \l__jlreq_tmpc_box}} + \exp_not:N\hangindent= \dim_eval:n {#2 + \box_wd:N \l__jlreq_tmpa_box + #3} \exp_not:N \relax \exp_not:N\hangafter=-\l__jlreq_cutinheading_linecount_tl\relax }% \exp_after:wN \group_end: @@ -3136,14 +3166,14 @@ \str_set:Nn \l__jlreq_tmpa_str {#2} \str_case_e:nn { \jlreq@HeadingType {#1} } { { BlockHeading } { - \bool_set_false:N \l_jlreq_tmpa_bool - \str_if_in:NnT \l__jlreq_tmpa_str { before_space= } { \bool_set_true:N \l_jlreq_tmpa_bool } - \str_if_in:NnT \l__jlreq_tmpa_str { before_space~= } { \bool_set_true:N \l_jlreq_tmpa_bool } - \bool_if:NT \l_jlreq_tmpa_bool {\tl_put_left:Nn \l__jlreq_tmpa_tl {before_lines={},} } - \bool_set_false:N \l_jlreq_tmpa_bool - \str_if_in:NnT \l__jlreq_tmpa_str { after_space= } { \bool_set_true:N \l_jlreq_tmpa_bool } - \str_if_in:NnT \l__jlreq_tmpa_str { after_space~= } { \bool_set_true:N \l_jlreq_tmpa_bool } - \bool_if:NT \l_jlreq_tmpa_bool {\tl_put_left:Nn \l__jlreq_tmpa_tl {after_lines={},}} + \bool_set_false:N \l__jlreq_tmpa_bool + \str_if_in:NnT \l__jlreq_tmpa_str { before_space= } { \bool_set_true:N \l__jlreq_tmpa_bool } + \str_if_in:NnT \l__jlreq_tmpa_str { before_space~= } { \bool_set_true:N \l__jlreq_tmpa_bool } + \bool_if:NT \l__jlreq_tmpa_bool {\tl_put_left:Nn \l__jlreq_tmpa_tl {before_lines={},} } + \bool_set_false:N \l__jlreq_tmpa_bool + \str_if_in:NnT \l__jlreq_tmpa_str { after_space= } { \bool_set_true:N \l__jlreq_tmpa_bool } + \str_if_in:NnT \l__jlreq_tmpa_str { after_space~= } { \bool_set_true:N \l__jlreq_tmpa_bool } + \bool_if:NT \l__jlreq_tmpa_bool {\tl_put_left:Nn \l__jlreq_tmpa_tl {after_lines={},}} } } \cs_set:Nx \l_jlreq_do: { @@ -3998,7 +4028,7 @@ % \jlreq@resultboxに整形結果を返す(垂直ボックス).見つからなかったらvoid.\globalに設定する. \long\def\jlreq@inlinenote@determinelength#1#2#3#4#5#6#7{% \begingroup - % \message{#1 の試行開始,行数 = #5, \the\dimexpr#6\relax から \the\dimexpr#7\relaxまで}% +% \message{#1 の試行開始,行数 = #5, \the\dimexpr#6\relax から \the\dimexpr#7\relax まで(長さ\the\dimexpr #7 - #6\relax )}% \@tempcnta=1\relax \def\@tempa{}% % 調整に使う行の\parshape指定を\@tempaに入れる.長さは\jlreq@tempdima. @@ -4019,12 +4049,12 @@ \parindent=0pt\leftskip=0pt\rightskip=0pt \parshape #5~#3~\@tempa 0pt~\the\maxdimen #1\par\global\@tempcntb=\prevgraf}% - % \message{\string\jlreq@tempdima = \the\jlreq@tempdima で試行,行数は\the\@tempcntb , 書式 #5 #3 \@tempa 0pt \the\maxdimen}% +% \message{\string\jlreq@tempdima = \the\jlreq@tempdima で試行,行数は\the\@tempcntb , 書式~#5~#3~\@tempa~0pt~\the\maxdimen}% \fi \jlreq@getlastbox{\@tempboxa}% \setbox\jlreq@tempboxa=\box\jlreq@resultbox \ifnum\@tempcntb<#5\relax% 行数が達していないならOK - % \message{行数 = \the\@tempcntb により確定} +% \message{行数 = \the\@tempcntb により確定} % #5行になるまで空の水平ボックスを加えていく. \global\setbox\jlreq@resultbox=\vbox{#2% \unvbox\@tempboxa\hbox{\unhbox\jlreq@tempboxa\unskip\unskip\unpenalty}% @@ -4034,7 +4064,7 @@ % そうでない場合は最後の二行の長さを比較する \jlreq@getlastbox{\@tempboxa}% \setbox\jlreq@tempboxb=\box\jlreq@resultbox - % \message{最終行の長さ \the\wd\jlreq@tempboxa, その前の長さ \the\wd\jlreq@tempboxb}% +% \message{最終行の長さ \the\wd\jlreq@tempboxa, その前の長さ \the\wd\jlreq@tempboxb}% \ifdim\wd\jlreq@tempboxa>\wd\jlreq@tempboxb \advance\jlreq@tempdima by 0.3pt\relax% 0.3ptに意味はない \else @@ -6194,17 +6224,17 @@ \ltj@setpar@global \cs_set:Nn \l_jlreq_do: {} \tl_if_empty:nF {#1} { - \skip_set:Nn \l_jlreq_tmpa_skip { #1 } + \skip_set:Nn \l__jlreq_tmpa_skip { #1 } \cs_set:Nx \l_jlreq_do: { \exp_not:o \l_jlreq_do: - \exp_not:N \cs_set:Npn \exp_not:N \jlreqkanjiskip { \skip_use:N \l_jlreq_tmpa_skip } - \exp_not:N \ltjsetkanjiskip \skip_use:N \l_jlreq_tmpa_skip + \exp_not:N \cs_set:Npn \exp_not:N \jlreqkanjiskip { \skip_use:N \l__jlreq_tmpa_skip } + \exp_not:N \ltjsetkanjiskip \skip_use:N \l__jlreq_tmpa_skip } } \tl_if_empty:nF {#2} { - \skip_set:Nn \l_jlreq_tmpa_skip { #2 } + \skip_set:Nn \l__jlreq_tmpa_skip { #2 } \cs_set:Nx \l_jlreq_do: { \exp_not:o \l_jlreq_do: - \exp_not:N \cs_set:Npn \exp_not:N \jlreqxkanjiskip { \skip_use:N \l_jlreq_tmpa_skip } - \exp_not:N \ltjsetxkanjiskip \skip_use:N \l_jlreq_tmpa_skip + \exp_not:N \cs_set:Npn \exp_not:N \jlreqxkanjiskip { \skip_use:N \l__jlreq_tmpa_skip } + \exp_not:N \ltjsetxkanjiskip \skip_use:N \l__jlreq_tmpa_skip } } \exp_after:wN \group_end: @@ -6215,17 +6245,17 @@ \group_begin: \cs_set:Nn \l_jlreq_do: {} \tl_if_empty:nF {#1} { - \skip_set:Nn \l_jlreq_tmpa_skip { #1 } + \skip_set:Nn \l__jlreq_tmpa_skip { #1 } \cs_set:Nx \l_jlreq_do: { \exp_not:o \l_jlreq_do: - \exp_not:N \cs_set:Npx \exp_not:N \jlreqkanjiskip { \skip_use:N \l_jlreq_tmpa_skip } - \exp_not:N \skip_set:Nn \exp_not:N \kanjiskip { \skip_use:N \l_jlreq_tmpa_skip } + \exp_not:N \cs_set:Npx \exp_not:N \jlreqkanjiskip { \skip_use:N \l__jlreq_tmpa_skip } + \exp_not:N \skip_set:Nn \exp_not:N \kanjiskip { \skip_use:N \l__jlreq_tmpa_skip } } } \tl_if_empty:nF {#2} { - \skip_set:Nn \l_jlreq_tmpa_skip { #2 } + \skip_set:Nn \l__jlreq_tmpa_skip { #2 } \cs_set:Nx \l_jlreq_do: { \exp_not:o \l_jlreq_do: - \exp_not:N \cs_set:Npx \exp_not:N \jlreqxkanjiskip { \skip_use:N \l_jlreq_tmpa_skip } - \exp_not:N \skip_set:Nn \exp_not:N \xkanjiskip { \skip_use:N \l_jlreq_tmpa_skip } + \exp_not:N \cs_set:Npx \exp_not:N \jlreqxkanjiskip { \skip_use:N \l__jlreq_tmpa_skip } + \exp_not:N \skip_set:Nn \exp_not:N \xkanjiskip { \skip_use:N \l__jlreq_tmpa_skip } } } \exp_after:wN \group_end: |