
Beim Verschachteln einer Einzelauflistung habe ich eine sehr lange Liste und möchte deutlich machen, dass die Elemente weiter unten auf der Liste immer noch in den vorherigen Elementen verschachtelt sind (von diesen abhängig sind).
Aus diesem Grund möchte ich mit Bindestrichen einrücken, d.h.
---Wenn ich Bob bin,
--------- Wenn heute Samstag ist,
--------------- Wenn ich mit Sally arbeite,
--------------------------- Wir tragen beide Anzüge.
--------------- Wenn Tennis im Fernsehen läuft,
--------------------------- Ich drücke Serena Williams die Daumen.
Beispiel aktueller Code:
\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}
Wie weise ich Latex an, den Einrückungsbereich mit Bindestrichen zu füllen?
Antwort1
Sie können die Ränder mit einer von Ihnen gewählten Länge verfolgen und zum Zeichnen einer geeigneten Linie verwenden. Ihren Kommentaren zufolge möchten Sie lediglich eine Linie anstelle von Strichen und möchten, dass der Standard itemize
unverändert bleibt. Daher schlage ich vor, dass Sie eine neue Liste einführen, z. B. ditemize
für den jeweiligen Stil.
\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}
Der Code funktioniert wie folgt. Führen Sie eine neue Variable ein, \myindent
um die aktuelle Einrückung zu speichern. Zu Beginn jedes ditemize
Codes before=
fügen wir den aktuellen Rand zu hinzu \myindent
. Der Mechanismus von before
bedeutet, dass dies innerhalb einer lokalen Gruppe für die Liste erfolgt, sodass wir am Ende einer Unterliste den alten Wert wiederherstellen. Legen Sie nun das Etikett so fest, dass es eine Regel mit angemessener Länge ist, aber in einem Feld mit der Breite Null und nach links hervorstehend.
Wenn Sie Striche statt einer Linie möchten, empfehle ich die Verwendung des dashrule
Pakets, das einen nahezu identischen Ersatz für das \rule
Obige bietet. Sie können die Beschriftungsspezifikation dann wie folgt schreiben:
label=\mbox{\hss\hdashrule[.5ex]{\dimexpr\myindent-\labelsep}{.4pt}{3pt}}
nach der Ausgabe \usepackage{dashrule}
. labelsep=.1em
Damit ergibt sich: