我使用以下句子修改了我的枚举环境:
\renewcommand{\labelenumi}{\textbf{\arabic{enumi}.}}
\renewcommand{\labelenumii}{\textbf{(\alph{enumii})}}
\renewcommand{\labelenumiii}{\textbf{(\roman{enumiii})}}
但是,如果我这样写
\begin{enumerate}
\item
\begin{enumerate}
\item \label{refme}
\end{enumerate}
\end{enumerate}
然后使用 来引用它according to \cref{refme}
,我得到的是“根据 1a”而不是“根据 1.(a)”。
是否可以采取一些措施使其遵循我修改后的格式?
答案1
我建议您不要直接操作低级宏\labelenumi
、\labelenumii
和,而是(a)加载包,(b)创建一个名为的自定义枚举列表,并定义此类列表项 1 到 3 级的和属性。\labelenumiii
enumitem
myenum
label
ref
就我个人而言,我不得不说,引用标注看起来既丑陋又让人分心。至少,请考虑不要使用粗体字体以供交叉引用。
\documentclass{article}
\usepackage{enumitem,cleveref}
\newlist{myenum}{enumerate}{3}
\setlist[myenum,1]{label=\textbf{\arabic*.},
ref =\textbf{\arabic*.}}
\setlist[myenum,2]{label=\textbf{(\alph*)},
ref =\themyenumi\textbf{(\alph*)}}
\setlist[myenum,3]{label=\bfseries(\roman*),
ref =\themyenumii\textbf{.(\roman*)}}
\crefname{myenumi}{item}{items}
\crefname{myenumii}{item}{items}
\crefname{myenumiii}{item}{items}
\begin{document}
\begin{myenum}
\item \label{refone}
\begin{myenum}
\item \label{reftwo} bla bla
\begin{myenum}
\item \label{refthree} bleep bleep
\end{myenum}
\end{myenum}
\item \label{reffour}
\begin{myenum}
\item xxx
\item \label{reffive} bli bli
\begin{myenum}
\item yyy
\item \label{refsix} bloop bloop
\end{myenum}
\end{myenum}
\end{myenum}
\noindent
Cross-references to \cref{refone,reffour}, \cref{reftwo,reffive}, and \cref{refthree,refsix}.
\end{document}
附录:如果您坚持使用低级宏\labelenumi
、\labelenumii
和\labelenumiii
,我认为您应该在序言中使用以下代码。请注意,此代码还修改了\theenumi
、\theenumii
和\theenumiiii
以及“前缀宏”\p@enumi
和\p@enumiii
。(请注意,此代码将不是在排版交叉引用标注时使用粗体。这是因为我认为创建粗体交叉引用标注非常丑陋。)
\renewcommand{\theenumi}{\arabic{enumi}}
\renewcommand{\theenumii}{(\alph{enumii})}
\renewcommand{\theenumiii}{(\roman{enumiii})}
\renewcommand{\labelenumi}{\textbf{\theenumi.}}
\renewcommand{\labelenumii}{\textbf{\theenumii}}
\renewcommand{\labelenumiii}{\textbf{\theenumiii}}
\makeatletter
\renewcommand\p@enumii{\theenumi}
\renewcommand\p@enumiii{\theenumi\theenumii}
\makeatother