enumerate環境での相互参照
書類ばかり書いています。相変わらずワープロは大嫌いなのでLaTeXを愛用。今日書いていた文書で、enumerate環境(番号つき箇条書き)の相互参照でデフォルトでは思いどおりにならないことがありました。
TeXを知らない人には「相互参照」ってなんだって思われるかもしれないのでちょっと解説。最近のワープロなんかにはそんな機能もあるみたいですが、文書中の章や項の番号、ページ数なんかを他の箇所から参照してその章番号やページ数を埋め込んでくれる機能なんです。
たとえば番号つきの箇条書きができるenumerate環境で相互参照するときはこう書きます。
\begin{enumerate} \item アンスポーツマンライクファウル \item テクニカルファウル \begin{enumerate} \item 審判の警告を無視する。\label{enum:無視} \item リングをつかんで体重をかける。\label{enum:体重} \item \ref{enum:無視},\ref{enum:体重}のほかにもいっぱいあります。 \end{enumerate} \end{enumerate}
コンパイルするとこんな出力になります。
1.アンスポーツマンライクファウル 2.テクニカルファウル (a)審判の警告を無視する。 (b)リングをつかんで体重をかける。 (c) 2a,2bのほかにもいっぱいあります。
なにが便利かっていうと、参照している番号(上記例だとaやb)が変わってしまうような変更をした場合でも番号を直接書いていないので、変更に自動的に追従してくれること。
たとえば上記の例を以下のように変更したとします。
\begin{enumerate} \item アンスポーツマンライクファウル \item テクニカルファウル \begin{enumerate} \item ファウルされたように見せかけるために床にたおれる。 \item 審判の警告を無視する。\label{enum:無視} \item リングをつかんで体重をかける。\label{enum:体重} \item \ref{enum:無視},\ref{enum:体重}のほかにもいっぱいあります。 \end{enumerate} \end{enumerate}
そうすると出力は以下のようになります。
1.アンスポーツマンライクファウル 2.テクニカルファウル (a)ファウルされたように見せかけるために床にたおれる。 (b)審判の警告を無視する。 (c)リングをつかんで体重をかける。 (d) 2b,2cのほかにもいっぱいあります。
今回やりたかったのは、enumerate環境が複数の入れ子になっている場合の相互参照の表記方法。デフォルトだと上記例でも分かるように親+子(2aとか,2b)になっていますね。これを子だけ(a,bだけ)にしたかった。ちょっと調べるとenumerate環境2階層め相互参照時のデフォルト表記は
{\p@enumii}
となっていることがわかりました。そうするとこれを\renewcommandで書き換えればいい。ちょっと試行錯誤して以下のようにすると望みのとおりの出力を得ることができました。
\makeatletter \renewcommand{\p@enumii}{} \makeatother (中略) \begin{enumerate} \item アンスポーツマンライクファウル \item テクニカルファウル \begin{enumerate} \item ファウルされたように見せかけるために床にたおれる。 \item 審判の警告を無視したとき\label{enum:無視} \item リングをつかんで体重をかける\label{enum:体重} \item (\ref{enum:無視}),(\ref{enum:体重})のほかにもいっぱいあります。 \end{enumerate} \end{enumerate}
結果はこんなの。
1.アンスポーツマンライクファウル 2.テクニカルファウル (a)ファウルされたように見せかけるために床にたおれる。 (b)審判の警告を無視する。 (c)リングをつかんで体重をかける。 (d)(b),(c)のほかにもいっぱいあります。
参考書はこちら。
The LATEXコンパニオン (アスキーアジソンウェスレイシリーズ)
- 作者: Michel Goossens,アスキー書籍編集部
- 出版社/メーカー: アスキー
- 発売日: 1998/06
- メディア: 単行本
- クリック: 8回
- この商品を含むブログ (4件) を見る