Preencha o recuo com traços

Preencha o recuo com traços

Ao fazer itens aninhados, tenho uma lista muito longa e quero deixar claro que os itens inferiores na lista ainda estão aninhados (dependentes de) itens anteriores.

Por esse motivo, gostaria de recuar com travessões, ou seja

---Se eu sou Bob,

--------- Se for sábado,

--------------- Se trabalhar com Sally,

--------------------------- Nós dois usamos ternos.

--------------- Se o tênis estiver na TV,

--------------------------- Eu torço por Serena Williams.

Exemplo de código atual:

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

Como posso dizer ao látex para preencher o espaço de indentação com traços?

Responder1

Você pode acompanhar as margens com um comprimento próprio e usá-las para desenhar uma linha apropriada. Seguindo seus comentários, você deseja apenas uma regra em vez de travessões e deseja que o padrão itemizepermaneça inalterado. Então sugiro que você introduza uma nova lista, por exemplo ditemize, para um estilo específico.

Exemplo de saída

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

O código funciona da seguinte maneira. Introduza uma nova variável \myindentpara armazenar o recuo atual. No início de cada um ditemize, usando before=código, adicionamos a margem atual a \myindent. O mecanismo de beforesignifica que isso é feito dentro de um grupo local da lista, então quando uma sublista termina, recuperamos o valor antigo. Agora defina o rótulo, como uma régua de comprimento apropriado, mas em uma caixa de largura zero e projetando-se para a esquerda.

Se você quisesse traços em vez de uma linha, sugiro usar o dashrulepacote, que fornece quase uma substituição do \ruleacima. Você pode então escrever a especificação do rótulo como:

label=\mbox{\hss\hdashrule[.5ex]{\dimexpr\myindent-\labelsep}{.4pt}{3pt}}

após a emissão \usepackage{dashrule}. Com labelsep=.1emisso produz:

Amostra tracejada

informação relacionada