如何对齐枚举列表中项目的“标签”?

如何对齐枚举列表中项目的“标签”?

我怎样才能获得描述性的“标签”(对称) 和 (三角不等式在项目 (M3) 和 (M4) 的右侧 -不是标签在通常意义上的交叉引用 - 在propertylist下面的环境中自动对齐,而不需要我手动插入空格,就像我在这里所做的那样\qquad,等等?

\documentclass{memoir}

\usepackage{embrac}

\usepackage{enumitem}

\newlist{proplis}{enumerate}{1}
\newenvironment{propertylist}[1]{%
  \setlist[proplis,1]{%
  wide,leftmargin=*,label=\upshape(#1\arabic*)}\begin{proplis}%
  \itshape}
  {\end{proplis}}
  
\begin{document}

\begin{propertylist}{M}

\item
$d(x, y) \geq 0$.

\item
$d(x, y) = 0$ if and only if $x = y$.

\item
$d(x, y) = d(y, x)$. \qquad\qquad\qquad\embparen{symmetry}%

\item
$d(x, z) \leq d(x, y) + d(y, z)$. \qquad\,\embparen{the triangle inequality}%

\end{propertylist}

\end{document}

获得左对齐的“标签”

环境的整体结构需要保留propertylist,允许一个参数(此处M)和底层枚举,以便我可以使用 M 以外的数字前缀创建类似的列表。proplist

有关这种情况的更简单版本,请参阅如何在简单的 enumitem 枚举中将“标签”对齐到项目右侧?

有关的:如何在证明环境中使用枚举列表的某些选项?

答案1

下面我提供了三种根据不同需求/愿望指定对齐的选项:

  1. propertylist您可以将 中应包含标签的元素设置在l向左对齐的零宽度 ( 0pt) 框内,并在每个项目后面加上相同的\hspacewith 参数以使标签对齐。因此,每个元素都\item将具有以下标准格式:

    \item \makebox[0pt][l]{<your item>}\hspace{<len>}<your tag>
    
  2. 例如,如果您希望标签根据其他长度标准(例如最宽的列表元素)排列,则可以使用\hphantoms。现在,您的标记项目将具有以下标准:

    \item \makebox[0pt][l]{<your item>}\hphantom{<longest item>}<your tag>
    
  3. 如果你想要更自由一些,你可以x通过以下方式在页面上标记位置(具体来说,是 -coordinate)zrefsavepos模块和\zsaveposx。它使用\label类似\ref的系统来记忆水平位置,然后您可以使用它跳转到页面上的特定位置。

    我定义了用户友好的命令\newtagpos{<tag>}来标记位置并\jumptotagpos{<tag>}水平跳转到正确的位置。请注意,它会跳转到正确的位置,即使这意味着向后跳转,因此可能会覆盖内容。此外,它假设您正在使用文档oneside布局,或者您的标签出现在相同的页面类型(正面或背面)上,因为这会使水平位置保持相似。twoside例如,在 下,文本块会移动以适应装订线。

    由于此选项使用类似\label--的设置,或的\ref任何水平位置的改变都需要额外的编译。\newtagpos\jumptotagpos

在此处输入图片描述

\documentclass{memoir}

\usepackage{embrac}

\usepackage{enumitem}
\usepackage[savepos]{zref}

\newlist{proplis}{enumerate}{1}
\newenvironment{propertylist}[1]{%
  \setlist[proplis,1]{%
    wide,leftmargin=*,label=\upshape(#1\arabic*)}
  \begin{proplis}%
    \itshape}
  {\end{proplis}}

\newcommand{\newtagpos}{\zsaveposx}
\newcounter{tagposcnt}
\newcommand{\jumptotagpos}[1]{%
  \stepcounter{tagposcnt}%
  \zsaveposx{tag-\thetagposcnt}%
  \hspace*{\dimexpr\zposx{#1}sp-\zposx{tag-\thetagposcnt}sp}%
}

\begin{document}

Option 1:
\begin{propertylist}{M}
  \item
  $d(x, y) \geq 0$.

  \item
  $d(x, y) = 0$ if and only if $x = y$.

  \item
  \makebox[0pt][l]{$d(x, y) = d(y, x)$.}\hspace{15em}\embparen{symmetry}%

  \item
  \makebox[0pt][l]{$d(x, z) \leq d(x, y) + d(y, z)$.}\hspace{15em}\embparen{the triangle inequality}%
\end{propertylist}

Option 2:
\begin{propertylist}{M}
  \item
  $d(x, y) \geq 0$.

  \item
  $d(x, y) = 0$ if and only if $x = y$.

  \item
  \makebox[0pt][l]{$d(x, y) = d(y, x)$.}\hphantom{$d(x, y) = 0$ if and only if $x = y$.}\embparen{symmetry}%

  \item
  \makebox[0pt][l]{$d(x, z) \leq d(x, y) + d(y, z)$.}\hphantom{$d(x, y) = 0$ if and only if $x = y$.}\embparen{the triangle inequality}%
\end{propertylist}

Option 3:
\begin{propertylist}{M}
  \item
  $d(x, y) \geq 0$.

  \item
  $d(x, y) = 0$ if and only if $x = y$.

  \item
  $d(x, y) = d(y, x)$.\jumptotagpos{ptag}\embparen{symmetry}%

  \item
  $d(x, z) \leq d(x, y) + d(y, z)$.\qquad\newtagpos{ptag}\embparen{the triangle inequality}%
\end{propertylist}

\end{document}

相关内容