名前: kmaeda 日時: 2015-02-01 21:33:10 IPアドレス: 106.188.37.*
>>57602 マクロがどう展開されるかを知るには,\show を使うとよいです. \show\thesection とどこかに書いておくと,タイプセット時に該当箇所を読んだところで > \thesection=\long macro: ->\rensuji {\@arabic \c@section }. と出力されます.これは utarticle.cls 内を \thesection で検索してみれば, 上のように再定義してあることが確認できると思います. 同様に, \newcounter{hoge} \show\thehoge とすると, > \thehoge=macro: ->\@arabic \c@hoge . となっていることがわかります. \rensuji も \@arabic もさらに複数のトークン列に展開されていくので, \expandafter で1回展開しただけだとうまくいかないです. ではどうすればいいかというと,\edef であらかじめ完全に展開しておいてから \hantate に 渡すようにするとよいのではないでしょうか. \documentclass{utarticle} \usepackage[uplatex]{otf} \makeatletter \def\hantate#1{% \@tfor\@tempa:=#1\do{% \hspace{\kanjiskip}% \ifvmode \leavevmode \fi \iftdir% \hskip\kanjiskip% \hbox to1zw{\hss\hbox{\yoko\@tempa}\hss}% \hskip\kanjiskip\relax% \else \hbox{\@tempa}% \fi% }% } \def\Vol#1{% \edef\@tempa{#1}% ここで一度完全に展開しておく. \expandafter\hantate\expandafter{\@tempa}% } \makeatother \begin{document} \setcounter{section}{123} 第\Vol{\arabic{section}}号 \newcounter{hoge} \setcounter{hoge}{123} 第\Vol{\thehoge}号 \end{document}
この書き込みへの返事: