如何减少枚举中项目的缩进?

如何减少枚举中项目的缩进?

我正在尝试将某种需求的两级枚举压缩到图形中,并使用文本引用枚举的项目。我使用表格来分隔两列(尝试过\twocolumn\onecolumn没有达到预期效果)并生成图形边框。

下面是我成功完成的一个例子:

例子

图 1.2 基本上就是我想要的,只是对列表中项目的引用不起作用:例如\ref引用项目 1e 显示为“5”,即只显示嵌套列表,并且使用阿拉伯数字而不是字母显示。

图 1.2 是使用裸列表环境创建的,即像这样:

\begin{figure}
\newcounter{ctr:templatelang-req}
\newcounter{ctr:templatelang-req:sub}[ctr:templatelang-req]
\begin{tabular}{|p{0.48\textwidth}p{0.45\textwidth}|}
\hline
\begin{list}{\arabic{ctr:templatelang-req}.}{\usecounter{ctr:templatelang-req}\leftmargin=1.4em}
  \item SDF
    \begin{list}{\alph{ctr:templatelang-req:sub}.}{\usecounter{ctr:templatelang-req:sub}\leftmargin=1.4em}
      \item \label{templatelang-req:target-sort}Target sort
      \item \label{templatelang-req:cons-attr}Constructor attribute
      \item \label{templatelang-req:other-attrs}Other attributes
      \item \label{templatelang-req:sort-refs}References to other sorts
      \item \label{templatelang-req:literals-1}Literal text (excl. layout)
      \item \label{templatelang-req:option-op}Option operator \texttt{A?}
      \item \label{templatelang-req:repetition-op}Repetition operators \texttt{A*} and \texttt{A+}
      \item \label{templatelang-req:list-op}List operators \texttt{\{A S\}*} and \texttt{\{A S\}+}
    \end{list}
  \end{list} &
\begin{list}{\arabic{ctr:templatelang-req}.}{\usecounter{ctr:templatelang-req}\leftmargin=1.4em}
  \setcounter{ctr:templatelang-req}{1}
  \item Pretty printer
    \begin{list}{\alph{ctr:templatelang-req:sub}.}{\usecounter{ctr:templatelang-req:sub}\leftmargin=1.4em}
      \item \label{templatelang-req:literals-2}Literal text (incl. layout)
      \item \label{templatelang-req:wordwrap}Optional: word wrap
      \item \label{templatelang-req:alignment}Optional: alignment
      \item \label{templatelang-req:tabstops}Optional: tab stops
    \end{list}\vspace{1ex}
  \item Completion templates
    \begin{list}{\alph{ctr:templatelang-req:sub}.}{\usecounter{ctr:templatelang-req:sub}\leftmargin=1.4em}
      \item \label{templatelang-req:literals-3}Literal text (incl. layout)
      \item \label{templatelang-req:placeholder-text}Placeholder text
    \end{list}
\end{list} \\
\hline
\end{tabular}
\caption{Required information to encode in our syntax templates}
\label{fig:templatelang:requirements}
\end{figure}

图 1.3 是使用该环境的结果enumerate。这里唯一的“技巧”是使用\setcounter{enumi}{1}从第二列的正确数字开始外部枚举。使用图 1.3,\ref效果很好:它包括两个级别并使用正确的数字类型。即,对项目 1e 的引用显示为 1e。

图1.3的代码:

\begin{figure}
\begin{tabular}{|p{0.48\textwidth}p{0.45\textwidth}|}
\hline
\begin{enumerate}
  \item SDF
    \begin{enumerate}
      \item \label{templatelang-req:target-sort}Target sort
      \item \label{templatelang-req:cons-attr}Constructor attribute
      \item \label{templatelang-req:other-attrs}Other attributes
      \item \label{templatelang-req:sort-refs}References to other sorts
      \item \label{templatelang-req:literals-1}Literal text (excl. layout)
      \item \label{templatelang-req:option-op}Option operator \texttt{A?}
      \item \label{templatelang-req:repetition-op}Repetition operators \texttt{A*} and \texttt{A+}
      \item \label{templatelang-req:list-op}List operators \texttt{\{A S\}*} and \texttt{\{A S\}+}
    \end{enumerate}
  \end{enumerate} &
\begin{enumerate}
  \setcounter{enumi}{1}
  \item Pretty printer
    \begin{enumerate}
      \item \label{templatelang-req:literals-2}Literal text (incl. layout)
      \item \label{templatelang-req:wordwrap}Optional: word wrap
      \item \label{templatelang-req:alignment}Optional: alignment
      \item \label{templatelang-req:tabstops}Optional: tab stops
    \end{enumerate}\vspace{1ex}
  \item Completion templates
    \begin{enumerate}
      \item \label{templatelang-req:literals-3}Literal text (incl. layout)
      \item \label{templatelang-req:placeholder-text}Placeholder text
    \end{enumerate}
\end{enumerate} \\
\hline
\end{tabular}
\caption{Required information to encode in our syntax templates}
\label{fig:templatelang:requirements}
\end{figure}

所以我的问题是:使用回忆录类时,如何减少枚举环境中列表项的缩进?

我尝试了建议的事情在 stackoverflow 上,这就是我得出图 1.2 的方法,但由于它被破坏了,\ref所以对我没有真正的帮助。

我也尝试在各个地方插入\setlength{\leftmargin}{0pt},如回忆录手册第 149 页图 8.2(一般列表的布局参数)所建议的那样,但这也没有帮助。

我是否真的需要使用额外的包来减少这些枚举的缩进,正如建议的那样这里

答案1

默认情况下,memoir 类会在标签前面添加一些水平空间。在下面的代码中(我相信这实现了您的格式化目标),通过明确指定标签的所需形式([1.], [a.])作为每个命令的参数,可以抑制此额外空间\begin{enumerate}。此外,我为左侧列分配了更多的水平宽度。该指令\firmlists*减少了垂直间距量,并且该命令\frenchspacing抑制了句点后的额外空间。

额外的建议:考虑将表格内容放在table而不是环境中figure:人们倾向于将“图形”与图形信息而不是表格信息联系起来。

\documentclass[a4paper]{memoir}
\frenchspacing

\begin{document}

\begin{figure}
\firmlists*

\begin{tabular}{|p{0.51\textwidth}p{0.45\textwidth}|}
\hline
\begin{enumerate}[1.]
  \item SDF
    \begin{enumerate}[a.]
      \item \label{templatelang-req:target-sort}Target sort
      \item \label{templatelang-req:cons-attr}Constructor attribute
      \item \label{templatelang-req:other-attrs}Other attributes
      \item \label{templatelang-req:sort-refs}References to other sorts
      \item \label{templatelang-req:literals-1}Literal text (excl. layout)
      \item \label{templatelang-req:option-op}Option operator \texttt{A?}
      \item \label{templatelang-req:repetition-op}Repetition operators 
            \texttt{A*} and \texttt{A+}
      \item \label{templatelang-req:list-op}List operators 
            \texttt{\{A S\}*} and \texttt{\{A S\}+}
    \end{enumerate}
  \end{enumerate} &
\begin{enumerate}
  \setcounter{enumi}{1}
  \item Pretty printer
    \begin{enumerate}[a.]
      \item \label{templatelang-req:literals-2}Literal text (incl. layout)
      \item \label{templatelang-req:wordwrap}Optional: word wrap
      \item \label{templatelang-req:alignment}Optional: alignment
      \item \label{templatelang-req:tabstops}Optional: tab stops
    \end{enumerate}
  \vspace{1.8ex}
  \item Completion templates
    \begin{enumerate}[a.]
      \item \label{templatelang-req:literals-3}Literal text (incl. layout)
      \item \label{templatelang-req:placeholder-text}Placeholder text
    \end{enumerate}
\end{enumerate} \\
\hline
\end{tabular}
\caption{Required information to encode in our syntax templates}
\label{fig:templatelang:requirements}
\end{figure}

\end{document}

答案2

哦,好吧,该enumitem包可以工作了,使用如下代码:

\usepackage{enumitem}

\begin{enumerate}[leftmargin=1.4em]
  \item ...
\end{enumerate}

但我还是有兴趣听到其他的答案!

(LaTeX 一直让我感到惊讶,有时候这些看似简单的事情却很难发现......)

相关内容