在进行嵌套项目列出时,我有一个很长的列表,并且想要清楚地表明列表中较低的项目仍然嵌套在(依赖于)较早的项目中。
因此,我想用破折号缩进,即
---如果我是鲍勃,
--------- 如果是星期六,
--------------- 如果与 Sally 合作,
--------------------------- 我们都穿西装。
--------------- 如果电视上播放网球比赛,
------------------------------ 我支持塞雷娜·威廉姆斯。
当前代码示例:
\usepackage{enumitem}
\begin{itemize}
\item If I am Bob,
\begin{itemize}[leftmargin=*,labelindent= 1cm]
\item If it is Saturday
\begin{itemize}[leftmargin=*,labelindent= 2cm]
\item If I work with Sally
\begin{itemize}[leftmargin=*,labelindent= 3cm]
\item We both wear suits.
\end{itemize}
\item If tennis is on TV,
\begin{itemize}[leftmargin=*,labelindent= 3cm]
\item I root for Serena Williams.
\end{itemize}
\end{itemize}
\end{itemize}
\end{itemize}
我如何告诉乳胶用破折号填充缩进空间?
答案1
您可以用自己的长度跟踪边距,并用它来绘制适当的线条。按照您的评论,您只需要一个规则而不是破折号,并且您希望标准保持不变。所以我建议您为特定样式itemize
引入一个新的列表,例如。ditemize
\documentclass{article}
\usepackage{enumitem}
\newlength{\myindent}
\setlength{\myindent}{0pt}
\newlist{ditemize}{itemize}{4}
\setlist[ditemize]{before={\setlength{\myindent}{\dimexpr\myindent+\leftmargin}},
label=\mbox{\hss\rule[.5ex]{\dimexpr\myindent-\labelsep}{.4pt}}}
\setlist[ditemize,2]{labelindent=1cm}
\setlist[ditemize,3]{labelindent=2cm}
\setlist[ditemize,4]{labelindent=3cm}
\begin{document}
\noindent
Some text that is not indented to show the left margin.
\begin{ditemize}
\item If I am Bob,
\begin{ditemize}
\item If it is Saturday
\begin{ditemize}
\item If I work with Sally
\begin{ditemize}
\item We both wear suits.
\end{ditemize}
\item If tennis is on TV,
\begin{ditemize}
\item I root for Serena Williams.
\end{ditemize}
\end{ditemize}
\end{ditemize}
\end{ditemize}
\end{document}
代码的工作原理如下。引入一个新变量\myindent
来存储当前缩进。在每个的开头ditemize
,使用before=
代码,我们将当前边距添加到\myindent
。的机制before
意味着这是在列表本地组内完成的,因此当子列表完成时,我们会恢复旧值。现在将标签设置为适当长度的规则,但位于宽度为零且向左突出的框中。
如果您想要使用破折号而不是直线,我建议使用dashrule
包,它几乎可以替代\rule
上述内容。然后,您可以将标签规范编写为:
label=\mbox{\hss\hdashrule[.5ex]{\dimexpr\myindent-\labelsep}{.4pt}{3pt}}
发出后\usepackage{dashrule}
。labelsep=.1em
这将产生: