\ajTsumesuji2がenumitemのlabelに入った時壊れる

Re: \ajTsumesuji2がenumitemのlabelに入った時壊れる

- Z. R. の投稿
返信数: 0

>とりあえず現状 \ajTsumesuji には直接数字を入れないといけないということのようです

恐らく、「カウンタの値に対して\ajTsumesuji2を適用したい」のであれば

% どちらもダメ
\ajTsumesuji2{\arabic{page}}
\ajTsumesuji2{\value{page}}

ではなく\ajLabelを使って

\ajLabel\ajTsumesuji2{page}

と書くべき、という設計なのだと思います。

ただしこれをlabelに指定しようとしても、このコードには\arabic{‹カウンタ名›}がないので\arabic*の形が使えません。そこで以下の方針をとります。

  • \ajLabel\ajTsumesuji2{‹カウンタ名›}を独自のカウンタ出力命令として定義する
  • それを\AddEnumerateCounterで「labelで使えるカウンタ出力命令」として登録する

定義部分のコードは以下のようになります。

\newcommand\myAjTsumesujiTwo{\ajLabel\ajTsumesuji2}
\AddEnumerateCounter{\myAjTsumesujiTwo}{\myDummy}{99}
\newlist{mondaiA}{enumerate}{1}
\setlist[mondaiA,1]{%
label=\kakko{\myAjTsumesujiTwo*},
leftmargin=1\zw,
listparindent=1\zw,labelsep=1\zw,itemindent=1\zw,
topsep=0mm,itemsep=\baselineskip
}

ここで注意すべきなのは「\myAjTsumesujiTwo\NewDocumentCommandで定義してはいけない」ということです。マニュアルにある通り、label中でfragileな命令を使う場合は保護(\protect)を付ける必要があります。\NewDocumentCommandで定義した命令は自動的に保護付きになります。(例えば はやて さんの回答の\kakkoTsumesujiTwo\NewDocumentCommandで定義する必要がある。)ところがいま定義した\myAjTsumesujiTwoカウンタ出力命令、つまり\arabic等と同類なので、保護付きにするのは不適切です。このため、\NewDocumentCommandではなく\newcommand(あるいは\NewExpandableDocumentCommand)で定義する必要があります。