我想在论文中定义不同的要求,其中一些可以分为更小的要求。基于我上一个问题的答案通过编号和名称引用枚举项,我想到了以下几点:
\documentclass{article}
\usepackage{lipsum}
\usepackage{enumitem}
\usepackage{etoolbox}
\usepackage[showframe,pass]{geometry}
\begin{document}
\makeatletter
\newcommand*{\req}[1]{%
\item %
\let\originall@bel\@currentlabel%
\appto\@currentlabel{ (#1)}%
\emph{#1}\quad}
\newenvironment{subreqs}{\begin{enumerate}[label=\originall@bel.\arabic*,widest=9,leftmargin=0pt]}{\end{enumerate}}
\makeatother
\begin{enumerate}[label=R~\arabic*,widest*=20,leftmargin=*,series=reqs]
\req{First Important Thing} \label{req1} \lipsum[4]
\begin{subreqs}
\req{Important Subitem} \label{req2} \lipsum[2]
\end{subreqs}
\end{enumerate}
\ref{req1} and \ref{req2} are important.
\end{document}
这部分工作符合预期,唯一的问题是第二个要求相对于第一个要求缩进。这当然是意料之中的,因为我使用了第二级enumerate
,但我仍然想避免这种情况,因为分组从数字本身就可见。
编辑:我刚刚意识到leftmargin
(我怀疑它做了一些不同的事情)控制着我想要的东西。但是,正如 Thruston 建议的那样,在 的定义中使用leftmargin=0pt
而不是 并没有真正起到作用,因为它会使文本框突出(参见上面更新的代码/屏幕截图)。leftmargin=*
subreqs
R 1.1
答案1
您应该leftmargin=0pt
为内部列表设置。我建议您也为外部列表定义自己的环境。不需要\originall@bel
,但\ignorespaces
需要。
\documentclass{article}
\usepackage{lipsum}
\usepackage{enumitem}
\usepackage{etoolbox}
\newlist{reqs}{enumerate}{1}
\newlist{subreqs}{enumerate}{1}
\setlist[reqs]{label=R~\arabic*,widest*=100,leftmargin=*}
\setlist[subreqs]{label=\thereqsi.\arabic*,leftmargin=0pt}
\makeatletter
\newcommand*{\req}[1]{%
\item
\appto\@currentlabel{ (#1)}%
\emph{#1}\quad\ignorespaces}% <--- note \ignorespaces
\makeatother
\begin{document}
\lipsum[3]
\begin{reqs}
\req{First Important Thing} \label{req1} \lipsum[4]
\begin{subreqs}
\req{Important Subitem} \label{req2} \lipsum[2]
\end{subreqs}
\end{reqs}
\lipsum[3]
\ref{req1} and \ref{req2} are important.
\end{document}
如果希望标签左对齐,可以将外部环境的标签宽度传递给内部环境:
\documentclass{article}
\usepackage{lipsum}
\usepackage{enumitem}
\usepackage{etoolbox}
\newlist{reqs}{enumerate}{1}
\newlist{subreqs}{enumerate}{1}
\setlist[reqs]{
label=R~\arabic*,
widest*=100,
leftmargin=*,
align=left,
before=\edef\outerlabelwidth{\the\labelwidth}
}
\setlist[subreqs]{
label=\thereqsi.\arabic*,
leftmargin=0pt,
labelindent=0pt,
labelwidth=\outerlabelwidth,
align=left,
}
\makeatletter
\newcommand*{\req}[1]{%
\item %
\appto\@currentlabel{ (#1)}%
\emph{#1}\quad\ignorespaces}
\makeatother
\begin{document}
\lipsum[3]
\begin{reqs}
\req{First Important Thing} \label{req1} \lipsum[4]
\begin{subreqs}
\req{Important Subitem} \label{req2} \lipsum[2]
\end{subreqs}
\end{reqs}
\lipsum[3]
\ref{req1} and \ref{req2} are important.
\end{document}