用两个不同的数字枚举

用两个不同的数字枚举

我正在尝试使用登记制度家谱编号。它看起来应该类似于以下内容:

1    (i)  John Smith.  Lorem ipsum dolor sit amet, consectetur 
          adipiscing elit, sed do eiusmod tempor incididunt ut 
          labore et dolore magna aliqua. ...
    (ii)  Ann Smith.
   (iii)  James Smith.
2   (iv)  Eliza Smith.

... 将两种类型的数字对齐(罗马数字右对齐,阿拉伯数字左对齐)。我可以使用 tabular 来实现这一点\begin{tabular}{lrp{\somewidth}},但随后我必须计算出正确的列宽,这很麻烦;我无法通过使用包X中的说明符来解决这个tabularx问题,因为我经常想要跨页,而解决这些问题的变通方法都有点乏味。无论如何,感觉它就像是enumerate类似环境的正确位置

我目前最好的想法是按照如下方式自动进行编号:

\documentclass{article}
\usepackage{lipsum} % for dummy text only
\begin{document}
\begin{enumerate}
\item[1\quad(i)] John Smith. \lipsum[1]
\item[(ii)] Ann Smith.
\item[(iii)] James Smith.
\item[2\quad(iv)] James Smith.
\end{enumerate}
\end{document}

但我无法对齐阿拉伯数字。有什么想法吗?

答案1

这是一个使用enumitem包裹:

\documentclass{article}
\usepackage{enumitem}
\usepackage{lipsum}

\newlist{menumerate}{enumerate}{2}
\setlist[menumerate,1]{label=\arabic*}
\setlist[menumerate,2]{label=(\roman*)}

\begin{document}
\begin{menumerate}
\item\begin{menumerate}
\item John Smith. \lipsum[1]
\item Ann Smith.
\item James Smith.
\end{menumerate}
\item
\begin{menumerate}[resume]
\item James Smith.
\end{menumerate}
\end{menumerate}
\end{document}

在此处输入图片描述

如果需要增加阿拉伯数字和罗马数字之间的间距,可以使用类似

\newlist{menumerate}{enumerate}{2}
\setlist[menumerate,1]{label=\arabic*,wide,leftmargin=*,labelsep=20pt}
\setlist[menumerate,2]{label=(\roman*),labelsep=5pt}

完整示例:

\documentclass{article}
\usepackage{enumitem}
\usepackage{lipsum}

\newlist{menumerate}{enumerate}{2}
\setlist[menumerate,1]{label=\arabic*,wide,leftmargin=*,labelsep=20pt}
\setlist[menumerate,2]{label=(\roman*),labelsep=5pt}

\begin{document}
\begin{menumerate}
\item\begin{menumerate}
\item John Smith. \lipsum[1]
\item Ann Smith.
\item James Smith.
\end{menumerate}
\item
\begin{menumerate}[resume,start=99]% start value just for the example
\item James Smith.
\end{menumerate}
\end{menumerate}
\end{document}

在此处输入图片描述

如果内部列表始终需要继续编号,则resume可以将选项包含在\setlist

\documentclass{article}
\usepackage{enumitem}
\usepackage{lipsum}

\newlist{menumerate}{enumerate}{2}
\setlist[menumerate,1]{label=\arabic*,wide,leftmargin=*,labelsep=20pt}
\setlist[menumerate,2]{label=(\roman*),labelsep=5pt,resume}

\begin{document}
\begin{menumerate}
\item
  \begin{menumerate} 
  \item John Smith. \lipsum[1]
  \item Ann Smith.
  \item James Smith.
  \end{menumerate}
\item
  \begin{menumerate}
  \item James Smith.
  \end{menumerate}
\item
  \begin{menumerate}
  \item Henry Smith.
  \end{menumerate}
\end{menumerate}

\end{document}

在此处输入图片描述

或许,更好的是,像这样:

\documentclass{article}
\usepackage{enumitem}
\usepackage{lipsum}

\newlist{menumerate}{enumerate}{2}
\setlist[menumerate,1]{
  label=\arabic*,
  leftmargin=50pt,
  labelsep=15pt,
  labelwidth=20pt,
  align=left
}
\setlist[menumerate,2]{label=(\roman*),labelsep=5pt,resume}

\begin{document}

\begin{menumerate}
\item
  \begin{menumerate} 
  \item John Smith. \lipsum[1]
  \item Ann Smith.
  \item James Smith.
  \end{menumerate}
\item
  \begin{menumerate}
  \item James Smith.
  \end{menumerate}
\item
  \begin{menumerate}
  \item Henry Smith.
  \end{menumerate}
\item
  \begin{menumerate}
  \item Henry Smith.
  \end{menumerate}
\item
  \begin{menumerate}
  \item Henry Smith.
  \end{menumerate}
\item
  \begin{menumerate}
  \item Henry Smith.
  \end{menumerate}
\item
  \begin{menumerate}
  \item Henry Smith.
  \end{menumerate}
\item
  \begin{menumerate}
  \item Henry Smith.
  \end{menumerate}
\item
  \begin{menumerate}
  \item Henry Smith.
  \end{menumerate}
\item
  \begin{menumerate}
  \item Henry Smith.
  \end{menumerate}
\end{menumerate}

\end{document}

答案2

类似这样?我定义了一个新的环境geneology。在这个环境中,\nextgene用于指示外部计数器应递增。否则,只需\item照常使用即可。

\documentclass{article}
\usepackage{lipsum,enumitem}
\newlist{geneo}{enumerate}{1}
\newlist{geneol}{enumerate}{1}
\setlist[geneo,1]{label=\arabic*, align=left}
\setlist[geneol,1]{label=(\roman*)}
\newenvironment{geneology}{%
  \begin{geneo}\item\begin{geneol}%
}{%
  \end{geneol}\end{geneo}%
}
\newcommand*\nextgene{%
  \end{geneol}\item\begin{geneol}[resume]%
}

\begin{document}
\begin{geneology}
  \item John Smith. \lipsum[1]
  \item Ann Smith.
  \item James Smith.
  \nextgene
  \item James Smith.
\end{geneology}
\end{document}

家谱

答案3

@Gonzalo Medina 和 @cfr 的解决方案非常巧妙,但我不禁觉得嵌套枚举是错误的。从逻辑上讲,它是一个单一列表,而不是列表的列表。我花了一上午的时间寻找更好的解决方案,并认为我有一个:使用更原始的list环境而不是enumerate

\documentclass{article}
\usepackage{etoolbox}
\usepackage{lipsum}  % For dummy text only
\newcounter{childcounter}
\newenvironment{children}{
  \begin{list}{\childxref\hfill(\roman{childcounter})\quad}{
    \usecounter{childcounter}\setlength\labelsep{0em}
    \setlength\labelwidth{5em}\setlength\leftmargin{5em}
    \newcommand{\child}[1][]{\def\childxref{##1}\item}}
}{\end{list}}
\begin{document}
\begin{children}
\child[1] John Smith. \lipsum[1]
\child Ann Smith.
\child James Smith.
\child[2] James Smith.
\end{children}
\end{document}

我预计可选参数的正常用法将\child是这样的\child[\ref{james}],所以我可能会将其定义为直接采用标签名称:

\newcommand{\child}[1][]{%
  \def\childxref{\ifstrempty{##1}{}{\ref{##1}}}\item}}

这也需要\usepackage{etoolbox}定义\ifstrempty。然后我只要\child[james]在其他地方有就可以写\label{james}

相关内容