Заполните отступы тире

Заполните отступы тире

При выполнении вложенного перечисления у меня есть очень длинный список, и я хочу четко указать, что элементы, расположенные ниже в списке, по-прежнему вложены в более ранние элементы (зависят от них).

По этой причине я хотел бы сделать отступы с помощью тире, т.е.

---Если я Боб,

--------- Если сегодня суббота,

--------------- Если работать с Салли,

--------------------------- Мы оба носим костюмы.

--------------- Если по телевизору показывают теннис,

--------------------------- Я болею за Серену Уильямс.

Пример текущего кода:

\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}

Как мне заставить Latex заполнить отступы тире?

решение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этом получается:

Образец пунктирной линии

Связанный контент