我正在使用 编写问题列表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 的格式来获取
- 、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}