
在進行嵌套逐項排序時,我有一個很長的列表,並且想要明確列表中較低的項目仍然嵌套在(依賴於)較早的項目中。
因此,我想用破折號縮進,即
---如果我是鮑勃,
--------- 如果是星期六,
--------------- 如果和莎莉一起工作,
--------------------------- 我們都穿西裝。
--------------- 若電視上有網球比賽,
--------------------------- 我支持小威廉斯。
目前程式碼範例:
\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
產生: