枚举中的子项写为。而不是缩进

枚举中的子项写为。而不是缩进

我想在论文中定义不同的要求,其中一些可以分为更小的要求。基于我上一个问题的答案通过编号和名称引用枚举项,我想到了以下几点:

\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=*subreqsR 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}

在此处输入图片描述

相关内容