我怎样才能获得描述性的“标签”(对称) 和 (三角不等式在项目 (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
下面我提供了三种根据不同需求/愿望指定对齐的选项:
propertylist
您可以将 中应包含标签的元素设置在l
向左对齐的零宽度 (0pt
) 框内,并在每个项目后面加上相同的\hspace
with 参数以使标签对齐。因此,每个元素都\item
将具有以下标准格式:\item \makebox[0pt][l]{<your item>}\hspace{<len>}<your tag>
例如,如果您希望标签根据其他长度标准(例如最宽的列表元素)排列,则可以使用
\hphantom
s。现在,您的标记项目将具有以下标准:\item \makebox[0pt][l]{<your item>}\hphantom{<longest item>}<your tag>
如果你想要更自由一些,你可以
x
通过以下方式在页面上标记位置(具体来说,是 -coordinate)zref
的savepos
模块和\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}