diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/jlreq/jlreq-helpers.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/jlreq/jlreq-helpers.sty | 40 |
1 files changed, 25 insertions, 15 deletions
diff --git a/Master/texmf-dist/tex/latex/jlreq/jlreq-helpers.sty b/Master/texmf-dist/tex/latex/jlreq/jlreq-helpers.sty index f08dd817098..2d4039951bb 100644 --- a/Master/texmf-dist/tex/latex/jlreq/jlreq-helpers.sty +++ b/Master/texmf-dist/tex/latex/jlreq/jlreq-helpers.sty @@ -246,12 +246,17 @@ % \jlreq@parsekeyval@nokey{<action>}{<parse対象>} % action内では#1=key, #2=val % \ifjlreq@parsekeyval@nokey@novalue{<true code>}{<false code>}でvalueがないか判定できる. -% <parse対象>は一回だけ展開される. -\newcommand{\jlreq@parsekeyval@nokey}[2]{% +% *つきは<parse対象>を一回だけ展開する. +\def\jlreq@parsekeyval@nokey{\@ifstar{\jlreq@parsekeyval@nokey@{*}}{\jlreq@parsekeyval@nokey@{}}} +\newcommand{\jlreq@parsekeyval@nokey@}[3]{% \begingroup \long\def\jlreq@do{}% - \long\def\jlreq@parsekeyval@nokey@execute##1##2{#1}% - \expandafter\jlreq@parsekeyval@nokey@i@wuniq\expandafter\jlreq@uniqtoken#2,\jlreq@endmark,% + \long\def\jlreq@parsekeyval@nokey@execute##1##2{#2}% + \jlreq@ifempty{#1}{% + \jlreq@parsekeyval@nokey@i@wuniq\jlreq@uniqtoken#3,\jlreq@endmark,% + }{% + \expandafter\jlreq@parsekeyval@nokey@i@wuniq\expandafter\jlreq@uniqtoken#3,\jlreq@endmark,% + }% \expandafter\endgroup \jlreq@do } @@ -285,9 +290,9 @@ \long\def\jlreq@parsekeyval@nokey@removeequal#1{\jlreq@parsekeyval@nokey@removeequal@\jlreq@uniqtoken#1\jlreq@endmark} \long\def\jlreq@parsekeyval@nokey@removeequal@#1=\jlreq@endmark{\expandafter\unexpanded\expandafter{\@gobble#1}} -% #1の先頭のスペースを削除し,#2に入れる.ただし#1={ X}の時は" X"が入る. +% #1の先頭のスペースを削除し,#2に入れる. +\long\def\jlreq@helper@trim#1#2{\edef#2{\jlreq@helper@trim@i{#1}}} \def\jlreq@do#1{% #1 = " "として後で実行 - \long\def\jlreq@helper@trim##1##2{\edef##2{\jlreq@helper@trim@i{##1}}} \long\def\jlreq@helper@trim@i##1{% \jlreq@iffirsttoken{##1}{#1}% % 先頭スペースの除去.{}を外さないために\jlreq@uniqtokenを前後にいったん挟む. @@ -370,19 +375,24 @@ }% } +% オレオレラベル…… +% \jlreq@reference@ref{ラベル名}{デフォルト値} +\def\jlreq@reference@ref#1{\expandafter\ifx\csname jlreq@reference@#1\endcsname\relax\expandafter\@secondoftwo\else\expandafter\@firstoftwo\fi{\csname jlreq@reference@#1\endcsname}} +% \jlreq@reference@label{ラベル名}{値} +\def\jlreq@reference@label#1#2{\protected@write\@auxout{}{\string\@newl@bel{jlreq@reference}{#1}{#2}}}% +\def\jlreq@reference@immediate@write#1#2{\immediate\write\@auxout{\string\@newl@bel{jlreq@reference}{#1}{#2}}}% +\def\jlreq@reference@ifexist#1{\expandafter\ifx\csname jlreq@reference@#1\endcsname\relax\expandafter\@secondoftwo\else\expandafter\@firstoftwo\fi} + +% 自動生成されるラベル用の番号 +\newcount\jlreq@reference@count +\jlreq@reference@count=0 -\RequirePackage[savepos]{zref} -\newcount\jlreq@zref@reference@count -\jlreq@zref@reference@count=0 % 現在のページを得る -\zref@newprop*{jlreq@page}[0]{\number\c@page} -\zref@addprop{main}{jlreq@page} \newcount\jlreq@currentpage -% \jlreq@setcurrentpageをすると,\jlreq@currentpageにこの場所のページ数が入る \newcommand*{\jlreq@setcurrentpage}{% - \global\advance\jlreq@zref@reference@count by 1 - \zref@labelbyprops{jlreq@currentpage.\the\jlreq@zref@reference@count}{jlreq@page}% - \global\jlreq@currentpage=\zref@extractdefault{jlreq@currentpage.\the\jlreq@zref@reference@count}{jlreq@page}{\c@page}\relax + \global\advance\jlreq@reference@count by 1 + \jlreq@reference@label{jlreq@currentpage.\the\jlreq@reference@count}{\noexpand\arabic{page}}% + \global\jlreq@currentpage=\jlreq@reference@ref{jlreq@currentpage.\the\jlreq@reference@count}{\the\c@page}\relax } % 先頭にあるマクロを展開しまくった結果の先頭を#2に入れる. |