Управление отступами построчно с помощью класса memoir

Управление отступами построчно с помощью класса memoir

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

Есть две вещи, которые усложняют ситуацию:

  1. много длинных строк, поэтому висячий отступ обязателен
  2. Во многих местах иерархический отступ достигает 3 или 4 уровней, поэтому невозможно, чтобы каждый висячий отступ располагался в одном и том же месте.

Ближе всего я подобрался к этому, используя patverseсреду verse, которая идет в комплекте с memoir, но это позволяет мне смещать только первую строку каждой новой части с отступом; весь перенесенный текст выстраивается таким образом, что сделать отступ дважды или более невозможно:
Пример текста, в котором текст переносится на второй уровень отступа

Я думал об использовании вложенных descriptionокружений, но я хочу, чтобы межстрочный интервал был таким же, как у обычного текста. Это, вероятно, можно исправить, но, похоже, это немного хлопотно в использовании, поэтому я хотел узнать, есть ли что-то лучшее, прежде чем я попробую заставить это работать.

И последнее: на данный момент я планирую использовать пакет memoir. Если это сделает эту схему отступов слишком сложной для разметки, я готов от нее отказаться, но в идеале мне хотелось бы решение, которое хорошо работает с memoir.

решение1

Вот версия, использующая только itemizeсреду с минимальными настройками, созданная с помощью enumitemпакета. Нет необходимости использовать descriptionсреду, поскольку у вас вообще нет метки, поэтому itemizeэто наиболее подходящий вариант. Вы можете играть с настройками по своему усмотрению, чтобы получить нужный вам интервал. Я использовал ключ, nosepчтобы удалить все вертикальные интервалы из списка, и установил поле верхнего уровня так, чтобы оно было вровень с остальным текстом.

\documentclass{memoir}
\usepackage{enumitem}
\newlist{nolabel}{itemize}{4}
\setlist[nolabel]{label={},nosep,labelwidth=0pt,labelsep=0pt}
\setlist*[nolabel,1]{leftmargin=*}
\usepackage{lipsum}
\begin{document}
\lipsum[1]
\begin{nolabel}
\item This is a line at the first level of the list. Here’s how it wraps when the line is very long:
\begin{nolabel}
    \item This is a line at the second level of the list.
    \item This is another line at the second level.
    \begin{nolabel}
        \item This is a third level item.
        \item This a another third level item.
    \end{nolabel}
    \item This is a third second level item.
    \end{nolabel}
\item This is a final first level item.
\end{nolabel}
\lipsum[1]
\end{document}

вывод кода

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