更改 \ref 的格式(枚举包)

更改 \ref 的格式(枚举包)

我正在使用 编写问题列表enumerate package

像这样:

\documentclass[a4paper,10pt]{scrreprt}
\usepackage{enumerate}
\begin{document}

\begin{enumerate}
\item \label{itm:1} This is the question 1
\item \begin{enumerate}[(a)]
\item \label{itm:2a} This is the question 2.(a)
\item This is the question 2.(b)
\item \begin{enumerate}[-i)]
\item \label{itm:2ci}This is the question 2.(c)-i)
\item This is the question 2.(c)-ii)
\end{enumerate}
\end{enumerate}
\end{enumerate}

\ref{itm:1},\ref{itm:2a} and \ref{itm:2ci} 

\end{document}

\ref{itm:1},\ref{itm:2a} and \ref{itm:2ci}分别给出 1、2a 和 2(c)i

我怎样才能改变 \ref 的格式来获取

  1. 、2.(a) 和 2.(c)-i)

如果可能的话,请说明如何在本地和全局范围内对文档的所有枚举应用该解决方案。

答案1

我不知道如何利用enumerate软件包的工具来实现你的目标(尽管大卫·卡莱尔可能可以!),但我知道如何使用枚举项包裹。

该软件包的众多优秀功能之一enumitem是,枚举项的标签和这些项的交叉引用格式可以非常直接地设置。对于第一级项,只需ref修改部分(通过.在 后附加“ ” \theenumi);对于第二级和第三级项,需要修改label和部分。ref

(下面的代码使用该hyperref包来清楚地显示交叉引用的样子。)

在此处输入图片描述

\documentclass[a4paper,10pt]{scrreprt}
\usepackage{enumitem}
\usepackage[colorlinks]{hyperref} %% just for this example
\begin{document}

\begin{enumerate}[ref=\theenumi.]
\item This is question 1 \label{itm:1} 
\item \begin{enumerate}[label=(\alph*),
                        ref=\theenumi(\theenumii)]
      \item This is question 2.(a) \label{itm:2a} 
      \item This is question 2.(b)
      \item \begin{enumerate}[label=-\roman*),
                              ref=\theenumii-\theenumiii)]
            \item This is question 2.(c)-i) \label{itm:2ci}
            \item This is question 2.(c)-ii)
            \end{enumerate}
      \end{enumerate}
\end{enumerate}

Questions \ref{itm:1}, \ref{itm:2a}, and \ref{itm:2ci} \dots

\end{document}

您也可以不使用任何软件包,而是使用以下低级 LaTeX 指令来实现标签和交叉引用的格式化目标。但请注意,这些指令适用于全部后续枚举的环境。

\makeatletter
\renewcommand\labelenumi{\arabic{enumi}.}
\renewcommand\theenumi{\arabic{enumi}.}
\renewcommand\labelenumii{(\alph{enumii})}
\renewcommand\theenumii{(\alph{enumii})}
\renewcommand\labelenumiii{-\roman{enumiii})}
\renewcommand\theenumiii{-\roman{enumiii})}
\renewcommand\p@enumiii{\theenumi\theenumii}
\makeatother

如果您有多个此类枚举列表,则可以使用包的\newlist\setlist指令创建一个专用的枚举类环境来设置所有格式指令,这很方便enumitem。例如,您可以设置以下代码(无需新的屏幕截图,因为输出与前面的示例相同):

\documentclass[a4paper,10pt]{scrreprt}

\usepackage{enumitem}    
\newlist{qenum}{enumerate}{3}  % create a new enumerate-like environment
\setlist[qenum,1]{label=\arabic*.,
                  ref=\arabic*.}
\setlist[qenum,2]{label=(\alph*),
                  ref=\theqenumi(\alph*)}
\setlist[qenum,3]{label=-\roman*),
                  ref=\theqenumii-\roman*)}

\usepackage[colorlinks]{hyperref} %% just for this example

\begin{document}

\begin{qenum}
\item This is question 1 \label{itm:1} 
\item \begin{qenum}
      \item This is question 2.(a) \label{itm:2a} 
      \item This is question 2.(b)
      \item \begin{qenum}
            \item This is question 2.(c)-i) \label{itm:2ci}
            \item This is question 2.(c)-ii)
            \end{qenum}
      \end{qenum}
\end{qenum}

Questions \ref{itm:1}, \ref{itm:2a}, and \ref{itm:2ci} \dots

\end{document}

相关内容