元の問題は e-TeX 拡張を使うと「抜け道」ができるので、汎用的な場合に変えてみた。
LaTeX(ToL)で、以下の要件を満たす命令
\makecounterprinter
を実装せよ。
\makecounterprinter\制御綴A\制御綴B
は\制御綴A
を以下のようなカウンタ値出力命令として定義する。\制御綴B{<整数>}
は引数の整数を「ある特定の形式」(例えばナベアツ)で出力する命令であると仮定する。ただし、引数は 10 進表記で与えなければならない。\制御綴A{<LaTeXカウンタ名>}
は当該のカウンタの現在の値を\制御綴B
の定める形式で出力する。\制御綴B
は脆弱(fragile)であるかも知れない。
この問題の実装を用いて元の問題を実現すると次のようになる。ただし、\makecounterprinter
の正しい実装が makecounterprinter.sty パッケージに記してあるものとする。
\documentclass[a4paper]{article} \usepackage{makecounterprinter} \makeatletter %!!!!!!!!!!!!!!!!!!!!!!!!! %% 平凡な \nabeazz の定義 \newcommand\nabeazz[1]{% \begingroup \@tempcnta#1\relax \@tempcntb\@tempcnta \divide\@tempcntb3 \multiply\@tempcntb3 \ifnum\@tempcnta=\@tempcntb \xx@ahofont \else \expandafter\xx@in@nabeazz@a\the\@tempcnta3\relax \fi \the\@tempcnta \endgroup } \def\xx@in@nabeazz@a#13#2\relax{% \ifx!#2!\else \xx@ahofont \fi } \def\xx@ahofont{\usefont{OT1}{cmfr}{m}{it}} \makeatother %!!!!!!!!!!!!!!!!!!!!!!!!! % \nabeazz から \NabeAzzLike を作る \makecounterprinter\NabeAzzLike\nabeazz \begin{document} \renewcommand{\theenumi}{\NabeAzzLike{enumi}} Essential packages: \begin{enumerate} \item graphicx; \label{gra} \item hyperref; \label{hyp} \item iamjatex. \label{iam} \end{enumerate} Items \ref{gra}, \ref{hyp}, and \ref{iam}. \end{document}
もう一つの例として、tatesuji パッケージ(藤田眞作氏作)の \tatesuji
命令を用いてカウンタ値を出力してみる。
\documentclass[a4paper,landscape]{tarticle} \usepackage{makecounterprinter} \usepackage{tatesuji} \usepackage{bxbase}\recordpapersize \makecounterprinter\withtatesuji\tatesuji \begin{document} \renewcommand{\theenumi}{\withtatesuji{enumi}} \renewcommand{\labelenumi}{\theenumi 、} とっても参考になるもの。 \begin{enumerate} \item 「美文書」 \item 「独習」 \item 「マクロツイーター」 \label{are} \end{enumerate} 特に\ref{are}はお奨め……なわけない。 \end{document}