名前: . 日時: 2005-05-01 02:45:52 IPアドレス: 210.230.18.*
>>35644 # 文字数をカウントしたいテキストを(PDF 化したものなどから)選択し, # 文字数カウント機能をもったアプリケーションに貼り付けてカウントさせる, # という方法は過去にも挙げられていたようですが,“コンパイル時に # カウントするようにしたい”とのことですから,TeX 自身に文字数カウントを # 行わせる場合について考えます. 文字数をカウントしたいテキストが文字列のみからなる(すなわち, LaTeX のコマンドあるいはユーザ定義のコマンドを一切含まない(*)) のでしたら,\@tfor を用いて文字数をカウントすることができます. # \@tfor については,LaTeX におけるマクロ作成の基本についての # 解説を参照してください. # (*) 実際には,\$ のようなある種のコマンドは含まれていても # よいのですが,どういうものが含まれていても構わないかは # 文字数カウントのマクロを実際に書いてみればおわかりに # なることでしょう. ただし,そのような文字数カウントを“任意の”記述に対して行うのは, 事実上無理でしょう. 実際,TeX のプリミティブな機能としてはそのような機能は 提供されていないので,(TeX の外部のプログラムを併用することなく) 実現するのであればマクロレベルの処理を行うことになります. ここで,文字数をカウントしたいテキストの中にユーザ定義のマクロ あるいは LaTeX 自身が提供するマクロが存在すると問題が生じます. 例えば,\LaTeX によって出力される LaTeX のロゴの文字数を カウントしようとすると,とりあえず 5 文字とカウントするところでしょう. # ほかの数え方をしたい人もいるかもしれませんが, # ここでは 5 文字とみなすことにします. しかし,\LaTeX を展開しなければ,これは 1 個のトークンですし, (\protect = \relax である状況で)\LaTeX を展開してしまうと 5 個の文字 L,A,T,E,X 以外のトークンも現れます (いずれにせよマクロレベルの処理で一応数えることができる トークン数と出力結果における文字数とは一致しません). もっとも,文字数をカウントしたいテキストに現れる可能性がある コマンドをある一定の範囲に限定し(特に TeX のプリミティブを 直接用いることは一切行わないものとして), 文字列カウント処理の際に限り“トークン数=出力結果での文字数”と なるようにその一定範囲のコマンドを一時的に再定義した状態で 文字列をカウントしたいテキスト中のコマンドを展開し,そののち 文字列のみからなるテキストの場合と同様に文字数カウントを行う という方法を用いることは一応可能です. # “サポートするコマンド”の種類はひとそれぞれでしょうから, # “既製品”が存在することは期待すべくもないでしょうけれども. # なお,文字列をカウントしたいテキストの外部で # \newbox\mytextbox \setbox\mytextbox=\hbox{なんらかのテキスト} # のようにボックスを作成したのち,文字列をカウントしたい # テキストの中で \unhcopy\mytextbox によってそのボックスの中身を # コピーするといった場合まで考えると,“完全な”文字数カウントは # 組版ソフト自身のプリミティブな機能として提供されない限り # 無理ではないか,と思えてきます.
この書き込みへの返事: