summaryrefslogtreecommitdiff
path: root/language/japanese
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2022-04-06 03:01:01 +0000
committerNorbert Preining <norbert@preining.info>2022-04-06 03:01:01 +0000
commit333540a9182285f9d72d7d39be3fa730c135d664 (patch)
treebdffc5aea11535dc73e81752b4a77eed105989ff /language/japanese
parenta4e931576165d0a4a143915f4725399272e06fee (diff)
CTAN sync 202204060301
Diffstat (limited to 'language/japanese')
-rw-r--r--language/japanese/jlreq/README-ja.md9
-rw-r--r--language/japanese/jlreq/README.md10
-rw-r--r--language/japanese/jlreq/jlreq-ja.pdfbin369879 -> 371465 bytes
-rw-r--r--language/japanese/jlreq/jlreq.cls1639
-rw-r--r--language/japanese/jlreq/jlreq.pdfbin119257 -> 119712 bytes
5 files changed, 959 insertions, 699 deletions
diff --git a/language/japanese/jlreq/README-ja.md b/language/japanese/jlreq/README-ja.md
index 5fa67b371b..192995610f 100644
--- a/language/japanese/jlreq/README-ja.md
+++ b/language/japanese/jlreq/README-ja.md
@@ -528,7 +528,14 @@ JFMの名前は次の通りです.`[]`で囲まれている文字は設定に
- LaTeXのフック関連コードの多くを削除.(まだ安定していなそうなので.)
- `\RequirePackage{ifthen}`をやめた.
- upLaTeXにおける`\kcatcode`の再設定をやめた.
-
+* 2022-04-05
+ - `\jlreqsetup`に`warichu_opening`と`warichu_closing`を追加.
+ - 別行見出し周りのペナルティを少し調整.
+ - `\DeclareFontShape`後の`\selectfont`でエラーが出るバグ修正.
+ - `use_reverse_pagination`がうまく動いていなかったのを修正.
+ - 二番目の柱を使うと不自然に消えることがあるバグの修正.ついでに`\DeclarePageStyle`を書き直した.
+ - `\@makefntext`を調整.
+ - その他バグ修正.
--------------
Noriyuki Abe
diff --git a/language/japanese/jlreq/README.md b/language/japanese/jlreq/README.md
index 6703885bdd..9c4454ef73 100644
--- a/language/japanese/jlreq/README.md
+++ b/language/japanese/jlreq/README.md
@@ -162,7 +162,15 @@ This package is distributed under the BSD 2-Clause License. See [LICENSE](LICENS
- Removed many codes relating with LaTeX hooks mechanism (because it seems not stable.)
- Removed `\RequirePackage{ifthen}`.
- Removed `\kcatcode`settings with upLaTeX.
-
+* 2022-04-05
+ - Added `warichu_opening` and `warichu_closing` to `\jlreqsetup`.
+ - Change a little bit penalties around block heading.
+ - Fixed a bug: `\selectfont` after `\DeclareFontShape` raised an error.
+ - Fixed a bug: `use_reverse_pagination` did not work.
+ - Fixed a bug: A second running head disappeared sometimes.
+ - Rewrote `\DeclarePageStyle`.
+ - Deleted `\@makefntext`, define `\@makefntext` directly.
+ - Fixed other bugs.
--------------
Noriyuki Abe
diff --git a/language/japanese/jlreq/jlreq-ja.pdf b/language/japanese/jlreq/jlreq-ja.pdf
index a4fbea437d..f6d242e355 100644
--- a/language/japanese/jlreq/jlreq-ja.pdf
+++ b/language/japanese/jlreq/jlreq-ja.pdf
Binary files differ
diff --git a/language/japanese/jlreq/jlreq.cls b/language/japanese/jlreq/jlreq.cls
index a06ad633fc..2f94644b9e 100644
--- a/language/japanese/jlreq/jlreq.cls
+++ b/language/japanese/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:
}
diff --git a/language/japanese/jlreq/jlreq.pdf b/language/japanese/jlreq/jlreq.pdf
index 8c24ea8a46..a0e4e66fdb 100644
--- a/language/japanese/jlreq/jlreq.pdf
+++ b/language/japanese/jlreq/jlreq.pdf
Binary files differ