
При выполнении вложенного перечисления у меня есть очень длинный список, и я хочу четко указать, что элементы, расположенные ниже в списке, по-прежнему вложены в более ранние элементы (зависят от них).
По этой причине я хотел бы сделать отступы с помощью тире, т.е.
---Если я Боб,
--------- Если сегодня суббота,
--------------- Если работать с Салли,
--------------------------- Мы оба носим костюмы.
--------------- Если по телевизору показывают теннис,
--------------------------- Я болею за Серену Уильямс.
Пример текущего кода:
\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
этом получается: