Einrückungen mit Bindestrichen füllen

Einrückungen mit Bindestrichen füllen

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 itemizeunverändert bleibt. Daher schlage ich vor, dass Sie eine neue Liste einführen, z. B. ditemizefür den jeweiligen Stil.

Beispielausgabe

\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, \myindentum die aktuelle Einrückung zu speichern. Zu Beginn jedes ditemizeCodes before=fügen wir den aktuellen Rand zu hinzu \myindent. Der Mechanismus von beforebedeutet, 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 dashrulePakets, das einen nahezu identischen Ersatz für das \ruleObige 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=.1emDamit ergibt sich:

Gestricheltes Beispiel

verwandte Informationen