创建自定义列表/枚举环境,不包含项目符号、自定义间距和对齐方式、更高的嵌套限制和项目内换行符

创建自定义列表/枚举环境,不包含项目符号、自定义间距和对齐方式、更高的嵌套限制和项目内换行符

我正在编写一份文档(桥梁系统说明,如果这可以帮助任何人直观地了解我正在寻找的内容),并且需要大量使用嵌套列表。以下是我现在正在使用的最小示例:

\documentclass{article}

\usepackage[utf8]{inputenc} 
\usepackage{enumitem}

\def\labelitemi{} %%%% these definitions remove bullets and adjust the spacing between nestings
\def\labelitemii{\qquad\thinspace}
\def\labelitemiii{\qquad\thinspace}
\def\labelitemiv{\qquad\thinspace}
\def\labelitemv{\qquad\thinspace}

\newcommand{\bid}[2]{\item \texttt{#1\ \ \ \ \ }#2} %%%% this is used to create each item of the lists
%%%% the monotype font is used to ensure consistent horizontal spacing

\newenvironment{bidding} %%%% this adjusts spacing as I desire
    {\begin{itemize}[leftmargin=*] \itemsep2pt \parskip0pt \parsep0pt}
    {\end{itemize}} 

\begin{document}

\begin{bidding}
\bid{2D}{11-15, 3-suited, short D}
 \begin{bidding}
  \bid{2D}{to play}
   \begin{bidding}
    \bid{2D}{4=3=1=5 shape}
    \bid{P\ }{else}
   \end{bidding}
  \bid{2S}{to play}
  \bid{2N}{strong ask, mostly GF}
   \begin{bidding}
    \bid{3C}{any minimum}
     \begin{bidding}
      \bid{3D}{asks, opener shows a 4-card major or 3NT with both}
     \end{bidding}
    \bid{3D}{4=4=1=4, maximum}
   \end{bidding}
  \bid{3C}{to play}
 \end{bidding}
\end{bidding}
\end{document}

这总体上看起来并且运行得很好,但我遇到了三个问题。

首先,内置的 LaTeX 嵌套限制仍然适用,我希望能够在此基础上至少嵌套两层。我查看了本网站上的几个解决方案,但不知道该如何调整这些答案以满足我的其他需求。

其次,如果项目的第二部分\bid太长,它将会环绕,但由于\bid只接受两个输入并将它们放在一行中并且在中间留出一些空间,新行将从第一个输入下方开始,我希望它从原始行上第二个输入的开头下方开始。

换句话说,我希望这些项目看起来像

2H    lots of text lots of text lots of text lots of text lots of text 
      lots of text lots of text lots of text

但它们看起来

2H    lots of text lots of text lots of text lots of text lots of text 
lots of text lots of text lots of text.

第三个不太紧迫的问题是,当第一个输入发生变化时,为了实现水平间距\bid,我经常必须填充第一个输入或插入负水平空间。我很少需要调整超过一个字符的宽度,但如果有更简单的解决方案就好了,而且这个文档有几十页长,所以填充量会增加。

对我所做的环境和命令进行进一步的修改或者提供一个全新的解决方案就更好了。

答案1

不要通过加载软件包然后弄乱 LaTeX 的内部结构来侮辱软件包,因为他们已经费尽心思清理了那些臭气熏天的内部结构。他们会很不高兴,认为你不了解他们。

反而,使用 enumitem如果你加载它。或者不加载。无论哪种方式。就我的钱而言,我会使用它,但有些人似乎喜欢这种痛苦。它有很好的文档。特别是,请参见第 5 页上的图片。

您不需要\bid使用 2 个参数。只需使用 1 个标签即可。甚至这个也不需要。在某些方面,只使用 会更清楚\item。但是 有这种情况\bid,所以\let\bid\item应该可以完成工作。

以通常的方式指定最多 10 个嵌套级别。根据需要增加或减少。出于容量原因,最好不要创建比所需更多的级别。

使标签的宽度标准化,您就不必担心调整间距(或者\ \ \ \这并不总是会给您相同的空间并且无论如何都很糟糕)。

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{enumitem,kantlipsum}
\newcommand\bid{}
\let\bid\item
\newlist{bidding}{itemize}{10}
\setlist[bidding]{label={}, leftmargin=\parindent, align=left, labelindent=0pt, itemsep=2pt, itemindent=0pt, font=\ttfamily, labelwidth=\parindent, labelsep=0pt}
\begin{document}

\begin{bidding}
  \bid[2D]11-15, 3-suited, short D
  \begin{bidding}
    \bid[2D]to play
    \begin{bidding}
      \bid[2D]4=3=1=5 shape
      \bid[P]else
    \end{bidding}
    \bid[2S]to play
    \bid[2N]strong ask, mostly GF
    \begin{bidding}
      \bid[3C]any minimum
      \begin{bidding}
        \bid[3D]asks, opener shows a 4-card major or 3NT with both \kant[1]
      \end{bidding}
      \bid[3D]4=4=1=4, maximum
    \end{bidding}
    \bid[3C]to play
  \end{bidding}
\end{bidding}
\end{document}

bids and bidding

答案2

我认为你应该使用enumitem包来创建自定义描述环境。

enter image description here

\documentclass{article}
\usepackage{enumitem}
\newlist{bidding}{description}{10}
\setlist[bidding]{font=\ttfamily}

\begin{document}

\begin{bidding}
\item[2D] 11--15 HCPs, 3-suited, short \texttt{D}
  \begin{bidding}
  \item[2D] to play
    \begin{bidding}
    \item[2D] 4=3=1=5 shape
    \item[P\ ] else
  \end{bidding}
  \item[2S] to play
  \item[2N] strong ask, mostly GF
    \begin{bidding}
    \item[3C] any minimum
      \begin{bidding}
      \item[3D] asks, opener shows a 4-card major or \texttt{3NT} with both majors
      \end{bidding}
    \item[3D] 4=4=1=4 shape, maximum
    \end{bidding}
  \item[3C] to play 
  \end{bidding}
\end{bidding}
\end{document}

相关内容