マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

TeX芸人実力判定問題、その3(改訂版)

元の問題は 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}