`enumerate` 環境の再定義による列挙の問題

`enumerate` 環境の再定義による列挙の問題

enumerateオプションの引数を使用して環境を再定義したいと思います。基本的には\theenumi、アイテムにラベルを付けて呼び出すたびに、\refcounter の (アラビア語の) 値だけでなく、実際のラベルが印刷されるように再定義したいと思いますenumi

以下のコードを試してみましたが、.各ラベルに常に余分なポイント ( ) が追加される点を除けば、正常に動作します。 ただし、 で呼び出すと、\ref正しいラベルが印刷されます。

私が試したものの MWE は次のとおりです。

\documentclass{book}
\usepackage{enumerate}
%%
%%
\let\oldenumerate\enumerate
\let\endoldenumerate\endenumerate
\renewenvironment{enumerate}[1][\arabic{enumi}.]% Defaults to 1. 2. 3. ...
{%
    \bgroup\renewcommand\theenumi{#1}%
    \oldenumerate%
}%
{%
    \endoldenumerate\egroup%
}%
\begin{document}
First list with default enumeration
\begin{enumerate}
\item First item
\item Second item
\end{enumerate}
Second list with custom enumeration
\begin{enumerate}[(\emph{\roman{enumi}})]
\item First item
\item Second item
\end{enumerate}
Labels have an extra dot in the lists, but references \ref{a} and \ref{b} are printed correctly.
\end{document}

上記のコードの出力は次のようになります。

上記MWEの出力

enumerateリスト内の余分なドットを回避するには、どのように再定義すればよいでしょうか?

答え1

車輪の再発明をするよりも、enumitemこの種のことにはパッケージを使用する方がはるかに簡単です。この特定の例では、括弧とイタリック体の数字の間に適切な間隔が確保されるように、負のカーニングを追加しました。Kannappan Sampath が指摘しているように、参照の形式も個別に指定できます。

\documentclass{article}
\usepackage{enumitem}
\begin{document}
Second list with custom enumeration
\begin{enumerate}[label=(\kern-.5pt\emph{\roman*}),ref=(\roman*)]
\item First item \label{a}
\item Second item \label{b}
\end{enumerate}
Labels have an extra dot in the lists, but references \ref{a} and \ref{b} are printed correctly.
\end{document}

ここに画像の説明を入力してください

答え2

解決策は次のとおりですenumitem:

\documentclass{book}
\usepackage{enumitem}
%%% Set the default: number followed by a period
\setlist[enumerate,1]{label=\arabic*.}

\begin{document}
First list with default enumeration
\begin{enumerate}
\item First item
\item\label{a} Second item
\end{enumerate}
Second list with custom enumeration
\begin{enumerate}[label=(\emph{\roman*})]
\item First item
\item\label{b} Second item
\end{enumerate}
Labels have an extra dot in the lists, and references
\ref{a} and \ref{b} are printed correctly.
\end{document}

ここに画像の説明を入力してください

関連情報