マクロツイーター

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

verbatim 環境で「\end{verbatim}」と書くための素敵な方法

あまりにも素敵なので、よい子のみなさんはマネしないように。入力漢字コードがシフト JIS である pLaTeX 限定。

% 文字コードはシフトJIS
\documentclass[a4paper]{article}
\usepackage[ascii]{inputenc} % おまじないっ!
%↓↓↓素敵な定義: オワタ を end に変換する.
\def オワタ{end}
%↑↑↑素敵な定義おわり
\begin{document}
You can use \verb|verbatim| environment as follows:
\begin{quote}\small
% end の代わりに オワタ と書けばよい!
\begin{verbatim}
Some text\ldots.
\begin{verbatim}
\expandafter\expandafter\expandafter!!
\オワタ{verbatim}
Some other text\ldots.
\end{verbatim}
\end{quote}
\end{document}

大事なのは「オワタ」を半角カナで書くことである。((別に「オワタ」でなくても半角カナの文字列であれば何でもよい。))ちなみに、欧文 LaTeX であれば、「オワタ」をシフトJISEUC-JP/UTF-8 の何れで書いても上手くいく。((種明かし。「オワタ」はシフトJIS(或いは EUC-JP/UTF-8)で高位バイトのみからなる列である。inputenc パッケージを読むと、高位バイトが全てアクティブ(カテゴリコード 13)になるので、「\def オワタ」が「オワタ」の先頭のアクティブ文字(バイト)に対するマクロ定義として通用するのである。verbatim 環境に入っても、高位バイトのカテゴリコードは全く変わらないので、「オワタ」のマクロは有効であり続ける、というのが欧文 TeX で動作する理由。また、シフト JIS 入力の pTeX は半角カナの領域(A0h〜DFh)のバイトを和文文字と見做さないので欧文 TeX と同様に正常動作する。EUC-JP/UTF-8 の場合は pTeX和文入力処理と干渉して失敗するようである。))

真面目な解決法

verbatim パッケージを使うとか。

\documentclass[a4paper]{article}
\usepackage{verbatim}
\newenvironment{myverbatim}
  {\verbatim}{\endverbatim}
\begin{document}
You can use \verb|verbatim| environment as follows:
\begin{quote}\small
\begin{myverbatim}
Some text\ldots.
\begin{verbatim}
\expandafter\expandafter\expandafter!!
\end{verbatim}
Some other text\ldots.
\end{myverbatim}
\end{quote}
\end{document}

「verbatim を中に含むユーザ定義環境を作る」のは LaTeX で「何故か上手くいかない」ことの有名な例の一つである。しかし、verbatim パッケージを利用すると、上記のコードのようにして「上手くいく」ようになる。((\begin{verbatim}\end{verbatim} でなくて \verbatim\endverbatim とする必要がある。詳しくはマニュアルを参照。))新しく定義した myverbatim 環境の終端は当然 \end{myverbatim} なので、そこには「\end{verbatim}」が入れられるというわけである。

他の手段として、同じく verbatim パッケージを利用して、\verbatiminput を使うという手もある。