diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/jlreq')
-rw-r--r-- | Master/texmf-dist/tex/latex/jlreq/jlreq.cls | 1639 |
1 files changed, 942 insertions, 697 deletions
diff --git a/Master/texmf-dist/tex/latex/jlreq/jlreq.cls b/Master/texmf-dist/tex/latex/jlreq/jlreq.cls index a06ad633fc2..2f94644b9e8 100644 --- a/Master/texmf-dist/tex/latex/jlreq/jlreq.cls +++ b/Master/texmf-dist/tex/latex/jlreq/jlreq.cls @@ -5,25 +5,32 @@ %% % (based on JLReq 20200811 https://www.w3.org/TR/2020/NOTE-jlreq-20200811/) \NeedsTeXFormat{LaTeX2e} -\ProvidesClass{jlreq}[2021/11/05 jlreq] +\ProvidesClass{jlreq}[2022/04/05 jlreq] \RequirePackage{l3keys2e} \RequirePackage{etoolbox} -\RequirePackage{jlreq-helpers} +\RequirePackage{jlreq-helpers}[2021/08/12] \ExplSyntaxOn -\tl_new:N \l_jlreq_tmpa_tl +\int_new:N \l__jlreq_tmpa_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 +\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 -\seq_new:N \l_jlreq_tmpa_seq -\dim_new:N \l_jlreq_tmpa_dim +\seq_new:N \l__jlreq_tmpa_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 +\prop_new:N \l__jlreq_tmpa_prop + +\tl_new:N \l__jlreq_result_tl +\prop_new:N \l__jlreq_result_prop \cs_set:Nn \__jlreq_undeferr:n {\ClassError{jlreq}{Trying~to~delete~\string#1~even~though~it~is~not~defined,~may~be~a~bug}{\@ehc}} % クラスファイル内でしか使わないマクロをクラスファイル終了時に未定義にする @@ -66,11 +73,29 @@ \expandafter\endgroup \jlreq@do } + \def\jlreq@useoriginalcs#1{% \jlreq@if{\ifcsname jlreq@original@#1\endcsname\fi}% {\csname jlreq@original@#1\endcsname}% {#1}% } +\def\jlreq@useoriginalcs@witharguments#1#2{% + \group_begin: + \tl_set:Nx \l__jlreq_do_tl { + \exp_not:n{\escapechar=`\\\relax}% + \exp_not:n{\catcode`@=11\relax}% + \exp_not:N \scantokens{% + \jlreq@if{\ifcsname jlreq@original@#1\endcsname\fi}% + {\exp_not:o {\csname jlreq@original@#1\endcsname}}% + {\exp_not:o {\csname #1\endcsname}}% + \exp_not:n {#2}% + } + \exp_not:N \catcode`@=\the\catcode`@\exp_not:N \relax + \exp_not:N \escapechar=\the\escapechar\exp_not:N \relax + } + \exp_after:wN \group_end: + \l__jlreq_do_tl +} \def\jlreq@restoreoriginalcs#1{% \jlreq@if{\ifcsname jlreq@original@\expandafter\@gobble\string#1\endcsname\fi}% {\expandafter\let\expandafter#1\csname jlreq@original@\expandafter\@gobble\string#1\endcsname}{}% @@ -113,8 +138,7 @@ } \keys_define:nn { jlreq } { paper .code:n = { - \str_case:nVF {#1} \g__jlreq_papersizelist_tl - { + \str_case:nVF {#1} \g__jlreq_papersizelist_tl { \jlreq@helper@dividebycomma{#1}% \legacy_if:nTF { jlreq@result } { \setlength{\paperwidth}{\dimexpr\jlreq@resulta\relax} @@ -303,13 +327,13 @@ %.. 柱とノンブル % 本文とヘッダ/フッタの間の空き -\keys_define:nn { jlreq } { headfoot_verticalposition .tl_set:N = \jlreq@option@headfoot@verticalpos} +\keys_define:nn { 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} +\keys_define:nn { jlreq } { headfoot_sidemargin .tl_set:N = \jlreq@headfoot@sidemargin } %.. 段間 -\keys_define:nn { jlreq } { column_gap .tl_set:N = \jlreq@option@column@gap} +\keys_define:nn { 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) @@ -500,7 +524,7 @@ % #1の先頭が文字か \long\def\jlreq@ifletter#1{% - \jlreq@iffirsttoken{#1}{ }{\@secondoftwo}{% + \jlreq@iffirsttoken{#1}{~}{\@secondoftwo}{% \expandafter\expandafter\expandafter\jlreq@helper@ifletter\jlreq@getfirsttoken#1\jlreq@uniqtoken{}\jlreq@endmark@ }% } @@ -805,25 +829,29 @@ \def\DeclareFontShape#1#2#3#4#5#6{ \group_begin: \bool_if:nT { \str_if_eq_p:nn {#1} {JY3} || \str_if_eq_p:nn {#1} {JT3} } { - \tl_set:Nx \l_jlreq_tmpa_tl {#5} - \tl_if_in:NnTF \l_jlreq_tmpa_tl { jfm=jlreq} { - \tl_if_in:NnTF \l_jlreq_tmpa_tl { jfm=jlreqv }{ - \tl_replace_all:Nnn \l_jlreq_tmpa_tl { jfm=jlreqv } { jfm=jlreqv-jidori } + \tl_set:Nx \l__jlreq_tmpa_tl {#5} + \tl_if_in:NnTF \l__jlreq_tmpa_tl { jfm=jlreq} { + \tl_if_in:NnTF \l__jlreq_tmpa_tl { jfm=jlreqv }{ + \tl_replace_all:Nnn \l__jlreq_tmpa_tl { jfm=jlreqv } { jfm=jlreqv-jidori } }{ - \tl_replace_all:Nnn \l_jlreq_tmpa_tl { jfm=jlreq } { jfm=jlreq-jidori } + \tl_replace_all:Nnn \l__jlreq_tmpa_tl { jfm=jlreq } { jfm=jlreq-jidori } } \cs_set:Nx \l_jlreq_do: { - \exp_not:n{ \jlreq@useoriginalcs{DeclareFontShape} {#1} {#2} {#3} { #4-jidori } } - { \tl_use:N \l_jlreq_tmpa_tl } {#6} + \exp_not:N \jlreq@useoriginalcs@witharguments{DeclareFontShape} { + \exp_not:n { {#1} {#2} {#3} { #4-jidori } } + { \tl_use:N \l__jlreq_tmpa_tl } { \exp_not:n {#6} } + } } }{ - \tl_if_in:NnT \l_jlreq_tmpa_tl {<->ssub} { - \cs_set:Nn \l_jlreq_do: {\jlreq@useoriginalcs{DeclareFontShape} {#1} {#2} {#3} { #4-jidori } {#5} {#6} } + \tl_if_in:NnT \l__jlreq_tmpa_tl {<->ssub} { + \cs_set:Nn \l_jlreq_do: { + \jlreq@useoriginalcs@witharguments{DeclareFontShape} { {#1} {#2} {#3} { #4-jidori } {#5} {#6} } + } } } } \exp_after:wN \group_end: \l_jlreq_do: - \jlreq@useoriginalcs{DeclareFontShape} {#1} {#2} {#3} {#4} {#5} {#6} + \jlreq@useoriginalcs@witharguments{DeclareFontShape} { {#1} {#2} {#3} {#4} {#5} {#6} } } \DeclareFontShape{JY3}{mc}{m}{n}{<->s*[\jlreq@jafontscale]\ltj@stdmcfont :jfm=jlreq;script=latn;-kern}{} \DeclareFontShape{JY3}{gt}{m}{n}{<->s*[\jlreq@jafontscale]\ltj@stdgtfont :jfm=jlreq;script=latn;-kern}{} @@ -890,16 +918,17 @@ \edef\jlreq@charlist@katakana{アイウエオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモヤユヨラリルレロワヰヱヲンヴ\ifx p\jlreq@engine\else ヷヸヹヺ\fi}% カ゚キ゚ク゚ケ゚コ゚セ゚ツ゚ト゚ %.. 行頭括弧調整 -\jlreq@saveoriginalcs{item} \ifx l\jlreq@engine % \itemの直後は折り返し行頭と同じにする. + \jlreq@saveoriginalcs{@item} \cs_set:Nn \__jlreq_hook_everypar: {} - \renewcommand*{\item}{% + \def\@item[#1]{% \cs_set:Nn \__jlreq_hook_everypar: { \cs_set:Nn \__jlreq_hook_everypar: {} \inhibitglue } + \jlreq@useoriginalcs{@item}[#1]% \expandafter\everypar\expandafter{\the\everypar\__jlreq_hook_everypar:} - \jlreq@useoriginalcs{item}% } \else + \jlreq@saveoriginalcs{item} \AtBeginDocument{\PushPostHook{par}{\jlreq@hook@everypar}} \def\jlreq@hook@everypar{} % 非LuaTeXの場合はJFMの入れ替えと\everyparでの処理で対処. @@ -1156,7 +1185,7 @@ \ifx l\jlreq@engine { \catcode` =\active - \global\let =\jlreq@zenkakuspace@main + \protected\gdef {\futurelet\jlreq@nextchar\jlreq@zenkakuspace@ignorespaces} } \AtBeginDocument{\catcode` =\active} \fi @@ -1651,7 +1680,7 @@ %. システム設定 %.. 逆ノンブル \ifjlreq@option@use@reverse@pagination - \AtEndDocument{\clearpage\jlreq@reference@immediate@write{lastpage}{\noexpand\arabic{page}}}% + \AtEndDocument{\clearpage\jlreq@reference@immediate@write{lastpage}{\arabic{page}}}% \def\c@jlreqreversepage{\numexpr\jlreq@reference@ref{lastpage}{0} - \c@page + 1\relax} \def\thejlreqreversepage{\arabic{jlreqreversepage}} \fi @@ -1895,9 +1924,8 @@ \expandafter\xdef\csname jlreq@BlockHeading@spaces@current@space@\the\jlreq@BlockHeading@spaces@current@count\endcsname{% \exp_not:o {\jlreq@tempb}% }% - \def\@tempa##1##2##3{##1}% + \long\def\@tempa##1##2##3{##1}% \expandafter\xdef\csname jlreq@BlockHeading@spaces@current@before@\the\jlreq@BlockHeading@spaces@current@count\endcsname{% - \noexpand\allowbreak \exp_not:o {\@tempa#4}% \exp_not:o {\jlreq@resulta}% \ifjlreq@tempa\unexpanded{% @@ -1905,11 +1933,11 @@ \edef\jlreq@BlockHeading@currentpage{\the\jlreq@currentpage}% }\fi }% - \def\@tempa##1##2##3{##2}% + \long\def\@tempa##1##2##3{##2}% \expandafter\xdef\csname jlreq@BlockHeading@spaces@current@format@\the\jlreq@BlockHeading@spaces@current@count\endcsname{% \exp_not:o {\@tempa#4}% }% - \def\@tempa##1##2##3{##3}% + \long\def\@tempa##1##2##3{##3}% \expandafter\xdef\csname jlreq@BlockHeading@spaces@current@after@\the\jlreq@BlockHeading@spaces@current@count\endcsname{% \exp_not:o {\jlreq@resultc}% \ifjlreq@tempa\unexpanded{% @@ -2115,13 +2143,13 @@ \jlreq@tempskipa=0pt \jlreq@tempskipb=0pt \jlreq@tempskipc=0pt - \tl_set_rescan:Nnn \l_jlreq_tmpa_tl {\ExplSyntaxOn}{#1} -% \message{[[[\expandafter\getcatcode\l_jlreq_tmpa_tl]]]} - \__jlreq_BlockHeading_start_analyzespace:V \l_jlreq_tmpa_tl + \tl_set_rescan:Nnn \l__jlreq_tmpa_tl {\ExplSyntaxOn}{#1} +% \message{[[[\expandafter\getcatcode\l__jlreq_tmpa_tl]]]} + \__jlreq_BlockHeading_start_analyzespace:V \l__jlreq_tmpa_tl \let\jlreq@maeakitype=\jlreq@resulta \let\jlreq@maeaki=\jlreq@resultb - \tl_set_rescan:Nnn \l_jlreq_tmpa_tl {\ExplSyntaxOn}{#2} - \__jlreq_BlockHeading_start_analyzespace:V \l_jlreq_tmpa_tl + \tl_set_rescan:Nnn \l__jlreq_tmpa_tl {\ExplSyntaxOn}{#2} + \__jlreq_BlockHeading_start_analyzespace:V \l__jlreq_tmpa_tl \let\jlreq@ushiroakitype=\jlreq@resulta \let\jlreq@ushiroaki=\jlreq@resultb \def\jlreq@lines{#3}% @@ -2212,7 +2240,6 @@ % 行取り情報をゲットだぜ % \jlreq@resultに{1 = 前空き}{2 = 後ろ空き}{3 = トータル行数}を入れる % #2#3#4はそれぞれ前空き,後ろ開き,トータル行数のデフォルト値 -% *つきは\setkeys*を使う.[]はkeyvalのファミリー. \def\jlreq@BlockHeading@gyodori@parsekeyval{% \@ifstar{\jlreq@BlockHeading@gyodori@parsekeyval@{*}}{\jlreq@BlockHeading@gyodori@parsekeyval@{}}% } @@ -2241,11 +2268,16 @@ \keys_set:nn {#2} {#3} % before/after_lines優先 \tl_if_empty:NF \l__jlreq_before_space_tl { \tl_put_left:Nn \l__jlreq_before_space_tl {r:} } - \tl_if_empty:NF \l__jlreq_before_lines_tl { \tl_set:Nx \l__jlreq_before_space_tl {\exp_not:o {\l__jlreq_before_lines_tl} \baselineskip } } + \tl_if_empty:NF \l__jlreq_before_lines_tl { \tl_set:Nx \l__jlreq_before_space_tl {\exp_not:o {\l__jlreq_before_lines_tl} \exp_not:N \baselineskip } } \tl_if_empty:NT \l__jlreq_before_space_tl { \tl_set:Nn \l__jlreq_before_space_tl {#4} } \tl_if_empty:NF \l__jlreq_after_space_tl { \tl_put_left:Nn \l__jlreq_after_space_tl {r:} } - \tl_if_empty:NF \l__jlreq_after_lines_tl { \tl_set:Nx \l__jlreq_after_space_tl { a:\exp_not:o {\l__jlreq_after_lines_tl} \baselineskip } } + \tl_if_empty:NF \l__jlreq_after_lines_tl { \tl_set:Nx \l__jlreq_after_space_tl { a:\exp_not:o {\l__jlreq_after_lines_tl} \exp_not:N \baselineskip } } \tl_if_empty:NT \l__jlreq_after_space_tl { \tl_set:Nn \l__jlreq_after_space_tl {#5} } + % 内部での空き指定は[asr]:(寸法)の形 + % prefixのasrは次の意味: + % r -> before/after_spaceの指定 + % a -> before/after_linesの指定 + % s -> beforelinesの指定だが*つき. \cs_set:Nx \l__jlreq_do: { \exp_not:n {\def\jlreq@result}{ {\exp_not:o {\l__jlreq_before_space_tl } } @@ -2510,7 +2542,11 @@ {}{}% }% }% - {{}{\exp_not:o {\jlreq@totalformat}}{\exp_not:o {\jlreq@totalformat@after}}}% + {{\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}}% }% @@ -2554,7 +2590,7 @@ % \jlreq@BlockHeading@spaces@current@after@<n> % : n番目の見出しの後ろに出すもの % \jlreq@BlockHeading@spaces@current@count -% : 現在いくつ目の連続する見出しを処理しているかのカウンター +% : 現在いくつの連続する見出しを処理しているかのカウンター \newcount\jlreq@BlockHeading@spaces@current@count \jlreq@BlockHeading@spaces@current@count=0 \def\jlreq@BlockHeading@spaces@current@sequence{} @@ -2973,22 +3009,22 @@ % 一行で処理したときの見出し長さを計測 \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} + \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} { + \dim_compare:nTF { \l__jlreq_tmpa_dim > #5} { \tl_set:Nn \l__jlreq_cutinheading_linecount_tl {3} }{ - \dim_compare:nTF { \l_jlreq_tmpa_dim > #4 }{ + \dim_compare:nTF { \l__jlreq_tmpa_dim > #4 }{ \tl_set:Nn \l__jlreq_cutinheading_linecount_tl {2} } { \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_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に見出し自身に何行使うかを入れる \int_compare:nTF { \l__jlreq_cutinheading_linecount_tl = 1 }{ \vbox_set:Nn \l_jlreq_tmpb_box {\parindent=0pt\rightskip=0pt\leftskip=0pt\hbox_unpack_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}% + \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 \tl_set:Nn \l__jlreq_cutinheading_linecount_tl {3} } @@ -3077,25 +3113,25 @@ \NewDocumentCommand{\ModifyHeading}{m +m}{ \@ifundefined { jlreq@heading@setting@#1 } { \ClassError{jlreq}{Unknown~heading:~#1}{\@ehc} } {} \group_begin: - \tl_set:Nn \l_jlreq_tmpa_tl {#2} - \str_set:Nn \l_jlreq_tmpa_str {#2} + \tl_set:Nn \l__jlreq_tmpa_tl {#2} + \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={},} } + \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={},}} + \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: { \exp_args:Nc \exp_not:o { jlreq@heading@type@#1 } { \exp_not:n { #1 } } { \exp_args:Nc \exp_not:o { jlreq@heading@level@#1 } } - { \exp_args:Nc \exp_not:o { jlreq@heading@setting@#1 },\exp_not:V \l_jlreq_tmpa_tl } + { \exp_args:Nc \exp_not:o { jlreq@heading@setting@#1 },\exp_not:V \l__jlreq_tmpa_tl } } \exp_after:wN \group_end: \l_jlreq_do: @@ -3257,7 +3293,6 @@ } } -\newcommand{\@makefntext}[1]{\jlreq@makefntext{#1}} \keys_define:nn { jlreqsetup } { footnote_second_indent .code:n = { \legacy_if:nF { @tate }{ @@ -3266,27 +3301,29 @@ ( \dim_compare_p:n { -1.01\jlreq@zw < #1 } && \dim_compare_p:n { #1 < -0.99\jlreq@zw } ) }{\jlreq@note{脚注が2行以上となった場合,脚注の2行目以下の字下げを1行目より,脚注の文字サイズの全角アキとするか,逆に,1行目の字下げを2行目より,脚注の文字サイズの全角アキとする~(4.2.5.d).}} } - \cs_set:Npn \jlreq@makefntext ##1 { - \skip_if_eq:nnF { #1 } { 0pt } { \addtolength{\leftskip}{\glueexpr #1\relax} } - % インデントの計算:脚注の長さが文字の整数倍になるように字下げする(4.2.5.b) - \group_begin: - \@tempdima=\dimexpr\columnwidth - \jlreq@footnoteindent\relax - \@tempdimb=1\jlreq@zw - \divide\@tempdima\@tempdimb \multiply\@tempdima\@tempdimb - \cs_set:Nx \l__jlreq_do: { - \exp_not:N \addtolength { \exp_not:N \leftskip } {\dim_eval:n { \columnwidth - \@tempdima - 0.0001pt } } - \exp_not:n { - \parindent=1\jlreq@zw - \noindent - \hskip-\glueexpr #1\relax - \jlreq@referencemark@format{\@thefnmark}% - \hskip\glueexpr 1\jlreq@zw\relax + % ほかからの更新があったならばこれ以上触らない. + \jlreq@if{\ifx\jlreq@saved@@makefntext\@makefntext\fi}{ + \cs_set:Npn \@makefntext ##1 { + \skip_if_eq:nnF { #1 } { 0pt } { \addtolength{\leftskip}{\glueexpr #1\relax} } + % インデントの計算:脚注の長さが文字の整数倍になるように字下げする(4.2.5.b) + \group_begin: + \@tempdima=\dimexpr\columnwidth - \jlreq@footnoteindent\relax + \@tempdimb=1\jlreq@zw + \divide\@tempdima\@tempdimb \multiply\@tempdima\@tempdimb + \cs_set:Nx \l__jlreq_do: { + \exp_not:N \addtolength { \exp_not:N \leftskip } {\dim_eval:n { \columnwidth - \@tempdima - 0.0001pt } } } - } - \exp_after:wN \group_end: - \l__jlreq_do: - ##1 - } + \exp_after:wN \group_end: + \l__jlreq_do: + \parindent=1\jlreq@zw + \noindent + \hskip-\glueexpr #1\relax + \hbox{\jlreq@referencemark@format{\@thefnmark}}% + \hskip\glueexpr 1\jlreq@zw\relax + ##1% + } + \let\jlreq@saved@@makefntext=\@makefntext + }{} } } @@ -3590,7 +3627,7 @@ \jlreq@tempafalse % headingsが指定された \jlreq@tempbfalse % paragraphが指定された % \jlreq@tempcにセクション名たちを入れていく - \seq_clear:N \l_jlreq_tmpa_seq + \seq_clear:N \l__jlreq_tmpa_seq \clist_map_variable:nNn {#1} \jlreq@tempa { \tl_set:Nx \@tempa { \tl_trim_spaces:o \@tempa } \str_case_e:nnF {\jlreq@tempa} { @@ -3601,7 +3638,7 @@ } }{ \str_if_eq:eeTF { \str_head:N \jlreq@tempa } {_} { - \seq_put_left:Nx \l_jlreq_tmpa_seq { \tl_tail:N \jlreq@tempa } + \seq_put_left:Nx \l__jlreq_tmpa_seq { \tl_tail:N \jlreq@tempa } }{ \ClassError{jlreq}{Invalid~value~\jlreq@tempa\space in~endnote_position}{\@ehc} } @@ -3623,7 +3660,7 @@ \cs_set:Nn \g__jlreq_endnote_hook_beforeheading:n {\theendnotes} \else \tl_set:Nn \l__jlreq_tmpa_tl {} - \seq_map_inline:Nn \l_jlreq_tmpa_seq { + \seq_map_inline:Nn \l__jlreq_tmpa_seq { \tl_if_empty:nF {##1} { \tl_put_right:Nn \l__jlreq_tmpa_tl { {##1} {\theendnotes} } } @@ -3765,6 +3802,21 @@ \ifvmode\leavevmode\fi \IfBooleanTF {#1} { \jlreq@inlinenote@noauto {#2} } { \jlreq@inlinenote@auto {#2} } } +\keys_define:nn { jlreqsetup } { + warichu_opening .code:n = { + \tl_set:Nn \l__jlreq_tmpa_tl {} + \str_set:Nx \l__jlreq_tmpa_str { \tl_to_str:n {#1} } + \str_set:Nx \l__jlreq_tmpa_str { \str_head:N \l__jlreq_tmpa_str } + \tl_map_inline:Nn \jlreq@charlist@openingbrackets { + \str_if_eq:eeT { \l__jlreq_tmpa_str } { \tl_to_str:n {##1} } { + \tl_set:Nn \l__jlreq_tmpa_tl { \jlreq@open@bracket@before@space } + } + } + \edef\jlreq@warichu@opening{\expandonce{\l__jlreq_tmpa_tl}\unexpanded{#1}} + }, + warichu_closing .tl_set:N = \jlreq@warichu@closing +} +\keys_set:nn { jlreqsetup } { warichu_opening = {(}, warichu_closing = {)} } \def\jlreq@inlinenote@auto#1{% % 割注初め括弧の前の場所を保存 @@ -3772,11 +3824,11 @@ % \jlreq@tempdimbに,現在行の残り長さを入れる \jlreq@tempdimb=\jlreq@rest@linewidth % 括弧の分を引いたものが,割注の使える長さ - \setbox\@tempboxa=\hbox{\jlreq@inlinenote@kakkofontsize\inhibitglue\jlreq@open@bracket@before@space(\inhibitglue}% + \setbox\@tempboxa=\hbox{\jlreq@inlinenote@kakkofontsize\inhibitglue\jlreq@warichu@opening\inhibitglue}% \addtolength{\jlreq@tempdimb}{-\wd\@tempboxa}% \ifdim\jlreq@tempdimb<0pt\jlreq@tempdimb=\linewidth\fi {% - \setbox\jlreq@tempboxa=\hbox{\jlreq@inlinenote@kakkofontsize\inhibitglue \jlreq@open@bracket@before@space(}% + \setbox\jlreq@tempboxa=\hbox{\jlreq@inlinenote@kakkofontsize\inhibitglue\jlreq@warichu@opening}% \jlreq@box@putcenter\jlreq@tempboxa }% % 「初回」時はここに強制改行を入れる.これにより現在位置の取得がより正しくなる……といいなぁ @@ -3831,7 +3883,7 @@ \splitmaxdepth=\maxdimen % 現在行の残り長さを思い出す \jlreq@tempdimb=\jlreq@rest@linewidth - \setbox\@tempboxa=\hbox{\jlreq@inlinenote@kakkofontsize\inhibitglue\jlreq@open@bracket@before@space(\inhibitglue}% + \setbox\@tempboxa=\hbox{\jlreq@inlinenote@kakkofontsize\inhibitglue\jlreq@warichu@opening\inhibitglue}% \addtolength{\jlreq@tempdimb}{-\wd\@tempboxa}% \setbox\@tempboxa=\box\jlreq@resultbox \@whilenum\@tempcnta<\jlreq@inlinenote@lines\do{% @@ -3871,7 +3923,7 @@ } \def\jlreq@inlinenote@noauto#1{% - \setbox\jlreq@tempboxa=\hbox{\jlreq@inlinenote@kakkofontsize\inhibitglue\jlreq@open@bracket@before@space(}% + \setbox\jlreq@tempboxa=\hbox{\jlreq@inlinenote@kakkofontsize\inhibitglue\jlreq@warichu@opening}% \inhibitglue\jlreq@box@putcenter\jlreq@tempboxa \jlreq@inlinenote@noauto@#1\\\jlreq@endmark\jlreq@endmark \jlreq@inlinenote@endnote @@ -3909,7 +3961,7 @@ \def\jlreq@inlinenote@endnote{% \jlreq@in@inlinenotefalse {% - \setbox\jlreq@tempboxa=\hbox{\jlreq@inlinenote@kakkofontsize)}% + \setbox\jlreq@tempboxa=\hbox{\jlreq@inlinenote@kakkofontsize\inhibitglue\jlreq@warichu@closing}% \jlreq@box@putcenter\jlreq@tempboxa \inhibitglue }% @@ -4053,14 +4105,6 @@ }% } -% #1のleftとrightを入れ替えて#1に代入 -\def\jlreq@reverse@leftright#1{% - \str_case_e:nn {#1} { - { left }{ \def#1{right} } - { right }{ \def#1{left} } - }% -} - %.. マークの拡張 \def\jlreq@markregistername#1{jlreq@extramark@register@#1} \def\jlreq@extraleftmark#1{\jlreq@extramark@{#1}{\expandafter\@firstoftwo\botmarks}} @@ -4071,11 +4115,18 @@ } \def\jlreq@extramark@@#1#2{#2#1\@empty\@empty} -\def\jlreq@setextraleftmark@#1#2{{#2}{\expandafter\@secondoftwo#1}} -\def\jlreq@setextrarightmark@#1#2{{\expandafter\@firstoftwo#1}{#2}} -\def\jlreq@setextraleftmark#1#2{\jlreq@setextramark{#1}{#2}{\jlreq@setextraleftmark@}} -\def\jlreq@setextrarightmark#1#2{\jlreq@setextramark{#1}{#2}{\jlreq@setextrarightmark@}} -\def\jlreq@setextramark#1#2#3{% + +\def\jlreq@extramarkright#1#2{% + \jlreq@if{\ifcsname\jlreq@markregistername{#1}\endcsname\fi}{% + \expandafter\expandafter\expandafter\jlreq@extramarkright@\csname\jlreq@markregistername{#1}@themark\endcsname{#2}{#1}% + }{% + \jlreq@extramarkboth{#1}{}{#2}% + }% +} +\def\jlreq@extramarkright@#1#2#3#4{% + \jlreq@extramarkboth{#4}{#1}{#3}% +} +\def\jlreq@extramarkboth#1#2#3{ \jlreq@if{\ifcsname\jlreq@markregistername{#1}\endcsname\fi}{}{% \expandafter\newmarks\csname\jlreq@markregistername{#1}\endcsname \expandafter\def\csname\jlreq@markregistername{#1}@themark\endcsname{{}{}}% @@ -4084,305 +4135,667 @@ \let\label\relax \let\index\relax \let\glossary\relax - \def\jlreq@@themark@csname{\jlreq@markregistername{#1}@themark}% - \expandafter\unrestored@protected@xdef\csname\jlreq@@themark@csname\endcsname{% - \expandafter#3\expandafter{\csname\jlreq@@themark@csname\endcsname}{#2}% - }% - \expandafter\expandafter\expandafter\@temptokena\expandafter\expandafter\expandafter{\csname\jlreq@@themark@csname\endcsname}% + \expandafter\unrestored@protected@xdef\csname\jlreq@markregistername{#1}@themark\endcsname{ {#2}{#3} } + \expandafter\expandafter\expandafter\@temptokena\expandafter\expandafter\expandafter{\csname\jlreq@markregistername{#1}@themark\endcsname}% \expandafter\marks\csname\jlreq@markregistername{#1}\endcsname{\the\@temptokena}% \endgroup - \if@nobreak\ifvmode\nobreak\fi\fi + \if@nobreak\ifvmode\nobreak\fi\fi } + \let\jlreq@markboth=\markboth \let\jlreq@markright=\markright %.. \DeclarePageStyle内で使うもの -% mark情報の取得を行う. -% #1の中身をみて,#2 = 何段目見出しか,#3 = odd/even,\csname #4@<見出し命令名>\endcsnameに必要情報を追加し,#5の見出し命令名リストに追加 -% #1@heading@levelにレベルを入れる -\def\jlreq@pagestyle@setmark#1#2#3#4#5{% - \begingroup - \str_if_eq:eeTF {\str_head:N #1} {_} { - \str_if_eq:nnTF {#3} { odd } { \let\jlreq@leftright=r } { \let\jlreq@leftright=l } - \edef\jlreq@do{% - \unexpanded{\def#1}{% - \ifx l\jlreq@leftright - \int_compare:nTF { #2 = 0 } { \exp_not:N \leftmark } { \exp_not:n {\jlreq@extraleftmark{#2}} } - \else - \int_compare:nTF { #2 = 0 } { \exp_not:N \rightmark } { \exp_not:n {\jlreq@extrarightmark{#2}} } - \fi - }% - }% - \edef\jlreq@headingname{\expandafter\@gobble#1}% 見出し命令名 - \edef\jlreq@tempa{\noexpand\@removeelement{\exp_not:o {\jlreq@headingname}}}% - \expandafter\jlreq@tempa\expandafter{#5}{#5}% - \@ifundefined{#4@\jlreq@headingname}{\expandafter\def\csname #4@\jlreq@headingname\endcsname{}}{}% - \tl_put_right:Nx \jlreq@do {% - \exp_not:N \@ifundefined {#4@\jlreq@headingname} { \exp_not:N \@namedef {#4@\jlreq@headingname} {} } {} - \noexpand\let\exp_not:c {\expandafter\@gobble\string #1@heading@level}=\exp_not:c {jlreq@heading@level@\jlreq@headingname}% - \exp_not:n {\def#5}{\exp_not:o {#5},\exp_not:o {\jlreq@headingname}}% - \exp_not:N \tl_put_right:Nn \exp_not:c {#4@\jlreq@headingname} {{{\int_compare:nT {#2=0} {#3}}{#2}{\ifx r\jlreq@leftright r\else l\fi}}}% - }% - }{\def\jlreq@do{}}% - \expandafter\endgroup - \jlreq@do +%フォーマットを適用する.\def\@tempa##1{#3}して,\@tempa{#2}の結果を#1に返す. +%#3が値なしだったら#4を使う. +%#2: もと +%#3: フォーマット +%#4: デフォルトフォーマット +\cs_set:Nn \__jlreq_pagestyle_applyformat:NnNN { + % #3が無効の時は,#2が空なら空にする. + \bool_if:nTF { \tl_if_empty_p:n {#2} && \tl_if_eq_p:NN #3 \c_novalue_tl } { + \tl_set:Nn #1 {#2} + }{ + \group_begin: + \tl_set:Nx \l__jlreq_do_tl { \exp_not:n {\def\jlreq@tempa##1}{\tl_if_eq:NNTF #3 \c_novalue_tl {\exp_not:o #4}{\exp_not:o #3}} } + \l__jlreq_do_tl + \tl_set:Nx \l__jlreq_do_tl { \exp_not:n {\def#1} {\exp_not:o {\jlreq@tempa{#2}} } } + \exp_after:wN \group_end: + \l__jlreq_do_tl + } } -% \def\<見出し>mark#1{...}というのを\jlreq@resultに入れる, -% #1:*ならばextramarkを使う -% #2: 見出し命令名,#3: mark_format -% #4: {{mark_formatからさらに調べるやつ (odd|even)}{マークの何番目か.extraでない場合は0}{l or r(leftかrightか)}}の並び -\def\jlreq@pagestyle@make@headingmark#1#2#3#4{% - \begingroup - \clist_map_variable:nNn {0,1,2} \jlreq@i { - \expandafter\def\csname jlreq@leftmark@\jlreq@i\endcsname{}% - \expandafter\def\csname jlreq@rightmark@\jlreq@i\endcsname{}% - }% - \jlreq@pagestyle@make@headingmark@{#2}{#3}#4\jlreq@endmark - \def\jlreq@do{}% とりあえず#1markの中身を入れていく - % leftを設定する時は対応するrightを空にする. - \expandafter\ifx\csname jlreq@leftmark@0\endcsname\@empty - \expandafter\ifx\csname jlreq@rightmark@0\endcsname\@empty\else - \tl_put_right:Nx \jlreq@do { - \jlreq@ifempty{#1}{\noexpand\markright}{\noexpand\jlreq@markright}{\exp_args:Nc \exp_not:o {jlreq@rightmark@0}} - }% - \fi - \else - \tl_put_right:Nx \jlreq@do { - \jlreq@ifempty{#1}{\noexpand\markboth}{\noexpand\jlreq@markboth}{\exp_args:Nc \exp_not:o {jlreq@leftmark@0}}{\exp_args:Nc \exp_not:o {jlreq@rightmark@0}} - }% - \fi - \clist_map_variable:nNn {1,2} \jlreq@i { - \expandafter\ifx\csname jlreq@leftmark@\jlreq@i\endcsname\@empty - \expandafter\ifx\csname jlreq@rightmark@\jlreq@i\endcsname\@empty\else - \tl_put_right:Nx \jlreq@do {\noexpand\jlreq@setextrarightmark{\jlreq@i}{\exp_args:Nc \exp_not:o {jlreq@rightmark@\jlreq@i}}}% - \fi - \else - \tl_put_right:Nx \jlreq@do{% - \noexpand\jlreq@setextraleftmark{\jlreq@i}{\exp_args:Nc \exp_not:o {jlreq@leftmark@\jlreq@i}}% - \noexpand\jlreq@setextrarightmark{\jlreq@i}{\exp_args:Nc \exp_not:o {jlreq@rightmark@\jlreq@i}}% - }% - \fi - }% - \ifx\jlreq@do\@empty\else - \edef\jlreq@do{% - \unexpanded{\edef\jlreq@result}{\noexpand\unexpanded{% - \noexpand\def\exp_not:c {#2mark}\unexpanded{##1}{% - \exp_not:o {\jlreq@do}% - }}% - }% - }% - \fi - \expandafter\endgroup - \jlreq@do -}% -\def\jlreq@pagestyle@make@headingmark@#1#2#3{% - \jlreq@ifendmark{#3}{}{\jlreq@pagestyle@make@headingmark@@{#1}{#2}#3}% +\cs_generate_variant:Nn \__jlreq_pagestyle_applyformat:NnNN { NocN } + +% mark系の処理をする. +% #2: 奇数ページ柱(prop,{0,1,2}->柱の中身) +% #3: 偶数ページ柱(prop,{0,1,2}->柱の中身) +% #4: mark format(prop,{(見出し名)}->フォーマット) +% #2,#3の中身が見出し名ならば\leftmark/\rightmarkなどに書き換えられる. +% #1(prop)に{<見出し名>}{\<見出し名>markの定義}を入れる +\cs_set:Nn \__jlreq_pagestyle_makemarkcommand:NNNN { + \group_begin: + \tl_set:Nn \l__jlreq_do_tl { \prop_clear:N #1 } + \prop_clear:N \l__jlreq_tmpa_prop % markの定義を入れる. + \clist_map_inline:nn { 0,1,2 } { + \prop_clear:N \l__jlreq_tmpb_prop % \rightmarkになる\<見出し>markの定義を入れる + \prop_clear:N \l__jlreq_tmpc_prop % \leftmarkになる\<見出し>markの定義を入れる + \__jlreq_pagestyle_makemarkcommand_aux:NNNnnN \l__jlreq_tmpb_prop \l__jlreq_tmpa_tl #2 { odd } { ##1 } #4 + \tl_put_right:No \l__jlreq_do_tl \l__jlreq_tmpa_tl + \__jlreq_pagestyle_makemarkcommand_aux:NNNnnN \l__jlreq_tmpc_prop \l__jlreq_tmpa_tl #3 { even } { ##1 } #4 + \tl_put_right:No \l__jlreq_do_tl \l__jlreq_tmpa_tl + \prop_map_inline:Nn \l__jlreq_tmpc_prop { + \prop_put:Nnx \l__jlreq_tmpa_prop {####1} { + \prop_item:Nn \l__jlreq_tmpa_prop {####1} + \int_compare:nNnTF { ##1 } = { 0 } { \exp_not:N \markboth } { \exp_not:N \jlreq@extramarkboth {##1} } + { \exp_not:n {####2} } + { \prop_item:Nn \l__jlreq_tmpb_prop {####1} } + } + } + \prop_map_inline:Nn \l__jlreq_tmpb_prop { + \prop_if_in:NnF \l__jlreq_tmpc_prop {####1} { + \prop_put:Nnx \l__jlreq_tmpa_prop {####1} { + \prop_item:Nn \l__jlreq_tmpa_prop {####1} + \int_compare:nNnTF { ##1 } = { 0 } { \exp_not:N \markright } { \exp_not:N \jlreq@extramarkright {##1} } + { \exp_not:n {####2} } + } + } + } + } + \prop_map_inline:Nn \l__jlreq_tmpa_prop { + \tl_put_right:Nx \l__jlreq_do_tl { + \exp_not:n { \prop_put:Nnn #1 {##1} } { + \exp_not:N \def \exp_not:o { \csname ##1mark\endcsname ####1 } { \exp_not:n {##2} } + } + } + } + \exp_after:wN \group_end: + \l__jlreq_do_tl +} + +% mark処理サブ +% #3: 柱(prop) +% #4: odd or even +% #5: 何番目か=0,1,2 +% #6: mark_format(prop) +% #1(prop)にmark用のフォーマットを入れる. +% キーは<見出し名> +% #2に#3の中身を書き換えるコード(\prop_put:Nnn #3 {section}{\rightmark}のような)を入れる +\cs_set:Nn \__jlreq_pagestyle_makemarkcommand_aux:NNNnnN { + \group_begin: + \tl_set:Nn \l__jlreq_do_tl { \tl_set:Nn #2 {} } + \prop_get:NnN #3 {#5} \l__jlreq_tmpa_tl +% \message{TL=\exp_not:o \l__jlreq_tmpa_tl} +% \str_set:NV \l__jlreq_tmpa_str \l__jlreq_tmpa_tl + \str_if_eq:eeT { \str_head:N \l__jlreq_tmpa_tl } {_} { + % 柱の書き換え + \str_if_eq:nnTF { #4 } { odd } { + \int_compare:nNnTF {#5}={0} { + \tl_put_right:Nx \l__jlreq_do_tl { + \exp_not:n { \tl_put_right:Nn #2 } { \exp_not:n { \prop_put:Nnn #3 } {#5} { \exp_not:N \rightmark } } + } + }{ + \tl_put_right:Nx \l__jlreq_do_tl { + \exp_not:n { \tl_put_right:Nn #2 } { \exp_not:n { \prop_put:Nnn #3 } {#5} { \exp_not:n { \jlreq@extrarightmark{#5} } } } + } + } + }{ + \int_compare:nNnTF {#5}={0} { + \tl_put_right:Nx \l__jlreq_do_tl { + \exp_not:n { \tl_put_right:Nn #2 } { \exp_not:n { \prop_put:Nnn #3 } {#5} { \exp_not:N \leftmark } } + } + }{ + \tl_put_right:Nx \l__jlreq_do_tl { + \exp_not:n { \tl_put_right:Nn #2 } { \exp_not:n { \prop_put:Nnn #3 } {#5} { \exp_not:n { \jlreq@extraleftmark{#5} } } } + } + } + } + % 見出し名 + \str_set:Nx \l__jlreq_tmpa_str {\exp_after:wN \use_none:n \l__jlreq_tmpa_tl } + % _<見出し名>優先でmark formatを取得して\l__jlreq_tmpb_tlに入れる. + \prop_get:NoNF #6 \l__jlreq_tmpa_tl \l__jlreq_tmpb_tl { + \prop_get:NnNF #6 {#4} \l__jlreq_tmpb_tl { + \tl_set:Nx \l__jlreq_tmpb_tl { + \exp_not:c {the\l__jlreq_tmpa_str} + \exp_not:N \ifx \exp_not:c {the\l__jlreq_tmpa_str} \exp_not:n {\@empty\else\protect\quad\fi} + \exp_not:n {##1} + } + } + } + \tl_put_right:Nx \l__jlreq_do_tl { + \exp_not:n { \prop_put:Nnn #1 } { \l__jlreq_tmpa_str } { \exp_not:o { \l__jlreq_tmpb_tl } } + } + } + \exp_after:wN \group_end: + \l__jlreq_do_tl } -\def\jlreq@pagestyle@make@headingmark@@#1#2#3#4#5{% - % \jlreq@tempbに\***markの定義を入れる - \edef\jlreq@tempb{% - \exp_not:c {the#1}% - \noexpand\ifx\exp_not:c {the#1}\unexpanded{\@empty\else\protect\quad\fi}% - \unexpanded{##1}% - }% - \jlreq@parsekeyval@nokey{% - \tl_if_empty:nF {##1} {\str_if_eq:nnT {##1} {#3} {\edef\jlreq@tempb{\unexpanded{##2}}}} - \str_if_eq:nnT {##1} {_#1} {\edef\jlreq@tempb{\unexpanded{##2}}}% - }{#2}% - \ifx l#5% - \expandafter\edef\csname jlreq@leftmark@#4\endcsname{\exp_not:o {\jlreq@tempb}}% - \else - \expandafter\edef\csname jlreq@rightmark@#4\endcsname{\exp_not:o {\jlreq@tempb}}% - \fi - \jlreq@pagestyle@make@headingmark@{#1}{#2}% +% \prop_item:Nn #1 {#2}が_***だったら***に,そうでなければ空に展開される. +\cs_set:Nn \__jlreq_pagestyle_get_runninghead_section:Nn { + \exp_args:Ne \__jlreq_pagestyle_get_runninghead_section_aux:n { \prop_item:Nn #1 {#2} } } -% #2 #3 #4と並んだヘッダを作り#1に入れる.#1,#2,#3はコンロトールシークエンスの名前とする. -\def\jlreq@pagestyle@setheadfoot#1#2#3#4{% - \begingroup - \edef\jlreq@do{\noexpand\jlreq@pagestyle@setheadfoot@{\unexpanded{#1}}{\exp_args:Nc \exp_not:o {#2}}{\exp_args:Nc \exp_not:o {#3}}{\exp_args:Nc \exp_not:o {#4}}}% - \expandafter\endgroup - \jlreq@do +\cs_set:Nn \__jlreq_pagestyle_get_runninghead_section_aux:n { + \str_if_eq:eeTF { \str_head:n {#1} } {_} { \exp_not:o {\use_none:n #1} } {} } -% \edef内だと,#1 != 0ptならば\hskip \dimexpr#1\relaxになる -\def\jlreq@pagestyle@hskip#1{% - \dim_compare:nF { #1 = 0pt }{\noexpand\hskip\noexpand\dimexpr#1\noexpand\relax}% +%#1: 位置情報がleft-topのように入っているもの,prop +%#2: デフォルト +%#1の中身を書き換えて返す. +\cs_set:Nn \__jlreq_pagestyle_normalizeposition:Nn { + \group_begin: + \tl_set:Nn \l__jlreq_do_tl {} + \tl_clear:N \l__jlreq_tmpa_tl % デフォルト位置 + \tl_set:Nx \l__jlreq_tmpa_tl { \prop_item:Nn #1 {0} } + \exp_args:No \jlreq@pagestyle@parse@position \l__jlreq_tmpa_tl \l__jlreq_tmpa_tl {#2} + \prop_map_inline:Nn #1 { + \exp_args:Nnno \jlreq@pagestyle@parse@position {##2} \l__jlreq_tmpb_tl \l__jlreq_tmpa_tl + \tl_put_right:Nx \l__jlreq_do_tl { + \exp_not:n { \prop_put:Nnn #1 {##1} } {\exp_not:o {\l__jlreq_tmpb_tl} } + } + } + \exp_after:wN \group_end: + \l__jlreq_do_tl } -\def\jlreq@pagestyle@setheadfoot@#1#2#3#4{% - \begingroup - % - \Cdpは端にそろえるための補正 - \jlreq@ifempty{#2}{\def\jlreq@left{}}{\edef\jlreq@left{\jlreq@pagestyle@hskip{\jlreq@expand@speciallength{\jlreq@headfoot@sidemargin}\if@tate - \Cdp\fi}\unexpanded{#2}}}% - % +\topskip - \Chtは\jlreq@headfoot@sidemargin = 0ptの時に本文の右に一致させるための補正. - \jlreq@ifempty{#4}{\def\jlreq@right{}}{\edef\jlreq@right{\unexpanded{#4}\jlreq@pagestyle@hskip{\jlreq@expand@speciallength{\jlreq@headfoot@sidemargin}\if@tate + \topskip - \Cht\fi}}}% - \jlreq@ifempty{#3}{% - \edef\jlreq@do{\unexpanded{\def#1}{\exp_not:o {\jlreq@left}\hfil\exp_not:o {\jlreq@right}}}% - \jlreq@ifempty{#2}{\jlreq@ifempty{#4}{\def\jlreq@do{\def#1{}}}{}}{}% - }{% #3を完全に真ん中に配置するために左右の幅を0にしておく - \ifx\jlreq@left\@empty\else\edef\jlreq@left{\noexpand\hbox to 0pt{\exp_not:o {\jlreq@left}\noexpand\hss}}\fi - \ifx\jlreq@right\@empty\else\edef\jlreq@right{\noexpand\hbox to 0pt{\noexpand\hss\exp_not:o {\jlreq@right}}}\fi - \edef\jlreq@do{% - \unexpanded{\def#1}{\exp_not:o {\jlreq@left}\hfil\unexpanded{#3}\hfil\exp_not:o {\jlreq@right}}% - }% - }% - \expandafter\endgroup - \jlreq@do -}% -% #1の左右に傍注調整用の空白を入れて#1に代入する -\def\jlreq@pagestyle@addsidenotemargin@left#1{% - \jlreq@pagestyle@addsidenotemargin@{#1}{\jlreq@sidenote@length + \jlreq@sidenote@sep}{}% +%#2: 柱 +%#3: フォント +%#4: 位置 +%#5: 空き +%#1に返す +\cs_set:Nn \__jlreq_pagestyle_maketate_runhead:NNNNn { + \group_begin: + \tl_set:Nn \l__jlreq_result_tl {} + \__jlreq_pagestyle_maketate_rearrange:NNNNn \l__jlreq_tmpa_seq #2 #3 #4 {#5} + \seq_map_inline:Nn \l__jlreq_tmpa_seq { + \tl_set:Nx \l__jlreq_tmpa_tl { \exp_args:No \exp_not:n {\use_i:nn ##1} } % 場所 + \tl_set:Nx \l__jlreq_tmpb_tl { \exp_args:No \exp_not:n {\use_ii:nn ##1} } % 中身 + \tl_put_right:Nx \l__jlreq_result_tl { + \exp_not:N \hbox to~0pt { + \exp_not:n {\hskip\glueexpr\headsep + \headheight} + \legacy_if:nF { @tate } { \exp_not:n {+ \topskip - \Cht} } + \tl_if_empty:oF \l__jlreq_tmpa_tl { + \exp_not:o \l__jlreq_tmpa_tl } \exp_not:N \relax + \exp_not:o \l__jlreq_tmpb_tl + \exp_not:N \hss + } + } + } + \tl_set:Nx \l__jlreq_do_tl { \exp_not:n { \tl_set:Nn #1 } { \exp_not:o \l__jlreq_result_tl } } + \exp_after:wN \group_end: + \l__jlreq_do_tl } -\def\jlreq@pagestyle@addsidenotemargin@right#1{% - \jlreq@pagestyle@addsidenotemargin@{#1}{}{\jlreq@sidenote@length + \jlreq@sidenote@sep}% +\cs_generate_variant:Nn \__jlreq_pagestyle_maketate_runhead:NNNNn { NcNNo } + +%#2: ノンブル +%#3: フォント +%#4: 位置 +%#5: 空き +%#1に返す +\cs_set:Nn \__jlreq_pagestyle_maketate_nombre:NNNNn { + \group_begin: + \tl_set:Nn \l__jlreq_result_tl {} + \__jlreq_pagestyle_maketate_rearrange:NNNNn \l__jlreq_tmpa_seq #2 #3 #4 {#5} + \seq_map_inline:Nn \l__jlreq_tmpa_seq { + \tl_set:Nx \l__jlreq_tmpa_tl { \exp_args:No \exp_not:n {\use_i:nn ##1} } % 場所 + \tl_set:Nx \l__jlreq_tmpb_tl { \exp_args:No \exp_not:n {\use_ii:nn ##1} } % 中身 + \tl_put_right:Nx \l__jlreq_result_tl { + \exp_not:N \hbox to~0pt { + \exp_not:N \hss + \exp_not:o \l__jlreq_tmpb_tl + \tl_if_empty:oF \l__jlreq_tmpa_tl { + \exp_not:n { \hskip\glueexpr } \exp_not:o \l__jlreq_tmpa_tl \exp_not:N \relax + } + } + } + } + \tl_set:Nx \l__jlreq_do_tl { \exp_not:n { \tl_set:Nn #1 } { \exp_not:o \l__jlreq_result_tl } } + \exp_after:wN \group_end: + \l__jlreq_do_tl +} +\cs_generate_variant:Nn \__jlreq_pagestyle_maketate_nombre:NNNNn { NNNNo } + +%#2: 中身 +%#3: フォント +%#4: 位置 +%#5: 空き +% tate指定のページスタイルの時は,空き指定は +% (1)なければ前のやつに続いて +% (2)あれば絶対的な位置指定 +% となる.この関数で,(1)によってまとまるものを一つにまとめて,seqにして返す. +% #1に{空き}{トークン列}のseqを返す. +\cs_set:Nn \__jlreq_pagestyle_maketate_rearrange:NNNNn { + \group_begin: + \tl_set:Nn \l__jlreq_do_tl { \seq_clear:N #1 } + \tl_set:Nn \l__jlreq_tmpa_tl {} % 現在処理中 + \tl_set:Nn \l__jlreq_tmpc_tl {} % 現在の位置 + \clist_map_inline:nn {0,1,2} { + \tl_set:Nx \l__jlreq_tmpb_tl { \prop_item:Nn #2 {##1} } + \tl_if_empty:oF \l__jlreq_tmpb_tl { + \tl_set:Nx \l__jlreq_tmpb_tl { \prop_item:Nn #4 {##1} } % pos + \tl_if_empty:NTF \l__jlreq_tmpb_tl { % pos = empty + \tl_put_right:Nx \l__jlreq_tmpa_tl { + \tl_if_empty:NF \l__jlreq_tmpa_tl { \exp_not:n { \hskip\glueexpr #5\relax } } + } + }{ + \tl_if_empty:oF \l__jlreq_tmpa_tl { + \tl_put_right:Nx \l__jlreq_do_tl { + \exp_not:n { \seq_put_right:Nn #1 } { + { \exp_not:o \l__jlreq_tmpc_tl } { \exp_not:o \l__jlreq_tmpa_tl } + } + } + \tl_set:Nn \l__jlreq_tmpa_tl {} + } + } + \tl_if_empty:oT \l__jlreq_tmpa_tl { \tl_set:Nx \l__jlreq_tmpc_tl { \prop_item:Nn #4 { ##1 } } } + \tl_set:Nx \l__jlreq_tmpb_tl { \prop_item:Nn #3 {##1} } + \tl_put_right:Nx \l__jlreq_tmpa_tl { + \tl_if_empty:NTF \l__jlreq_tmpb_tl + { \prop_item:Nn #2 {##1} } + { { \exp_not:o \l__jlreq_tmpb_tl \prop_item:Nn #2 {##1} } } + } + } + } + \tl_if_empty:oF \l__jlreq_tmpa_tl { + \tl_put_right:Nx \l__jlreq_do_tl { + \exp_not:n { \seq_put_right:Nn #1 } { { \exp_not:o \l__jlreq_tmpc_tl } { \exp_not:o \l__jlreq_tmpa_tl } } + } + } + \exp_after:wN \group_end: + \l__jlreq_do_tl } -\def\jlreq@pagestyle@addsidenotemargin@bothside#1{% - \jlreq@pagestyle@addsidenotemargin@{#1}{\jlreq@sidenote@length + \jlreq@sidenote@sep}{\jlreq@sidenote@length + \jlreq@sidenote@sep}% + + +%#2: odd/even +%#3: 位置 +%#2 = evenならば位置を反転させて#1 = strに返す. +\cs_set:Nn \__jlreq_pagestyle_reversepos_ifeven:Nnn { + \str_set:Nn #1 {#3} + \str_if_eq:nnT {#2} {even} { + \str_if_eq:nnT {#3} {right} { \str_set:Nn #1 {left} } + \str_if_eq:nnT {#3} {left} { \str_set:Nn #1 {right} } + } } -% #2: 左,#3:右,#4:#2 + #3 -\def\jlreq@pagestyle@addsidenotemargin@#1#2#3{% - \ifx#1\@empty\else - \edef#1{% - \jlreq@ifempty{#2}{}{\unexpanded{\hskip-\dimexpr #2\relax}}% - \exp_not:o {#1}% - \jlreq@ifempty{#3}{}{\unexpanded{\hskip-\dimexpr #3\relax}}% - }% - \fi + +% 各場所(六カ所),柱 or ノンブルのトークン列を作る.#1に返す +%#2: odd/even +%#3: 縦方向場所(top/bottom) +%#4: 横方向場所(left/right/center) +%#5: 中身(柱 or ノンブル,prop) +%#6: フォント(prop) +%#7: 場所(prop) +%#8: 空き +\cs_set:Nn \__jlreq_pagestyle_makeyoko_each:NnnnNNNn { + \group_begin: + \__jlreq_pagestyle_makeyoko_sequence:NnnNNN \l__jlreq_tmpa_seq {#3} {#4} #5 #6 #7 + \__jlreq_pagestyle_reversepos_ifeven:Nnn \l__jlreq_tmpa_str {#2} {#4} + \__jlreq_pagestyle_makeyoko_concat_withspaces:NVNn \l__jlreq_tmpa_tl \l__jlreq_tmpa_str \l__jlreq_tmpa_seq {#8} + \tl_set:Nx \l__jlreq_do_tl { \exp_not:n { \tl_set:Nn #1 } { \exp_not:o \l__jlreq_tmpa_tl } } + \exp_after:wN \group_end: + \l__jlreq_do_tl } +\cs_generate_variant:Nn \__jlreq_pagestyle_makeyoko_each:NnnnNNNn { NnnncNNo } -% #1が空かつ#4が空でないならば#2に#3と#4の中身を追加し,#4を空にする.引数は全てコントロールシークエンス -\def\jlreq@pagestyle@addifempty#1#2#3#4{% - \ifx#1\@empty\ifx#4\@empty\else\tl_put_right:Nx #2{ \exp_not:o {#3}\exp_not:o {#4} }\def#4{}\fi\fi +%#2: 縦方向場所(top/bottom) +%#3: 横方向場所(left/right/center) +%#4: 中身(柱 or ノンブル,prop) +%#5: フォント(prop) +%#6: 場所(prop) +%#1に左から{フォント}{中身}を並べた配列を返す. +\cs_set:Nn \__jlreq_pagestyle_makeyoko_sequence:NnnNNN { + \group_begin: + \tl_set:Nn \l__jlreq_do_tl { \seq_clear:N #1 } + \clist_map_inline:nn {0,1,2} { + \tl_set:Nx \l__jlreq_tmpa_tl { \prop_item:Nn #4 {##1} } + \tl_if_empty:NF \l__jlreq_tmpa_tl { + \exp_args:Nxx \tl_if_eq:nnT {{#2}{#3}} { \prop_item:Nn #6 {##1} } { + \tl_put_right:Nx \l__jlreq_do_tl { + \exp_not:n { \seq_put_right:Nn #1 } { {\prop_item:Nn #5 {##1}}{\exp_not:o \l__jlreq_tmpa_tl} } + } + } + } + } + \exp_after:wN \group_end: + \l__jlreq_do_tl } -\newif\ifjlreq@PageStyle@first -% #1に入っている{柱1}{柱2}...{柱n}という並びから,実際に出力する柱を構築する.n>=1を仮定する. -% 間に空白を入れる. -% #1: ターゲットなコントロールシークエンスの名前,#2:*ならばreverseする,#3:空き -\def\jlreq@pagestyle@make@runninghead#1#2#3{% - \jlreq@if{\expandafter\ifx\csname #1\endcsname\@empty\fi}{}{% - \edef\jlreq@do{% - \noexpand\jlreq@tempatrue % 最初の処理かフラグ - \unexpanded{\jlreq@pagestyle@make@runninghead@{#1}{#2}{#3}}\exp_args:Nc \exp_not:o {#1}\noexpand\jlreq@endmark - }% - \expandafter\def\csname #1\endcsname{}% - \jlreq@do - % 項目が二つ以上あった. - \ifjlreq@tempa\else\tl_put_left:cn {#1} {\jlreq@PageStyle@firsttrue} \fi - }% +% 各場所(左,真ん中,右)のヘッダのトークン列を作る +%#2: 横方向場所 +%#3: {フォント}{中身}の配列 +%#4: スペース +%#1に結果のトークン列を入れる +\cs_set:Nn \__jlreq_pagestyle_makeyoko_concat_withspaces:NnNn { + \seq_if_empty:NTF #3 { + \tl_set:Nn #1 {} + }{ + \str_if_eq:nnTF {#2}{right}{ + \__jlreq_pagestyle_concat_withspaces_right:NNn #1 #3 {#4} + }{ + \__jlreq_pagestyle_concat_withspaces_left:NNn #1 #3 {#4} + } + } } -\def\jlreq@pagestyle@make@runninghead@#1#2#3#4#5{% - \jlreq@if{\ifnum\numexpr\jlreq@ifendmark{#5}{1}{0}*\ifjlreq@tempa 1\else 0\fi\relax=1~\fi}{% - % 項目が一つしか無い - \jlreq@ifempty{#2}{\tl_put_right:cn}{\tl_put_left:cn}{#1}{#4}% - }{% - % 最初の空でない柱に出会うまでは柱の間の空白を入れない. - % 空でない柱に出会ってないならば\ifjlreq@PageStyle@firstはtrue. - % 一番最初の\jlreq@PageStyle@firsttrueは後で入れる. - \jlreq@ifempty{#2}{\tl_put_right:cn}{\tl_put_left:cn}{#1}{% - \protected@edef\jlreq@tempa{#4}% - \ifx\jlreq@tempa\@empty\else - \ifjlreq@PageStyle@first\else\hskip\glueexpr#3\relax\fi - \jlreq@tempa - \jlreq@PageStyle@firstfalse - \fi - }% - \jlreq@tempafalse - \jlreq@ifendmark{#5}{}{\jlreq@pagestyle@make@runninghead@{#1}{#2}{#3}{#5}}% - }% +\cs_generate_variant:Nn \__jlreq_pagestyle_makeyoko_concat_withspaces:NnNn { NVNn } + +%#2: {フォント}{中身}の配列 +%#3: スペース +%#1に結果のトークン列を入れる +\cs_set:Nn \__jlreq_pagestyle_concat_withspaces_left:NNn { + \group_begin: + \tl_set:Nn \l__jlreq_reuslt_tl {} + \seq_pop_right:NN #2 \l__jlreq_tmpc_tl % 最後の項目 + \seq_map_inline:Nn #2 { + \tl_set:Nx \l__jlreq_tmpa_tl { \exp_args:No \exp_not:n {\use_i:nn ##1} } + \tl_set:Nx \l__jlreq_tmpb_tl { \exp_args:No \exp_not:n {\use_ii:nn ##1} } + \tl_put_right:Nx \l__jlreq_result_tl { + \exp_not:n {\setbox\@tempboxa=\hbox} + { \tl_if_empty:NTF \l__jlreq_tmpa_tl {\exp_not:o \l__jlreq_tmpb_tl}{\exp_not:o \l__jlreq_tmpa_tl \exp_not:N \l__jlreq_tmpb_tl} } + \exp_not:n { \copy\@tempboxa } + \exp_not:n { + \ifnum0 + \ifdim\wd\@tempboxa=0pt~\else 1\fi + \ifdim\ht\@tempboxa=0pt~\else 1\fi + \ifdim\dp\@tempboxa=0pt~\else 1\fi + >0~\hskip\glueexpr #3\relax\fi + } + } + } + \cs_set:Nn \l__jlreq_tmpa:nn { + \tl_if_empty:nTF{##1} { \exp_not:n {##2} }{ \exp_not:n {{##1##2}} } + } + \tl_put_right:Nx \l__jlreq_result_tl {\exp_after:wN \l__jlreq_tmpa:nn \l__jlreq_tmpc_tl} + \tl_set:Nx \l__jlreq_do_tl { + \exp_not:n { \tl_set:Nn #1} {\exp_not:o \l__jlreq_result_tl} + } + \exp_after:wN \group_end: + \l__jlreq_do_tl } -% #1= cs,#2 = フォーマットの入ったcs,#3 = デフォルトフォーマットの入ったcs -\def\jlreq@pagestyle@applyformat#1#2#3{% - % デフォルト時に限り,\hbox to ***{空トークン}を避ける - \ifnum 0\ifx#1\@empty\else 1\fi\ifx#2\relax\else 1\fi>0 - \edef\jlreq@do{\unexpanded{\def\jlreq@tempa##1}{\ifx#2\relax\exp_not:o {#3}\else\exp_not:o {#2}\fi}}\jlreq@do - \edef#1{\expandafter\exp_not:o \expandafter{\expandafter\jlreq@tempa\expandafter{#1}}}% - \fi +%#2: {フォント}{中身}の配列 +%#3: スペース +%#1に結果のトークン列を入れる +\cs_set:Nn \__jlreq_pagestyle_concat_withspaces_right:NNn { + \group_begin: + \tl_set:Nn \l__jlreq_result_tl {} + \bool_set_true:N \l__jlreq_tmpa_bool % 最初か + \seq_map_inline:Nn #2 { + \tl_set:Nx \l__jlreq_tmpa_tl { \exp_args:No \exp_not:n {\use_i:nn ##1} } + \tl_set:Nx \l__jlreq_tmpb_tl { \exp_args:No \exp_not:n {\use_ii:nn ##1} } + \bool_if:NTF \l__jlreq_tmpa_bool { + \tl_put_right:Nx \l__jlreq_result_tl { + \tl_if_empty:NTF \l__jlreq_tmpa_tl {\exp_not:o \l__jlreq_tmpb_tl}{{\exp_not:o \l__jlreq_tmpa_tl \exp_not:o \l__jlreq_tmpb_tl}} + } + }{ + \tl_put_right:Nx \l__jlreq_result_tl { + \exp_not:n { \setbox\@tempboxa=\hbox} + { \tl_if_empty:NTF \l__jlreq_tmpa_tl {\exp_not:o \l__jlreq_tmpb_tl }{\exp_not:o \l__jlreq_tmpa_tl \exp_not:o \l__jlreq_tmpb_tl} } + \exp_not:n { + \ifnum0 + \ifdim\wd\@tempboxa=0pt~\else 1\fi + \ifdim\ht\@tempboxa=0pt~\else 1\fi + \ifdim\dp\@tempboxa=0pt~\else 1\fi + >0~\hskip\glueexpr #3\relax\fi + } + \exp_not:n { \box\@tempboxa } + } + } + \bool_set_false:N \l__jlreq_tmpa_bool + } + \tl_set:Nx \l__jlreq_do_tl { \exp_not:n { \tl_set:Nn #1} {\exp_not:o \l__jlreq_result_tl} } + \exp_after:wN \group_end: + \l__jlreq_do_tl } +\cs_generate_variant:Nn \__jlreq_pagestyle_concat_withspaces_right:NnN {NoN} -% フォント情報を追加する.#1:制御綴り名,#2:フォント命令の入っている制御綴名,#1に返す -\def\jlreq@pagestyle@addfont@tocs#1#2{% - \expandafter\ifx\csname #1\endcsname\@empty\else - \expandafter\ifx\csname #2\endcsname\@empty\else - \expandafter\edef\csname #1\endcsname{{\exp_args:Nc \exp_not:o {#2}\exp_args:Nc \exp_not:o {#1}}}% - \fi - \fi + +%#2: odd or even(even時は左右をひっくり返して処理される) +%#3: 左 +%#4: 真ん中 +%#5: 右 +% #1に返す. +\cs_set:Nn \__jlreq_pagestyle_concat_left_center_right:Nnnnn { + \str_if_eq:nnTF {#2} {odd} { + \__jlreq_pagestyle_concat_left_center_right_aux:Nnnn #1 {#3} {#4} {#5} + }{ + % evenでは左右入れ替え + \__jlreq_pagestyle_concat_left_center_right_aux:Nnnn #1 {#5} {#4} {#3} + } } -% こちらは#1にトークン列を与える.\edefで展開される.制御綴名#3に代入. -\def\jlreq@pagestyle@addfont@totokens#1#2#3{% - \begingroup - \edef\jlreq@do{\noexpand\edef\exp_not:c {#3}{\unexpanded{#1}}}% - \expandafter\ifx\csname #2\endcsname\@empty\else - \edef\jlreq@tempa{#1}% - \ifx\jlreq@tempa\@empty\else - \edef\jlreq@do{% - \noexpand\edef\exp_not:c {#3}{\noexpand\unexpanded{% - {\exp_args:Nc \exp_not:o {#2}\exp_not:o {\jlreq@tempa}}% - }}% - }% - \fi - \fi - \expandafter\endgroup - \jlreq@do + +\cs_generate_variant:Nn \__jlreq_pagestyle_concat_left_center_right:Nnnnn { Nneee } + +% #2: 左,#3: 真ん中,#4: 右をくっつける +% #1に返す +\cs_set:Nn \__jlreq_pagestyle_concat_left_center_right_aux:Nnnn { + \group_begin: + \tl_set:Nn \l__jlreq_tmpa_tl {} % 左 + \tl_set:Nn \l__jlreq_tmpb_tl {} % 右 + \tl_set:Nn \l__jlreq_tmpc_tl {} % 戻り値 + \tl_if_empty:nF {#2} { + \bool_if:nT { ( !\dim_compare_p:nNn {\jlreq@headfoot@sidemargin}={0pt} ) || \legacy_if_p:n {@tate} }{ + \tl_set:Nx \l__jlreq_tmpa_tl { \exp_not:n {\hskip\dimexpr} \jlreq@expand@speciallength{\jlreq@headfoot@sidemargin} \legacy_if:nT { @tate } { \exp_not:n { -\Cdp } } \exp_not:N \relax } + } + \tl_put_right:Nn \l__jlreq_tmpa_tl {#2} + } + \tl_if_empty:nF {#4} { + \tl_set:Nn \l__jlreq_tmpb_tl {#4} + % \jlreq@headfoot@sidemargin = 0ptの時に本文の右に一致させるための補正. + \bool_if:nT { ( !\dim_compare_p:nNn {\jlreq@headfoot@sidemargin}={0pt} ) || \legacy_if_p:n {@tate} }{ + \tl_put_right:Nx \l__jlreq_tmpb_tl { \exp_not:n {\hskip\dimexpr} \jlreq@expand@speciallength{\jlreq@headfoot@sidemargin} \legacy_if:nT { @tate } { \exp_not:n { + \topskip - \Cht } } \exp_not:N \relax } + } + } + \tl_if_empty:nTF {#3} { + \bool_if:nF { \tl_if_empty_p:n {#2} && \tl_if_empty_p:n {#4} } { + \tl_set:Nx \l__jlreq_tmpc_tl { \exp_not:o \l__jlreq_tmpa_tl \exp_not:N \hfil \exp_not:o \l__jlreq_tmpb_tl } + } + }{ + % 真ん中のを完全に真ん中に配置するために左右の幅を0にしておく + \tl_if_empty:nF { #2 } { \tl_set:Nx \l__jlreq_tmpa_tl { \exp_not:N \hbox to~0pt { \exp_not:o { \l__jlreq_tmpa_tl } \exp_not:N \hss } } } + \tl_if_empty:nF { #4 } { \tl_set:Nx \l__jlreq_tmpb_tl { \exp_not:N \hbox to~0pt { \exp_not:o { \l__jlreq_tmpb_tl } \exp_not:N \hss } } } + \tl_set:Nx \l__jlreq_tmpc_tl { + \exp_not:o \l__jlreq_tmpa_tl\exp_not:N \hfil \exp_not:n {#3} \exp_not:N \hfil \exp_not:o \l__jlreq_tmpb_tl + } + } + \tl_set:Nx \l__jlreq_do_tl { \exp_not:n {\tl_set:Nn #1 } { \exp_not:o \l__jlreq_tmpc_tl } } + \exp_after:wN \group_end: + \l__jlreq_do_tl +} + +%#2: 横方向位置 +%#3: odd/even +%#4: 柱 +%#5: ヘッダ +%#6: 空き +%#1 に戻す +\cs_set:Nn \__jlreq_pagestyle_concat_runhead_nombre:Nnnnnn { + \tl_if_empty:nTF {#4} { + \tl_set:Nn #1 {#5} + }{ + \tl_if_empty:nTF {#5} { + \tl_set:Nn #1 {#4} + }{ + \group_begin: + \__jlreq_pagestyle_reversepos_ifeven:Nnn \l__jlreq_tmpa_str {#3} {#2} + \jlreq@ifleftpage{#3}{ + \str_if_eq:VnTF \l__jlreq_tmpa_str {right} { + \tl_set:Nn \l__jlreq_do_tl { + \__jlreq_pagestyle_concat_runhead_nombre_aux_leftpage_right:Nnnn #1 {#4} {#5} {#6} + } + }{ + \tl_set:Nn \l__jlreq_do_tl { + \__jlreq_pagestyle_concat_runhead_nombre_aux_leftpage_left:Nnnn #1 {#4} {#5} {#6} + } + } + }{ + \str_if_eq:VnTF \l__jlreq_tmpa_str {left} { + \tl_set:Nn \l__jlreq_do_tl { + \__jlreq_pagestyle_concat_runhead_nombre_aux_rightpage_left:Nnnn #1 {#4} {#5} {#6} + } + }{ + \tl_set:Nn \l__jlreq_do_tl { + \__jlreq_pagestyle_concat_runhead_nombre_aux_rightpage_right:Nnnn #1 {#4} {#5} {#6} + } + } + } + \exp_after:wN \group_end: + \l__jlreq_do_tl + } + } +} +\cs_generate_variant:Nn \__jlreq_pagestyle_concat_runhead_nombre:Nnnnnn { Nnnooo } + +% <ノンブル><空き><柱>,左寄せ,ノンブルは常に空でないと仮定する. +\cs_set:Nn \__jlreq_pagestyle_concat_runhead_nombre_aux_leftpage_left:Nnnn { + \tl_set:Nn #1 { + #3\hskip\glueexpr #4\relax#2 + } +} +% <ノンブル><空き><柱>,右寄せ +\cs_set:Nn \__jlreq_pagestyle_concat_runhead_nombre_aux_leftpage_right:Nnnn { + \tl_set:Nn #1 { + \setbox\jlreq@PageStyle@box=\hbox{#2} + #3 + \ifnum 0 + \ifdim\wd\jlreq@PageStyle@box=0pt~\else 1\fi + \ifdim\ht\jlreq@PageStyle@box=0pt~\else 1\fi + \ifdim\dp\jlreq@PageStyle@box=0pt~\else 1\fi + >0~\hskip\glueexpr #4\relax\fi + \box\jlreq@PageStyle@box + } +} +% <柱><空き><ノンブル>,左寄せ +\cs_set:Nn \__jlreq_pagestyle_concat_runhead_nombre_aux_rightpage_left:Nnnn { + \tl_set:Nn #1 { + \setbox\jlreq@PageStyle@box=\hbox{#2} + \copy\jlreq@PageStyle@box + \ifnum 0 + \ifdim\wd\jlreq@PageStyle@box=0pt~\else 1\fi + \ifdim\ht\jlreq@PageStyle@box=0pt~\else 1\fi + \ifdim\dp\jlreq@PageStyle@box=0pt~\else 1\fi + >0~\hskip\glueexpr #4\relax\fi + #3 + } +} +% <柱><空き><ノンブル>,右寄せ +\cs_set:Nn \__jlreq_pagestyle_concat_runhead_nombre_aux_rightpage_right:Nnnn { + \tl_set:Nn #1 { + #2\hskip\glueexpr #4\relax#3 + } } +% #1の左右に傍注調整用の空白を入れて#1に代入する +\cs_set:Nn \__jlreq_pagestyle_addsidenotemargin_left:N { + \__jlreq_pagestyle_addsidenotemargin_aux:Nnn #1 {\jlreq@sidenote@length + \jlreq@sidenote@sep} {} +} +\cs_set:Nn \__jlreq_pagestyle_addsidenotemargin_right:N { + \__jlreq_pagestyle_addsidenotemargin_aux:Nnn #1 {} {\jlreq@sidenote@length + \jlreq@sidenote@sep} +} +\cs_set:Nn \__jlreq_pagestyle_addsidenotemargin_bothside:N { + \__jlreq_pagestyle_addsidenotemargin_aux:Nnn #1 {\jlreq@sidenote@length + \jlreq@sidenote@sep} {\jlreq@sidenote@length + \jlreq@sidenote@sep} +} +% #2: 左,#3:右,#4:#2 + #3 +\cs_set:Nn \__jlreq_pagestyle_addsidenotemargin_aux:Nnn { + \tl_if_empty:NF #1 { + \tl_set:Nx #1 { + \tl_if_empty:nF {#2} { \exp_not:n { \hskip-\dimexpr #2\relax } } + \exp_not:o #1 + \tl_if_empty:nF {#3} { \exp_not:n { \hskip-\dimexpr #3\relax } } + } + } +} + + %.. \DeclarePageStyle -\newbox\jlreq@PageStyle@box +% markの処理 +% 出力する柱は偶数ページでは\leftmark,奇数ページでは\rightmark. +% 見出し<HEAD>に\rightmarkがついていれば,\<HAED>markを\markrightに書き換える. +% \leftmarkならば\markbothを使う. +% \leftmark\rightmark両方の時は\markboth? +% 現れる全ての見出しのレベルよりも小さいレベルの見出しについては\<HEAD>markを空にする処理を入れる. +% 実際の出力: +% yoko: +% 左ページ(縦奇数ページ横偶数ページ)ではノンブルが左(2.6.1.c),なので<ノンブル><空き><柱> +% 空きが無駄に入らないように気をつける.(右寄せの場合は柱が空なら空きを入れない.) +% \setbox..=して,幅が0か否かで判定する. +% 右ページでは逆になる.<柱><空き><ノンブル> +% 空きは柱文字で文字サイズ基準で計算する. +% <ノンブル>も<柱>もi,ii,...はiが左になるようにする. +% <柱>も<ノンブル>も<i中身><空き><ii中身><空き><iii中身>となる +% ただし空きは無駄に入れない.左寄せの場合は<i中身>が空ならばその右の<空き>は入れない. +% 空かの判定は\protected@edefして\ifx\@emptyで判定する. + +\newbox \jlreq@PageStyle@box +\tl_new:N \l__jlreq_pagestyle_odd_top_format_tl +\tl_new:N \l__jlreq_pagestyle_even_top_format_tl +\tl_new:N \l__jlreq_pagestyle_odd_bottom_format_tl +\tl_new:N \l__jlreq_pagestyle_even_bottom_format_tl +\prop_new:N \l__jlreq_pagestyle_nombre_prop +\prop_new:N \l__jlreq_pagestyle_nombre_position_prop +\prop_new:N \l__jlreq_pagestyle_odd_runninghead_prop +\prop_new:N \l__jlreq_pagestyle_even_runninghead_prop +\prop_new:N \l__jlreq_pagestyle_runninghead_position_prop +\prop_new:N \l__jlreq_pagestyle_nombre_font_prop +\prop_new:N \l__jlreq_pagestyle_runninghead_font_prop +\prop_new:N \l__jlreq_pagestyle_mark_format_prop +\tl_new:N \l__jlreq_pagestyle_command_tl +\tl_new:N \l__jlreq_pagestyle_gap_tl +\tl_new:N \l__jlreq_pagestyle_nombre_gap_tl +\tl_new:N \l__jlreq_pagestyle_runninghead_gap_tl +% 柱とノンブルの間 +\bool_new:N \l__jlreq_pagestyle_clearmarkcommand_bool +\bool_new:N \l__jlreq_pagestate_tate_bool +% 作業用 +\tl_new:N \l__jlreq_pagestyle_markcommands_tl \NewDocumentCommand{\DeclarePageStyle} { m +m } {% \expandafter\edef\csname jlreq@pagestyle@setting@#1\endcsname{\unexpanded{#2}}% - \begingroup - % フォーマットを空という可能性もあるかもしれないので,デフォルト値は\relaxで表す. - \let\jlreq@oddheadformat\relax - \let\jlreq@evenheadformat\relax - \let\jlreq@oddfootformat\relax - \let\jlreq@evenfootformat\relax - % 柱とノンブルの間 - \newif\ifjlreq@clearmarkcommand - \newif\ifjlreq@pstate % PageStyleTATE + \group_begin: + % フォーマットを空という可能性もあるかもしれないので,デフォルト値は\c_novalue_tlで表す. + \tl_set_eq:NN \l__jlreq_pagestyle_odd_top_format_tl \c_novalue_tl + \tl_set_eq:NN \l__jlreq_pagestyle_even_top_format_tl \c_novalue_tl + \tl_set_eq:NN \l__jlreq_pagestyle_odd_bottom_format_tl \c_novalue_tl + \tl_set_eq:NN \l__jlreq_pagestyle_even_bottom_format_tl \c_novalue_tl \keys_define:nn { PageStyle:#1 } { - tate .code:n = {\jlreq@pstatetrue}, - yoko .code:n = {\jlreq@pstatefalse}, - nombre .tl_set:N = \jlreq@nombre@i, - nombre_position .tl_set:N = \jlreq@nombre@i@position, - running_head_position .tl_set:N = \jlreq@running@head@i@position, - odd_running_head .tl_set:N = \jlreq@odd@running@head@i, - even_running_head .tl_set:N = \jlreq@even@running@head@i, + tate .code:n = {\bool_set_true:N \l__jlreq_pagestate_tate_bool}, + yoko .code:n = {\bool_set_false:N \l__jlreq_pagestate_tate_bool}, + nombre .code:n = { \prop_put:Nnn \l__jlreq_pagestyle_nombre_prop {0} {##1} }, + nombre_position .code:n = { \prop_put:Nnn \l__jlreq_pagestyle_nombre_position_prop {0} {##1} }, + running_head_position .code:n = { \prop_put:Nnn \l__jlreq_pagestyle_runninghead_position_prop {0} {##1} }, + odd_running_head .code:n = { \prop_put:Nnn \l__jlreq_pagestyle_odd_runninghead_prop {0} {##1} }, + even_running_head .code:n = { \prop_put:Nnn \l__jlreq_pagestyle_even_runninghead_prop {0} {##1} }, font .code:n = { - \def\jlreq@nombre@font{##1}% - \def\jlreq@running@head@font{##1}% + \prop_put:Nnn \l__jlreq_pagestyle_nombre_font_prop {0} {##1} + \prop_put:Nnn \l__jlreq_pagestyle_runninghead_font_prop {0} {##1} + }, + nombre_font .code:n = { \prop_put:Nnn \l__jlreq_pagestyle_nombre_font_prop {0} {##1} }, + running_head_font .code:n = { \prop_put:Nnn \l__jlreq_pagestyle_runninghead_font_prop {0} {##1} }, + mark_format .code:n = { + \prop_clear:N \l__jlreq_pagestyle_mark_format_prop + \prop_put_from_keyval:Nn \l__jlreq_pagestyle_mark_format_prop {##1} }, - nombre_font .tl_set:N = \jlreq@nombre@font, - running_head_font .tl_set:N = \jlreq@running@head@font, - mark_format .code:n = {\edef\jlreq@mark@format{\unexpanded{##1}}}, - command .code:n = {\edef\jlreq@command{\unexpanded{##1}}}, - gap .tl_set:N = \jlreq@gap, - nombre_gap .tl_set:N = \jlreq@nombre@gap, - running_head_gap .tl_set:N = \jlreq@running@head@gap, + command .tl_set:N = \l__jlreq_pagestyle_command_tl, + gap .tl_set:N = \l__jlreq_pagestyle_gap_tl, + nombre_gap .tl_set:N = \l__jlreq_pagestyle_nombre_gap_tl, + running_head_gap .tl_set:N = \l__jlreq_pagestyle_runninghead_gap_tl, % trueにすると,\ps@***実行時にまず\***markを全て\@gobbleにする. - clear_markcommand .choices:nn = {true,false}{\csname jlreq@clearmarkcommand##1\endcsname}, - odd_head_format .code:n = {\edef\jlreq@oddheadformat{\unexpanded{##1}}}, - even_head_format .code:n = {\edef\jlreq@evenheadformat{\unexpanded{##1}}}, - odd_foot_format .code:n = {\edef\jlreq@oddfootformat{\unexpanded{##1}}}, - even_foot_format .code:n = {\edef\jlreq@evenfootformat{\unexpanded{##1}}}, - % 二つ目 - nombre_ii .tl_set:N = \jlreq@nombre@ii, - nombre_ii_position .tl_set:N = \jlreq@nombre@ii@position, - running_head_ii_position .tl_set:N = \jlreq@running@head@ii@position, - odd_running_head_ii .tl_set:N = \jlreq@odd@running@head@ii, - even_running_head_ii .tl_set:N = \jlreq@even@running@head@ii, - nombre_ii_font .tl_set:N = \jlreq@nombre@ii@font, - running_head_ii_font .tl_set:N = \jlreq@running@head@ii@font, - % 三つ目 - nombre_iii .tl_set:N = \jlreq@nombre@iii, - nombre_iii_position .tl_set:N = \jlreq@nombre@iii@position, - running_head_iii_position .tl_set:N = \jlreq@running@head@iii@position, - odd_running_head_iii .tl_set:N = \jlreq@odd@running@head@iii, - even_running_head_iii .tl_set:N = \jlreq@even@running@head@iii, - nombre_iii_font .tl_set:N = \jlreq@nombre@iii@font, - running_head_iii_font .tl_set:N = \jlreq@running@head@iii@font + clear_markcommand .bool_set:N = \l__jlreq_pagestyle_clearmarkcommand_bool, + odd_head_format .code:n = { \tl_set:Nx \l__jlreq_pagestyle_odd_top_format_tl { \exp_not:n {##1} } }, + even_head_format .code:n = { \tl_set:Nx \l__jlreq_pagestyle_even_top_format_tl { \exp_not:n {##1} } }, + odd_foot_format .code:n = { \tl_set:Nx \l__jlreq_pagestyle_odd_bottom_format_tl { \exp_not:n {##1} } }, + even_foot_format .code:n = { \tl_set:Nx \l__jlreq_pagestyle_even_bottom_format_tl { \exp_not:n {##1} } }, + } + \cs_set:Nn \l__jlreq_tmpa:nn { + \keys_define:nn { PageStyle:#1 } { + nombre_##1 .code:n = { \prop_put:Nnn \l__jlreq_pagestyle_nombre_prop {##2} {####1} }, + nombre_##1_position .code:n = { \prop_put:Nnn \l__jlreq_pagestyle_nombre_position_prop {##2} {####1} }, + running_head_##1_position .code:n = { \prop_put:Nnn \l__jlreq_pagestyle_runninghead_position_prop {##2} {####1} }, + odd_running_head_##1 .code:n = { \prop_put:Nnn \l__jlreq_pagestyle_odd_runninghead_prop {##2} {####1} }, + even_running_head_##1 .code:n = { \prop_put:Nnn \l__jlreq_pagestyle_even_runninghead_prop {##2} {####1} }, + nombre_##1_font .code:n = { \prop_put:Nnn \l__jlreq_pagestyle_nombre_font_prop {##2} {####1} }, + running_head_##1_font .code:n = { \prop_put:Nnn \l__jlreq_pagestyle_runninghead_font_prop {##2} {####1} } + } + } + \clist_map_inline:nn {1,2}{ + \str_set:Nx \l__jlreq_tmpa_str { \int_to_roman:n { ##1 + 1 } } + \exp_args:Nx \l__jlreq_tmpa:nn { \l__jlreq_tmpa_str } { ##1 } } \keys_set:nn { PageStyle:#1 } { yoko, @@ -4393,359 +4806,191 @@ running_head_ii_font = {}, running_head_ii_position = {}, odd_running_head_ii = {}, even_running_head_ii = {}, running_head_iii_font = {}, running_head_iii_position = {}, odd_running_head_iii = {}, even_running_head_iii = {}, command = {}, mark_format = {}, gap = {1.5\jlreq@zw}, nombre_gap = {}, running_head_gap = {}, - clear_markcommand = {true}, + clear_markcommand = true, } \keys_set:nn { PageStyle:#1 } {#2} - % ノンブル同士の間や柱同士の間のデフォルトはノンブルと柱の間の空き量 - \ifx\jlreq@nombre@gap\@empty\let\jlreq@nombre@gap=\jlreq@gap\fi - \ifx\jlreq@running@head@gap\@empty\let\jlreq@running@head@gap=\jlreq@gap\fi - % _iiが存在するか調べて\ifjlreq@headii@existに入れる - \newif\ifjlreq@headii@exist - \jlreq@headii@existfalse - \clist_map_inline:nn { \jlreq@odd@running@head@ii, \jlreq@odd@running@head@ii } { - \tl_if_empty:VF ##1 { \jlreq@headii@existtrue } - }% - % markの処理 - % (odd|even)_running_head(_ii)が_<見出し命令>で与えられている場合,次のようにする. - % * \jlreq@(odd|even)@running@head(@ii)をマーク出力命令(\(left|right)mark or \jlreq@extra(left|right)mark{<num>})に書き換える - % - evenの場合はleft,oddの場合はright. - % - @iiがなければ\(left|right)mark,@iiがあれば\jlreq@extra(left|right)mark{1} - % * 例えば_<見出し命令>が_sectionならば,\jlreq@markdata@sectionに{{<I1>}{<I2>}{<I3>}}を追加する.ここで<I1>,<I2>,<I3>は - % - I1: @iiが無いときにodd or even - % - I2: @iiが無ければ0,あれば1. - % - I3: マーク出力命令がleftかrightに応じて l or r.(上述のようにoddかevenかで判定される.) - % * 他にも_sectionが指定されている柱があれば,\jlreq@markdata@sectionにさらに追加で加えていく. - % * \jlreq@(odd|even)@running@head(@ii)@heading@levelに<見出し命令>のレベルを入れる.レベルが不明な時は\relaxになる. - % また,\jlreq@headingmarklistに<見出し命令>の一覧を入れる. - \def\jlreq@headingmarklist{}% - \clist_map_variable:nNn { odd, even } \jlreq@parity { - \clist_map_variable:nNn { 0, 1, 2 } \jlreq@i { - % \jlreq@pagestyle@setmarkが上の処理を行う. - \edef\jlreq@next{\noexpand\jlreq@pagestyle@setmark{\exp_not:c {jlreq@\jlreq@parity @running@head@\@roman\numexpr\jlreq@i + 1\relax}}{\exp_not:o {\jlreq@i}}{\exp_not:o {\jlreq@parity}}{jlreq@markdata}{\noexpand\jlreq@headingmarklist}}% - \jlreq@next - }% - }% - % \jlreq@minimumlevelに見出しの最低(数値が小さいという意味)レベルを入れる. - \let\jlreq@minimumlevel=\@undefined - \def\jlreq@markdefinecommand{}% - \exp_args:No \clist_map_variable:nNn \jlreq@headingmarklist \jlreq@heading { - \ifx\jlreq@heading\@empty\else - \expandafter\let\expandafter\jlreq@level\csname jlreq@heading@level@\jlreq@heading\endcsname - \ifx\jlreq@level\relax\else - \ifx\jlreq@minimumlevel\@undefined\let\jlreq@minimumlevel=\jlreq@level - \else\ifnum\jlreq@minimumlevel>\jlreq@level\space\let\jlreq@minimumlevel=\jlreq@level\fi\fi - \fi - % \jlreq@markdata@<見出し命令>にある情報とmark_formatをもとに,\<見出し命令>markを定義するマクロを作成,\jlreq@markdefinecommandに入れる. - \edef\jlreq@do{\noexpand\jlreq@pagestyle@make@headingmark{\ifjlreq@headii@exist *\fi}{\exp_not:o {\jlreq@heading}}{\exp_not:o {\jlreq@mark@format}}{\exp_args:Nc \exp_not:o {jlreq@markdata@\jlreq@heading}}}% - \jlreq@do - \tl_put_right:Nx \jlreq@markdefinecommand { \exp_not:o {\jlreq@result} }% - \fi - }% - \ifx\jlreq@minimumlevel\@undefined\else - \tl_put_right:Nx \jlreq@markdefinecommand { \exp_not:N \jlreq@pagestyle@setclearmark { \exp_not:o {\jlreq@minimumlevel} } } - \fi % 見出しを出す場合:evenに章などの高いレベルの見出しを出す(2.6.3.a) - \@ifundefined{jlreq@odd@running@head@i@heading@level}{}{\@ifundefined{jlreq@even@running@head@i@heading@level}{}{% - \ifnum\jlreq@odd@running@head@i@heading@level<\jlreq@even@running@head@i@heading@level - \jlreq@note{偶数ページには奇数ページよりアウトラインレベルの高い見出しを入れる (ページスタイル #1 内,2.6.3.a).}% - \fi - }}% - % 二番目以降にフォント設定を追加 - \clist_map_variable:nNn { ii, iii } \jlreq@i { - \clist_map_variable:nNn { odd, even } \jlreq@parity { - \jlreq@pagestyle@addfont@tocs{jlreq@\jlreq@parity @running@head@\jlreq@i}{jlreq@running@head@\jlreq@i @font}% - }% - \jlreq@pagestyle@addfont@tocs{jlreq@nombre@\jlreq@i}{jlreq@nombre@\jlreq@i @font}% - }% - % \jlreq@oddhead,\jlreq@oddfoot,\jlreq@evenhead,\jlreq@evenfootに必要なものを入れる. - \jlreq@if{\ifjlreq@pstate\fi}{% tate - % headの方に処理を入れる.footは空. - \def\jlreq@oddfoot{}\def\jlreq@evenfoot{}% - \ifx\jlreq@nombre@i@position\@empty\def\jlreq@nombre@i@position{5\jlreq@zw}\fi - \ifx\jlreq@running@head@i@position\@empty\def\jlreq@running@head@i@position{4\jlreq@zw}\fi - \edef\jlreq@gapcs{\noexpand\hskip\noexpand\glueexpr\exp_not:o {\jlreq@nombre@gap}\noexpand\relax}% - \jlreq@pagestyle@addifempty{\jlreq@nombre@iii@position}{\jlreq@nombre@ii}{\jlreq@gapcs}{\jlreq@nombre@iii}% - \jlreq@pagestyle@addifempty{\jlreq@nombre@ii@position}{\jlreq@nombre@i}{\jlreq@gapcs}{\jlreq@nombre@ii}% - \edef\jlreq@gapcs{\noexpand\hskip\noexpand\glueexpr\exp_not:o {\jlreq@running@head@gap}\noexpand\relax}% - \jlreq@pagestyle@addifempty{\jlreq@running@head@iii@position}{\jlreq@odd@running@head@ii}{\jlreq@gapcs}{\jlreq@odd@running@head@iii}% - \jlreq@pagestyle@addifempty{\jlreq@running@head@ii@position}{\jlreq@odd@running@head@i}{\jlreq@gapcs}{\jlreq@odd@running@head@ii}% - \jlreq@pagestyle@addifempty{\jlreq@running@head@iii@position}{\jlreq@even@running@head@ii}{\jlreq@gapcs}{\jlreq@even@running@head@iii}% - \jlreq@pagestyle@addifempty{\jlreq@running@head@ii@position}{\jlreq@even@running@head@i}{\jlreq@gapcs}{\jlreq@even@running@head@ii}% - \def\jlreq@nombre@contents{}% ノンブルを入れる(下の方に出力) - \clist_map_variable:nNn { i, ii, iii } \jlreq@i { - \expandafter\let\expandafter\jlreq@position\csname jlreq@nombre@\jlreq@i @position\endcsname - \expandafter\ifx\csname jlreq@nombre@\jlreq@i\endcsname\@empty\else - \jlreq@ifgluezero{\glueexpr\jlreq@position\relax}{\def\jlreq@position{}}{}% - \expandafter\let\expandafter\jlreq@tempa\expandafter=\csname jlreq@nombre@\jlreq@i\endcsname - \jlreq@pagestyle@addfont@tocs{jlreq@tempa}{jlreq@nombre@font}% - \tl_put_right:Nx \jlreq@nombre@contents {% - \exp_not:N \hbox to 0pt{\exp_not:N \hss - \exp_not:o {\jlreq@tempa}% - \ifx\jlreq@position\@empty\else\exp_not:n {\hskip \glueexpr}\exp_not:o {\jlreq@position}\exp_not:N \relax\fi - }% - }% - \fi - }% - % \jlreq@(odd|even)@contentsに柱を入れる(上の方に出力) - \clist_map_variable:nNn { odd, even } \jlreq@parity { - \expandafter\def\csname jlreq@\jlreq@parity @contents\endcsname{}% - \clist_map_variable:nNn { i, ii, iii } \jlreq@i { - \expandafter\let\expandafter\jlreq@position\csname jlreq@running@head@\jlreq@i @position\endcsname - \expandafter\ifx\csname jlreq@\jlreq@parity @running@head@\jlreq@i\endcsname\@empty\else - \jlreq@ifgluezero{\glueexpr\jlreq@position\relax}{\def\jlreq@position{}}{}% - \expandafter\let\expandafter\jlreq@tempa\expandafter=\csname jlreq@\jlreq@parity @running@head@\jlreq@i\endcsname - \jlreq@pagestyle@addfont@tocs{jlreq@tempa}{jlreq@running@head@font}% - \tl_put_right:cx {jlreq@\jlreq@parity @contents} {% - \exp_not:N \hbox to 0pt{\exp_not:n {\hskip\glueexpr\headsep + \headheight}% - \if@tate\else\exp_not:n {+ \topskip - \Cht}\fi - \ifx\jlreq@position\@empty\else + \exp_not:o {\jlreq@position}\fi\exp_not:N \relax - \exp_not:o {\jlreq@tempa}% - \exp_not:N \hss - }% - }% - \fi - }% - % \jlreq@(odd|even)headの構築 - % 空き指定には基本版面の文字サイズを使う(2.6.1.c) - \@ifundefined{jlreq@\jlreq@parity headformat} - {\def\jlreq@format{####1}}% - {\expandafter\let\expandafter\jlreq@format\csname jlreq@\jlreq@parity headformat\endcsname}% - \edef\jlreq@do{\unexpanded{\def\jlreq@tempa##1}{\exp_not:o {\jlreq@format}}}\jlreq@do - \edef\jlreq@tempb{% - \exp_args:Nc \exp_not:o {jlreq@\jlreq@parity @contents}% - \noexpand\hfil - \exp_not:o {\jlreq@nombre@contents}% - }% - \expandafter\edef\csname jlreq@\jlreq@parity head\endcsname{% - \unexpanded{\setbox\jlreq@tempboxa=\hbox to \dimexpr\headsep + \headheight + \textheight}\if@tate\else\unexpanded{- \topskip + 1\jlreq@zh}\fi\noexpand\relax - {% - \unexpanded{\tate\adjustbaseline}% - \expandafter\exp_not:o \expandafter{\expandafter\jlreq@tempa\expandafter{\jlreq@tempb}}% - }% + \@ifundefined{jlreq@heading@level@\__jlreq_pagestyle_get_runninghead_section:Nn \l__jlreq_pagestyle_odd_runninghead_prop {0}}{}{ + \@ifundefined{jlreq@heading@level@\__jlreq_pagestyle_get_runninghead_section:Nn \l__jlreq_pagestyle_even_runninghead_prop {0}}{}{ + \int_compare:nNnT + {\csname jlreq@heading@level@\__jlreq_pagestyle_get_runninghead_section:Nn \l__jlreq_pagestyle_odd_runninghead_prop {0}\endcsname} + < + {\csname jlreq@heading@level@\__jlreq_pagestyle_get_runninghead_section:Nn \l__jlreq_pagestyle_even_runninghead_prop {0}\endcsname} + { + \jlreq@note{偶数ページには奇数ページよりアウトラインレベルの高い見出しを入れる (ページスタイル #1 内,2.6.3.a).}% + } + } + } + % ノンブル同士の間や柱同士の間のデフォルトはノンブルと柱の間の空き量 + \tl_if_empty:NT \l__jlreq_pagestyle_nombre_gap_tl { \tl_set_eq:NN \l__jlreq_pagestyle_nombre_gap_tl \l__jlreq_pagestyle_gap_tl } + \tl_if_empty:NT \l__jlreq_pagestyle_runninghead_gap_tl { \tl_set_eq:NN \l__jlreq_pagestyle_runninghead_gap_tl \l__jlreq_pagestyle_gap_tl } + % \<見出し>markを作り,\l__jlreq_tmpa_propに格納 + \__jlreq_pagestyle_makemarkcommand:NNNN \l__jlreq_tmpa_prop \l__jlreq_pagestyle_odd_runninghead_prop \l__jlreq_pagestyle_even_runninghead_prop \l__jlreq_pagestyle_mark_format_prop + % \<見出し>markを定義するコマンドを入れる + \tl_set:Nn \l__jlreq_pagestyle_markcommands_tl {} + % 最小レベルの決定を行い,\<見出し命令>markの定義を入れていく. + \int_set:Nn \l__jlreq_tmpa_int {9999} + \prop_map_inline:Nn \l__jlreq_tmpa_prop { + \int_compare:nNnT { \l__jlreq_tmpa_int } > { \csname jlreq@heading@level@##1 \endcsname } { + \int_set:Nn \l__jlreq_tmpa_int { \csname jlreq@heading@level@##1 \endcsname } + } + \tl_put_right:Nx \l__jlreq_pagestyle_markcommands_tl { \exp_not:n {##2} } + } + \int_compare:nNnF {\l__jlreq_tmpa_int}={9999} { + \tl_put_right:Nx \l__jlreq_pagestyle_markcommands_tl { + \exp_not:N \jlreq@pagestyle@setclearmark {\int_use:N \l__jlreq_tmpa_int } + } + } + \bool_if:NTF \l__jlreq_pagestate_tate_bool { + \tl_set:Nx \l__jlreq_do_tl {} + \prop_clear:N \l__jlreq_tmpa_prop + \clist_map_inline:nn { odd,even } { + % .柱→\l__jlreq_tmpa_tl + \__jlreq_pagestyle_maketate_runhead:NcNNo \l__jlreq_tmpa_tl { l__jlreq_pagestyle_##1_runninghead_prop } \l__jlreq_pagestyle_runninghead_font_prop \l__jlreq_pagestyle_runninghead_position_prop \l__jlreq_pagestyle_runninghead_gap_tl + % ノンブル→\l__jlreq_tmpb_tl + \__jlreq_pagestyle_maketate_nombre:NNNNo \l__jlreq_tmpb_tl \l__jlreq_pagestyle_nombre_prop \l__jlreq_pagestyle_nombre_font_prop \l__jlreq_pagestyle_nombre_position_prop \l__jlreq_pagestyle_nombre_gap_tl + % 柱とノンブルを結合→\l__jlreq_tmpa_tl + \tl_set:Nx \l__jlreq_tmpa_tl { \exp_not:o \l__jlreq_tmpa_tl \exp_not:N \hfil \exp_not:o \l__jlreq_tmpb_tl } + % formatを適用. + \tl_set:Nn \l__jlreq_tmpb_tl {####1} % デフォルトフォーマット + \__jlreq_pagestyle_applyformat:NocN \l__jlreq_tmpa_tl \l__jlreq_tmpa_tl { l__jlreq_pagestyle_##1_top_format_tl } \l__jlreq_tmpb_tl + % 周りのボックスをつける.結果は\l__jlreq_tmpa_propにいれる. + \prop_put:Nnx \l__jlreq_tmpa_prop { ##1-top } { + \exp_not:n {\setbox\@tempboxa=\hbox to \dimexpr\headsep + \headheight + \textheight} + \legacy_if:nF { @tate } { \exp_not:n { - \topskip + 1\jlreq@zh } } + \exp_not:N \relax + { \exp_not:n { \tate\adjustbaseline } \exp_not:o \l__jlreq_tmpa_tl } % Underful対策 \ifx l\jlreq@engine - \unexpanded{\wd\jlreq@tempboxa=\headheight}% + \unexpanded{\wd\@tempboxa=\headheight}% \else - \unexpanded{\ht\jlreq@tempboxa=\headheight\dp\jlreq@tempboxa=0pt}% + \unexpanded{\ht\@tempboxa=\headheight\dp\@tempboxa=0pt}% \fi - }% - }% - % \jlreq@tempboxaを正しく配置する - \edef\jlreq@lefthead@adjustbox{% - \noexpand\hskip\noexpand\dimexpr\if@tate\unexpanded{- \Cdp}\fi \unexpanded{- \headsep - 1\jlreq@zw\relax}% - \unexpanded{\box\jlreq@tempboxa\hfil}% - }% - \edef\jlreq@righthead@adjustbox{% - \noexpand\hskip\unexpanded{\dimexpr\textwidth}\if@tate\unexpanded{- \topskip + \Cht}\fi\unexpanded{ + \headsep\relax}% - \unexpanded{\box\jlreq@tempboxa\hss}% - }% - \if@tate - \tl_put_right:Nx \jlreq@oddhead{\exp_not:o {\jlreq@lefthead@adjustbox}}% - \tl_put_right:Nx \jlreq@evenhead{\exp_not:o {\jlreq@righthead@adjustbox}}% - \else - \tl_put_right:Nx \jlreq@oddhead{\exp_not:o {\jlreq@righthead@adjustbox}}% - \tl_put_right:Nx \jlreq@evenhead{\exp_not:o {\jlreq@lefthead@adjustbox}}% - \fi + } + } + % 位置調整,左側に柱+ノンブルがある場合 + \tl_set:Nx \l__jlreq_tmpa_tl { + \exp_not:n { \hskip\dimexpr } \legacy_if:nT { @tate } { \exp_not:n { - \Cdp } } \exp_not:n { - \headsep - 1\jlreq@zw\relax } + \exp_not:n { \box\@tempboxa\hfil } + } + % 位置調整,右側に柱+ノンブルがある場合 + \tl_set:Nx \l__jlreq_tmpb_tl { + \exp_not:n { \hskip\dimexpr\textwidth } \legacy_if:nT { @tate } { \exp_not:n { - \topskip + \Cht } } \exp_not:n { + \headsep\relax } + \exp_not:n { \box\@tempboxa\hss } + } + % 位置調整とすでに構築したブロックをくっつける. + \legacy_if:nTF { @tate } { + \prop_put:Nnx \l__jlreq_tmpa_prop { odd-top } { \prop_item:Nn \l__jlreq_tmpa_prop { odd-top } \exp_not:o \l__jlreq_tmpa_tl } + \prop_put:Nnx \l__jlreq_tmpa_prop { even-top } { \prop_item:Nn \l__jlreq_tmpa_prop { even-top } \exp_not:o \l__jlreq_tmpb_tl } + }{ + \prop_put:Nnx \l__jlreq_tmpa_prop { odd-top } { \prop_item:Nn \l__jlreq_tmpa_prop { odd-top } \exp_not:o \l__jlreq_tmpb_tl } + \prop_put:Nnx \l__jlreq_tmpa_prop { even-top } { \prop_item:Nn \l__jlreq_tmpa_prop { even-top } \exp_not:o \l__jlreq_tmpa_tl } + } + % \l__jlreq_tmpa_tlに定義を入れる + \tl_set:Nx \l__jlreq_tmpa_tl { + \exp_not:n { \def\@oddhead } { \prop_item:Nn \l__jlreq_tmpa_prop { odd-top } } + \exp_not:n { \def\@oddfoot } { } + \exp_not:n { \def\@evenhead } { \prop_item:Nn \l__jlreq_tmpa_prop { even-top } } + \exp_not:n { \def\@evenfoot } { } + } }{% yoko - % 場所を正規化する. - \def\jlreq@nombre@i@position@default{{bottom}{center}}% - \def\jlreq@running@head@i@position@default{{top}{center}}% - % ii以降の位置は指定されていない場合はiのそれに合わせる - \clist_map_variable:nNn { jlreq@nombre, jlreq@running@head } \jlreq@tempa { - \clist_map_variable:nNn { ii, iii } \jlreq@i { - \expandafter\ifx\csname\jlreq@tempa @\jlreq@i @position\endcsname\@empty - \expandafter\let\csname\jlreq@tempa @\jlreq@i @position\expandafter\endcsname\csname\jlreq@tempa @i@position\endcsname - \fi - \expandafter\edef\csname\jlreq@tempa @\jlreq@i @position@default\endcsname{\csname\jlreq@tempa @i@position@default\endcsname}% - }% - }% - \clist_map_variable:nNn { - jlreq@nombre@i@position, jlreq@nombre@ii@position, jlreq@nombre@iii@position, jlreq@running@head@i@position, jlreq@running@head@ii@position, jlreq@running@head@iii@position - } \jlreq@tempa { - \edef\jlreq@next{\noexpand\jlreq@pagestyle@parse@position{\exp_args:Nc \exp_not:o {\jlreq@tempa}}{\exp_not:c {\jlreq@tempa}}{\exp_args:Nc \exp_not:o {\jlreq@tempa @default}}}% - \jlreq@next - }% + \__jlreq_pagestyle_normalizeposition:Nn \l__jlreq_pagestyle_runninghead_position_prop {{top}{center}} + \__jlreq_pagestyle_normalizeposition:Nn \l__jlreq_pagestyle_nombre_position_prop {{bottom}{center}} + % 警告 + \cs_set:Nn \__jlreq_tmpa:Nn { \str_set:Nx ##1 { \use_ii:nn ##2 } } + \cs_generate_variant:Nn \__jlreq_tmpa:Nn { No } + \tl_set:Nx \l__jlreq_tmpa_tl { \prop_item:Nn \l__jlreq_pagestyle_nombre_position_prop {0} } + \__jlreq_tmpa:No \l__jlreq_tmpa_str \l__jlreq_tmpa_tl + \tl_set:Nx \l__jlreq_tmpb_tl { \prop_item:Nn \l__jlreq_pagestyle_runninghead_position_prop {0} } + \__jlreq_tmpa:No \l__jlreq_tmpb_str \l__jlreq_tmpb_tl \bool_if:nT { ( \legacy_if_p:n { @tate } && ( - \str_if_eq_p:ee { \expandafter\@secondoftwo\jlreq@nombre@i@position } { right } || - \str_if_eq_p:ee { \expandafter\@secondoftwo\jlreq@running@head@i@position }{ right } + \str_if_eq_p:Vn \l__jlreq_tmpa_str { right } || + \str_if_eq_p:Vn \l__jlreq_tmpb_str { right} ) ) || ( (! \legacy_if_p:n { @tate } ) && ( - \str_if_eq_p:ee { \expandafter\@secondoftwo\jlreq@nombre@i@position }{ left } || - \str_if_eq_p:ee { \expandafter\@secondoftwo\jlreq@running@head@i@position }{ left } + \str_if_eq_p:Vn \l__jlreq_tmpa_str { left } || + \str_if_eq_p:Vn \l__jlreq_tmpb_str { left } ) ) } { - \if@twoside + \legacy_if:nT { @twoside } { \jlreq@note{柱やノンブルは,左ページでは,基本版面の左端の延長線にノンブル又は柱の先頭をそろえて配置するか,基本版面の左端の延長線から基本版面の文字サイズの全角アキだけ右に寄せた位置に配置する (ページスタイル #1 内,2.6.1.b).}% - \fi + } }% % フォント変更命令に文字出力命令が入っているとエラーになるのを回避するために\setboxでごまかす. - \setbox\jlreq@tempboxa=\hbox{\jlreq@running@head@font + \setbox\jlreq@tempboxa=\hbox{\prop_item:Nn \l__jlreq_pagestyle_runninghead_font_prop {0} \bool_if:nT { - \dim_compare_p:n { \jlreq@gap < 1.49\jlreq@zw } || - ( \dim_compare_p:n { \jlreq@gap > 1.51\jlreq@zw } && \dim_compare_p:n { \jlreq@gap < 1.99\jlreq@zw } ) || - \dim_compare_p:n { \jlreq@gap > 2.01\jlreq@zw } + \dim_compare_p:n { \l__jlreq_pagestyle_gap_tl < 1.49\jlreq@zw } || + ( \dim_compare_p:n { \l__jlreq_pagestyle_gap_tl > 1.51\jlreq@zw } && \dim_compare_p:n { \l__jlreq_pagestyle_gap_tl < 1.99\jlreq@zw } ) || + \dim_compare_p:n { \l__jlreq_pagestyle_gap_tl > 2.01\jlreq@zw } }{ \jlreq@note{ノンブルと柱との空き量は柱に使用する文字サイズの2倍又は1.5倍とする (ページスタイル #1 内,2.6.1.c).} } }% - % 初期化 - \clist_map_variable:nNn { odd, even } \jlreq@parity { - \clist_map_variable:nNn { top, bottom } \jlreq@vert { - \clist_map_variable:nNn { left, center, right } \jlreq@hor { - \clist_map_variable:nNn { nombre, running@head } \jlreq@type { - \expandafter\def\csname jlreq@\jlreq@type @\jlreq@parity @\jlreq@vert @\jlreq@hor\endcsname{}% - }% - }% - }% - % ページが左か右か - \jlreq@ifleftpage{\jlreq@parity}{\def\jlreq@pagehor{left}}{\def\jlreq@pagehor{right}}% - % \jlreq@(running@head|nombre)@(odd|even)@(top|bottom)@(left|center|right)に入れていく - % 左ページではノンブルが左(2.6.1.c),i,ii,...はiが左になるようにする. - \clist_map_variable:nNn { i, ii, iii } \jlreq@i { - % nombre - \expandafter\ifx\csname jlreq@nombre@\jlreq@i\endcsname\@empty\else - \edef\jlreq@position{\csname jlreq@nombre@\jlreq@i @position\endcsname}% - \edef\jlreq@vert{\expandafter\@firstoftwo\jlreq@position}% - \edef\jlreq@hor{\expandafter\@secondoftwo\jlreq@position}% - \str_if_eq:VnT \jlreq@parity { even } {\jlreq@reverse@leftright{\jlreq@hor}} - \jlreq@ifleftpage{\jlreq@parity}{\let\jlreq@addtocs=\tl_put_right:cx}{\let\jlreq@addtocs\tl_put_left:cx}% - \edef\jlreq@csname{jlreq@nombre@\jlreq@parity @\jlreq@vert @\jlreq@hor}% - \expandafter\ifx\csname\jlreq@csname\endcsname\@empty\else\jlreq@addtocs{\jlreq@csname}{\unexpanded{\hskip\glueexpr}\exp_not:o {\jlreq@nombre@gap}\noexpand\relax}\fi - \jlreq@addtocs{\jlreq@csname}{\exp_args:Nc \exp_not:o {jlreq@nombre@\jlreq@i}}% - \fi - % running@head - % 一度「紙面の外から」の順番で{A}{B}{C}と入れる - \expandafter\ifx\csname jlreq@\jlreq@parity @running@head@\jlreq@i \endcsname\@empty\else - \edef\jlreq@position{\csname jlreq@running@head@\jlreq@i @position\endcsname}% - \edef\jlreq@vert{\expandafter\@firstoftwo\jlreq@position}% - \edef\jlreq@hor{\expandafter\@secondoftwo\jlreq@position}% - \str_if_eq:VnT \jlreq@parity { even } {\jlreq@reverse@leftright{\jlreq@hor}} - \str_if_eq:VVTF \jlreq@hor \jlreq@pagehor {\let\jlreq@addtocs=\tl_put_right:cx}{\let\jlreq@addtocs=\tl_put_left:cx}% - \edef\jlreq@csname{jlreq@running@head@\jlreq@parity @\jlreq@vert @\jlreq@hor}% - \jlreq@addtocs{\jlreq@csname}{{\exp_args:Nc \exp_not:o {jlreq@\jlreq@parity @running@head@\jlreq@i}}}% - \fi - }% - % {A}{B}{C}の順だった柱を結合する.本体は\jlreq@pagestyle@make@runninghead. - \clist_map_variable:nNn { top, bottom } \jlreq@vert { - \clist_map_variable:nNn { left, center, right } \jlreq@hor { - \str_if_eq:VnTF \jlreq@hor { right } { \def\jlreq@tempa{*} } { \def\jlreq@tempa{} } - \edef\jlreq@do{\noexpand\jlreq@pagestyle@make@runninghead{jlreq@running@head@\jlreq@parity @\jlreq@vert @\jlreq@hor}{\exp_not:o {\jlreq@tempa}}{\exp_not:o {\jlreq@running@head@gap}}}% - \jlreq@do - }% - }% - % ノンブルと柱を結合し,必要ならばフォント設定をする. - \clist_map_variable:nNn { top, bottom } \jlreq@vert {% - \clist_map_variable:nNn { left, center, right } \jlreq@hor {% - \edef\jlreq@csname{jlreq@\jlreq@parity @\jlreq@vert @\jlreq@hor}% - \edef\jlreq@runheadcsname{jlreq@running@head@\jlreq@parity @\jlreq@vert @\jlreq@hor}% - \edef\jlreq@nombrecsname{jlreq@nombre@\jlreq@parity @\jlreq@vert @\jlreq@hor}% - % nombreにフォント設定を追加. - \expandafter\ifx\csname\jlreq@nombrecsname\endcsname\@empty\else - \ifx\jlreq@nombre@font\@empty\else - \expandafter\edef\csname\jlreq@nombrecsname\endcsname{{\exp_not:o {\jlreq@nombre@font}\exp_args:Nc \exp_not:o {\jlreq@nombrecsname}}}% - \fi - \fi - \jlreq@if{\expandafter\ifx\csname\jlreq@runheadcsname\endcsname\@empty\fi}{% - % 柱が空:ノンブルのみでよい - \expandafter\let\csname\jlreq@csname\expandafter\endcsname\csname\jlreq@nombrecsname\endcsname - }{% - \jlreq@if{\expandafter\ifx\csname\jlreq@nombrecsname\endcsname\@empty\fi}{% -% % ノンブルが空.柱のみでよい. - \jlreq@pagestyle@addfont@tocs{\jlreq@runheadcsname}{jlreq@running@head@font}% - \expandafter\let\csname\jlreq@csname\expandafter\endcsname\csname\jlreq@runheadcsname\endcsname - }{% -% % 両方ある場合:左ページではノンブルが左,右ページではノンブルが右. - \jlreq@ifleftpage{\jlreq@parity}{% - \str_if_eq:VnTF \jlreq@hor { right } { - % <ノンブル><空き><柱>,右寄せ - % 柱が空出ないときに限り<空き>を入れる. - \jlreq@pagestyle@addfont@totokens{\exp_not:N \dim_compare:nF { \exp_not:n { \wd\jlreq@PageStyle@box=0pt } } { \exp_not:N \hskip\exp_not:o {\jlreq@gap}\exp_not:N \relax } }{jlreq@running@head@font}{jlreq@tempa}% - \expandafter\edef\csname\jlreq@csname\endcsname{% - \unexpanded{\setbox\jlreq@PageStyle@box=\hbox}{\exp_not:o {\jlreq@running@head@font}\exp_args:Nc \exp_not:o {\jlreq@runheadcsname}}% - \exp_args:Nc \exp_not:o {\jlreq@nombrecsname}\exp_not:o {\jlreq@tempa}\unexpanded{\box\jlreq@PageStyle@box}% - }% - }{% - % <ノンブル><空き><柱>,左寄せ - % ノンブルは常に空ではないと仮定する. - \jlreq@pagestyle@addfont@totokens{\unexpanded{\hskip\glueexpr}\exp_not:o {\jlreq@gap}\noexpand\relax\exp_args:Nc \exp_not:o {\jlreq@runheadcsname}}{jlreq@running@head@font}{jlreq@tempa}% - \expandafter\edef\csname\jlreq@csname\endcsname{\exp_args:Nc \exp_not:o {\jlreq@nombrecsname}\exp_not:o {\jlreq@tempa}}% - }% - }{% - \str_if_eq:VnTF \jlreq@hor { left } { - % <柱><空き><ノンブル>,左寄せ - \jlreq@pagestyle@addfont@totokens{% - \unexpanded{\setbox\jlreq@PageStyle@box=\hbox}{\exp_args:Nc \exp_not:o {\jlreq@runheadcsname}}% - \unexpanded{\copy\jlreq@PageStyle@box} - \exp_not:N \dim_compare:nF { \exp_not:n { \wd\jlreq@PageStyle@box=0pt } } { - \exp_not:n { \hskip\glueexpr } \exp_not:o {\jlreq@gap} \exp_not:N \relax - } - }{jlreq@running@head@font}{jlreq@tempa}% - \expandafter\edef\csname\jlreq@csname\endcsname{\exp_not:o {\jlreq@tempa}\exp_args:Nc \exp_not:o {\jlreq@nombrecsname}}% - }{% - % <柱><空き><ノンブル>,右寄せ - \jlreq@pagestyle@addfont@totokens{\exp_args:Nc \exp_not:o {\jlreq@runheadcsname}\unexpanded{\hskip\glueexpr}\exp_not:o {\jlreq@gap}\noexpand\relax}{jlreq@running@head@font}{jlreq@tempa}% - \expandafter\edef\csname\jlreq@csname\endcsname{\exp_not:o {\jlreq@tempa}\exp_args:Nc \exp_not:o {\jlreq@nombrecsname}}% - }% - }% - }% - }% - }% - }% - }% - % 四カ所構築 - \jlreq@pagestyle@setheadfoot{\jlreq@oddhead}{jlreq@odd@top@left}{jlreq@odd@top@center}{jlreq@odd@top@right}% - \jlreq@pagestyle@setheadfoot{\jlreq@oddfoot}{jlreq@odd@bottom@left}{jlreq@odd@bottom@center}{jlreq@odd@bottom@right}% - \jlreq@pagestyle@setheadfoot{\jlreq@evenhead}{jlreq@even@top@left}{jlreq@even@top@center}{jlreq@even@top@right}% - \jlreq@pagestyle@setheadfoot{\jlreq@evenfoot}{jlreq@even@bottom@left}{jlreq@even@bottom@center}{jlreq@even@bottom@right}% - \bool_if:nTF { \dim_compare_p:n { \jlreq@sidenote@length > 0pt } && (! \legacy_if_p:n { @tate } ) }{ - \def\jlreq@defaultformat{\hss\hbox to \jlreqyokoheadlength{####1}\hss}% - }{% - \def\jlreq@defaultformat{####1}% - }% - \jlreq@pagestyle@applyformat{\jlreq@oddhead}{\jlreq@oddheadformat}{\jlreq@defaultformat}% - \jlreq@pagestyle@applyformat{\jlreq@evenhead}{\jlreq@evenheadformat}{\jlreq@defaultformat}% - \jlreq@pagestyle@applyformat{\jlreq@oddfoot}{\jlreq@oddfootformat}{\jlreq@defaultformat}% - \jlreq@pagestyle@applyformat{\jlreq@evenfoot}{\jlreq@evenfootformat}{\jlreq@defaultformat}% - % 傍注用調整 - \ifdim\jlreq@sidenote@length>0pt - \if@tate\else - \if@twocolumn - \jlreq@pagestyle@addsidenotemargin@bothside{\jlreq@oddhead}% - \jlreq@pagestyle@addsidenotemargin@bothside{\jlreq@oddfoot}% - \jlreq@pagestyle@addsidenotemargin@bothside{\jlreq@evenhead}% - \jlreq@pagestyle@addsidenotemargin@bothside{\jlreq@evenfoot}% - \else - \jlreq@pagestyle@addsidenotemargin@right{\jlreq@oddhead}% - \jlreq@pagestyle@addsidenotemargin@right{\jlreq@oddfoot}% - \jlreq@pagestyle@addsidenotemargin@left{\jlreq@evenhead}% - \jlreq@pagestyle@addsidenotemargin@left{\jlreq@evenfoot}% - \fi - \fi - \fi - }% - \edef\jlreq@do{% - \noexpand\edef\exp_not:c {ps@#1}{% - \noexpand\unexpanded{% - \unexpanded{\def\jlreq@current@pagestyle{#1}}% - \ifjlreq@clearmarkcommand\unexpanded{\jlreq@heading@execmacro@toallheadings\jlreq@clearheadingmarks}\fi - \ifjlreq@headii@exist - \unexpanded{\let\@mkboth=\jlreq@markboth}% - \else - \unexpanded{\let\@mkboth=\markboth}% - \fi - \unexpanded{\def\@oddhead}{\exp_not:o {\jlreq@oddhead}}% - \unexpanded{\def\@oddfoot}{\exp_not:o {\jlreq@oddfoot}}% - \unexpanded{\def\@evenhead}{\exp_not:o {\jlreq@evenhead}}% - \unexpanded{\def\@evenfoot}{\exp_not:o {\jlreq@evenfoot}}% - \exp_not:o {\jlreq@markdefinecommand}% - \exp_not:o {\jlreq@command}% - }% - }% - }% - \expandafter\endgroup - \jlreq@do + \prop_clear:N \l__jlreq_tmpa_prop % \l__jlreq_tmpa_prop{odd-top}に中身トークン列 + \clist_map_inline:nn { odd,even } { % ##1 + \clist_map_inline:nn { top,bottom } { % ####1 + \prop_clear:N \l__jlreq_tmpb_prop % 左,真ん中,右のトークン列をいったん入れる + \clist_map_inline:nn {left,center,right} { % ########1 + % even時は左右がひっくり返るが,それは下位マクロに任せる + % 柱→\l__jlreq_tmpa_tl + \__jlreq_pagestyle_makeyoko_each:NnnncNNo \l__jlreq_tmpa_tl {##1} {####1} {########1} { l__jlreq_pagestyle_##1_runninghead_prop } \l__jlreq_pagestyle_runninghead_font_prop \l__jlreq_pagestyle_runninghead_position_prop \l__jlreq_pagestyle_runninghead_gap_tl + % ノンブル→\l__jlreq_tmpa_tl + \__jlreq_pagestyle_makeyoko_each:NnnncNNo \l__jlreq_tmpb_tl {##1} {####1} {########1} { l__jlreq_pagestyle_nombre_prop } \l__jlreq_pagestyle_nombre_font_prop \l__jlreq_pagestyle_nombre_position_prop \l__jlreq_pagestyle_nombre_gap_tl + % 柱とノンブルを結合し\l__jlreq_tmpb_propへ代入 + \__jlreq_pagestyle_concat_runhead_nombre:Nnnooo \l__jlreq_tmpa_tl {########1} {##1} \l__jlreq_tmpa_tl \l__jlreq_tmpb_tl \l__jlreq_pagestyle_gap_tl + \prop_put:Nno \l__jlreq_tmpb_prop {########1} \l__jlreq_tmpa_tl + } + % 左,中央,右を結合し\l__jlreq_tmpa_tlへ + \__jlreq_pagestyle_concat_left_center_right:Nneee \l__jlreq_tmpa_tl {##1} {\prop_item:Nn \l__jlreq_tmpb_prop {left} } {\prop_item:Nn \l__jlreq_tmpb_prop {center} } {\prop_item:Nn \l__jlreq_tmpb_prop {right} } + % デフォルトのフォーマットの設定 + \bool_if:nTF { \dim_compare_p:n { \jlreq@sidenote@length > 0pt } && (! \legacy_if_p:n { @tate } ) }{ + \tl_set:Nn \l__jlreq_tmpb_tl {\hss\hbox to \jlreqyokoheadlength{########1}\hss} + }{ + \tl_set:Nn \l__jlreq_tmpb_tl {########1} + } + \__jlreq_pagestyle_applyformat:NocN \l__jlreq_tmpa_tl \l__jlreq_tmpa_tl { l__jlreq_pagestyle_##1_####1_format_tl } \l__jlreq_tmpb_tl + % 傍注用調整 + \dim_compare:nNnT {\jlreq@sidenote@length}>{0pt} { + \legacy_if:nF { @tate } { + \legacy_if:nTF { @twocolumn } { + \__jlreq_pagestyle_addsidenotemargin_bothside:N \l__jlreq_tmpa_tl + }{ + \str_if_eq:nnTF { ##1} { odd } { + \__jlreq_pagestyle_addsidenotemargin_right:N \l__jlreq_tmpa_tl + }{ + \__jlreq_pagestyle_addsidenotemargin_left:N \l__jlreq_tmpa_tl + } + } + } + } + \prop_put:Nno \l__jlreq_tmpa_prop {##1-####1} \l__jlreq_tmpa_tl + } + } + % \l__jlreq_tmpa_tlに定義を入れる + \tl_set:Nx \l__jlreq_tmpa_tl { + \exp_not:n { \def\@oddhead } { \prop_item:Nn \l__jlreq_tmpa_prop { odd-top } } + \exp_not:n { \def\@oddfoot } { \prop_item:Nn \l__jlreq_tmpa_prop { odd-bottom } } + \exp_not:n { \def\@evenhead } { \prop_item:Nn \l__jlreq_tmpa_prop { even-top } } + \exp_not:n { \def\@evenfoot } { \prop_item:Nn \l__jlreq_tmpa_prop { even-bottom } } + } + } + % _iiが存在するか調べて\l__jlreq_tmpa_boolに入れる + \bool_set:Nn \l__jlreq_tmpa_bool { + \prop_if_in_p:Nn \l__jlreq_pagestyle_odd_runninghead_prop {1} || \prop_if_in_p:Nn \l__jlreq_pagestyle_odd_runninghead_prop {2} + } + \tl_set:Nx \l__jlreq_do_tl { + \exp_not:n {\edef} \exp_not:c {ps@#1} { \exp_not:N \exp_not:n { + \exp_not:n { \def\jlreq@current@pagestyle{#1} } + \bool_if:nT { \l__jlreq_pagestyle_clearmarkcommand_bool } { \exp_not:n { \jlreq@heading@execmacro@toallheadings\jlreq@clearheadingmarks } } + \exp_not:n {\let\@mkboth=}\bool_if:NTF \l__jlreq_tmpa_bool { \exp_not:N \markboth } { \exp_not:N \jlreq@markboth } + \exp_not:o \l__jlreq_tmpa_tl + \exp_not:o \l__jlreq_pagestyle_markcommands_tl + }} + } + \exp_after:wN \group_end: + \l__jlreq_do_tl } \if@tate @@ -4945,11 +5190,11 @@ *top .code:n = { \__jlreq_@makecaption_align_set_with_check_value:Vn \l_keys_key_str {#1} }, *bottom .code:n = { \__jlreq_@makecaption_align_set_with_check_value:Vn \l_keys_key_str {#1} }, unknown .code:n = { - \clist_map_variable:nNn {#1} \l_jlreq_tmpa_tl { - \tl_trim_spaces:N \l_jlreq_tmpa_tl - \str_set_eq:NN \l_jlreq_tmpa_str \l_keys_key_str - \str_put_left:Nn \l_jlreq_tmpa_str {@} - \__jlreq_@makecaption_align_set:VV \l_jlreq_tmpa_str \l_jlreq_tmpa_tl + \clist_map_variable:nNn {#1} \l__jlreq_tmpa_tl { + \tl_trim_spaces:N \l__jlreq_tmpa_tl + \str_set_eq:NN \l__jlreq_tmpa_str \l_keys_key_str + \str_put_left:Nn \l__jlreq_tmpa_str {@} + \__jlreq_@makecaption_align_set:VV \l__jlreq_tmpa_str \l__jlreq_tmpa_tl } } } @@ -5939,7 +6184,7 @@ \hbox_to_wd:nn {##1} { \def#1 { } \kanjishape{n-jidori}\selectfont - \def\kanjishape####1{\jlreq@useoriginalcs{kanjishape}{####1-jidori}} + \def\kanjishape####1{\jlreq@useoriginalcs@witharguments{kanjishape}{{####1-jidori}}} ##2 \hskip\glueexpr 0pt~minus~1fil\relax } @@ -5965,7 +6210,7 @@ \NewDocumentCommand { \akigumi } { m m } { \mode_if_vertical:TF { \leavevmode } {} \group_begin: - \__jlreq_setkanjiskip:nn { \jlreqkanjiskip + #1 } { } + \__jlreq_setkanjiskip:nn { \jlreqkanjiskip + #1 } { \jlreqxkanjiskip + #1 } \hbox:n {#2} \group_end: } |