最後のコマンド

最後のコマンド

- Cmdr Straker の投稿
返信数: 4
文中にコマンド ¥hoge がいくつか入っていて、最後の ¥hoge だけ挙動を変更したいと考えています。
¥hoge の個数が分かっていれば、カウンタを埋めておいて、それが個数と一致するかどうかで分岐すればよいと思うのですが、個数を知る方法が分かりません。
どうすればよいか教えてください。

Cmdr Straker への返信

Re: 最後のコマンド

- 匿 名 の投稿
(相互参照の機能と同様に)aux ファイル経由でデータを受け渡します.

e.g.
\documentclass{article}
\newcounter{foocnt}
\makeatletter
\def\foo{\stepcounter{foocnt}%
  \if@filesw%%% aux ファイルへの書き込みを行う場合に限り,出力
      \immediate\write\@auxout{\string\gdef\string\numberoffoo{\arabic{foocnt}}}%
  \fi
  \ifnum\value{foocnt}=\numberoffoo\relax Last \texttt{\string\foo}%
  \else                                  \texttt{\string\foo} No.\thefoocnt
  \fi}
\makeatother
\def\numberoffoo{0}
\begin{document}
Sample: \foo, \foo, and \foo.
\end{document}
匿 名 への返信

Re: 最後のコマンド

- Cmdr Straker の投稿
匿名様

ありがとうございます。
望み通りのものができました。
この動作として、次の理解で正しいでしょうか。

aux ファイルに埋め込まれたコマンドは、
\begin{document} のタイミングで実行される。

宜しくお願いします。

Cmdr Straker への返信

Re: 最後のコマンド

- 匿 名 の投稿
>この動作として、次の理解で正しいでしょうか。
>aux ファイルに埋め込まれたコマンドは、
>\begin{document} のタイミングで実行される。
「半分」正解です.

LaTeX は aux ファイルを次のように扱います.

・\begin{document} の時点で:
既存の aux ファイルを(あれば)読み込む.
次いで,aux ファイルを更新する場合には
aux ファイルを書き込み用にオープンする.

・\end{document} の時点で:
aux ファイルを更新した場合には,(\begin{document} の
時点で書き込み用にオープンしていた)aux ファイルを
クローズしたのち,「相互参照に関する情報の変化の有無の検査」の
ための設定のもとで aux ファイル(更新したばかりのもの)を
改めて読み込む.
# aux ファイルを更新していない場合には何もしません.

# あと,\include の際には,読み込まれるファイルごとに
# aux ファイルを作成し,「それらの aux ファイルを読み込む」という
# 指示をメインの aux ファイルに書き込みます.ただし,このことは,
# \begin{document} あるいは \end{document} の際に aux ファイルの
# 内容が読み取られるか否かには影響しません.

このようなことになっているので,aux ファイルの内容は
(更新前と更新後の)2 度読み取られることが大半です.
# \nofiles 適用時には更新前の 1 回のみ読み取られます.

aux ファイルを利用する場合,処理内容によっては
「\begin{document} 時用の処理」と「\end{document} 時用の処理」を
それぞれ用意する必要があることもあります.
# もっとも,そのような場合には,まず「\begin{document} 時用の処理」を
# 与えておき,「\end{document} 時用の処理」は \AtEndDocument 経由で
# 設定すればよいのですが.