我希望能够用enumitem
左边距的标记来“标记”列表中的某些列表项。我希望左边距中的标记相对于彼此水平对齐,并且相对于标记的列表项垂直对齐。我试过 Werner 的答案这里但它似乎不适用于enumitem
。
在上图中(框架仅用于可视化),我希望子项的标签与主列表项的标签水平对齐,并且对齐方式不应根据子项标签的宽度而改变(即(w)比(c)宽,但标签应保持对齐)。
我不认为我的代码或方法很好,所以用完全不同的方法也可以。如果能解释一下就更好了,因为我自己花了相当多的时间试图弄清楚,但这超出了我的能力范围。
\documentclass{article}
\usepackage{enumitem}
\usepackage{xparse}
\usepackage{showframe}
\newlist{mylist}{enumerate}{1}
\setlist[mylist]{
%align=left,
align=parleft,
label = {\protect\mytag\arabic*.},
}
\newlist{mysublist}{enumerate}{1}
\setlist[mysublist]{
%align=left,
align=parleft,
label={\protect\mytag{(\alph*)}},
}
\NewDocumentCommand{\myitem}{ o }{
\IfNoValueTF{#1}
{\let\mytag\relax\item}
{\tagit{#1}\item}
}
\makeatletter
\NewDocumentCommand{\tagit}{ m }{
\def\mytag{\leavevmode\llap{\fbox{\makebox[\marginparwidth][c]{#1}}}\hspace{\@totalleftmargin}}
}
\makeatother
\begin{document}
\begin{mylist}
\myitem First Item.
\myitem[x] Second Item.
\begin{mysublist}
\myitem[x] First Sub-Item.
\myitem Second Sub-Item.
\end{mysublist}
\myitem[x] Third Item.
\myitem Fourth Item.
\end{mylist}
\end{document}
答案1
我不确定这是否是您想要的(使用条件测试添加了一些适当的空间\enit@depth
):
\documentclass{article}
\usepackage{enumitem}
\usepackage{xparse}
\usepackage{showframe}
\newlist{mylist}{enumerate}{2}
\setlist[mylist,1]{
%align=left,
align=parleft,
label = {\protect\mytag\arabic*.},
}
%\newlist{mysublist}{enumerate}{1}
\setlist[mylist,2]{
%align=left,
align=parleft,
label={\protect\mytag{(\alph*)}},
}
\NewDocumentCommand{\myitem}{ o }{
\IfNoValueTF{#1}
{\let\mytag\relax\item}
{\tagit{#1}\item}
}
\newlength\mylen
\makeatletter
\NewDocumentCommand{\tagit}{ m }{
\ifnum\enit@depth=1\relax
\setlength\mylen{0pt}%
\else
\ifnum\enit@depth=2\relax
\setlength\mylen{\leftmargini}%
\fi\fi%
\def\mytag{\leavevmode\llap{\fbox{\makebox[\marginparwidth][c]{#1}}\hspace{\mylen}}}}
\makeatother
\begin{document}
\begin{mylist}
\myitem First Item.
\myitem[x] Second Item.
\begin{mylist}
\myitem[x] First Sub-Item.
\myitem Second Sub-Item.
\end{mylist}
\myitem[x] Third Item.
\myitem Fourth Item.
\end{mylist}
\end{document}