レポートで論述するときに文字数が指定されることがありますが、LaTeXで文字数をカウントした結果を末尾に(xxx文字)のように表示させる方法を説明します。
まず、LaTeXには文字列を1つずつ取り出す \@tfor
コマンドというものがあります1 2。
\@tfor 変数 := 文字列 \do{ 1文字ごとに実行する内容 }
1文字ごとに実行する内容のところで変数をインクリメントしていけば、文字数をカウントしたことになります。実際の文字数をカウントするマクロは以下の通りです 1。
\makeatletter
\def\WordCount#1{%
\@tempcnta\z@%
\@tfor \@tempa:=#1\do{\advance\@tempcnta\@ne}%
{#1}%
(\the\@tempcnta 文字)
}
\makeatother
マクロの説明です:
-
\makeatletter ... \makeatother
: @を文字として扱います。これにより\@tfor
などのマクロを実行することができます。 -
\@tempcnta\z@
: 一時的なカウンタ\@tempcnta
にゼロ (\z@
) を代入します。 -
\@tfor \@tempa:=#1\do{...}
: マクロの引数に渡された文字列を1文字ずつ取り出して、変数\@tempa
に代入します。 -
\advance\@tempcnta\@ne
: 変数\@tempcnta
にイチ (\@ne
) を加算します。 -
\the\@tempcnta
: 変数\@tempcnta
を文字列に変換します。
なお、LaTeXでは事前に \z@
, \@ne
, tw@
, thr@@
には 0, 1, 2, 3 の値が代入されています。
文字数カウントマクロの使い方
実際にマクロを使うときは以下のようになります。
\WordCount{LaTeXとはテキストベースの組版処理システムである。}
実行結果:
LaTeX とはテキストベースの組版処理システムである。(27 文字)
複数段落での使い方
複数の段落になる場合は、改行 \\
とインデント \indent
を使います。
単純に段落間に空行を挟むと、\@tfor
のループでエラーになります。
\WordCount{
LaTeXとはテキストベースの組版処理システムである。
\\\indent
学術機関においては標準的な論文執筆ツールとして扱われている。
}
実行結果:
LaTeX とはテキストベースの組版処理システムである。
学術機関においては標準的な論文執筆ツールとして扱われている。(59 文字)
使用上の注意ですが、改行 \\
とインデント \indent
も1文字として扱います。
もしこれらは除外したい場合は、tfor の1文字ごとに実行する内容で条件分岐を書けばできると思います。
それでは良い LaTeX 生活を。