LINUX.ORG.RU

Latex, itemize, отступ сверху и снизу от всего списка


0

2

Доброго времени суток!
Возможно нубский вопрос, но все-же. Делаю диссер в латеке и вот столкнулся с такой неприятной штукой:

Переопределил itemize:
\makeatletter
\let\old@itemize=\itemize
\def\itemize{\old@itemize
\setlength{\itemsep}{0pt}
\setlength{\parskip}{0pt}
\setlength{\topmargin}{0pt}
\setlength{\leftskip}{-1em}
\setlength{\topsep}{0pt}
\setlength{\partopsep}{0pt}
\setlength{\parsep}{0pt}
}
\makeatother

Но никак не могу сделать так, чтобы между абзацем и первым элементом списка, а также между последним элементом и следующим абзацем, был бы «нормальный» отступ (как между обычными абзацами):
бла-бла-бла
(большой интервал)
--первый элемент
--
(большой интервал)
бла-бла-бла

Посмотрел доку, где есть схема itemize, написано что верхний отступ складывается из \parskip + \topsep + \partopsep. Выставляю все в 0, но все равно большой промежуток остайтся. пробовал делать это для конкретного списка - то же самое, и для не переопределённого списка.

Как мне поправить это дело? Спасибо!

И та же самая ситуация наблюдается с изображениями и таблицами, они почему-то отделены избыточными отступами, никак не пойму как их убрать

kirichenkoga
() автор топика

Примерно так:

\renewenvironment{itemize}{
    \begin{list}{\labelitemi}{
    \setlength{\topsep}{0pt}
    \setlength{\partopsep}{0pt}
    \setlength{\parskip}{0pt}
    \setlength{\itemsep}{0pt}
    \setlength{\parsep}{0pt}
    }
}{\end{list}}

Если нужны вложенные списки, нужно еще повозиться с распознованием вложенности (больше актуально для enumerate}.

Когда имел много дел с latex, у меня был сделан пакетик, где были корректно перелопачены itemize, enumerate, section и т.д. ближе к ГОСТу. Если интересно, могу раскопать старые архивы, но ближе к пятнице.

no-such-file ★★★★★
()

Упс, если нужен большой интервал между элементами, крутите \itemsep, \parsep.

no-such-file ★★★★★
()

Для быстрого, но грубого решения могу посоветовать сделать \newenvironment c добавлением \vspace{-Npt} N - подобрать опытным путем (\parskip для начала).

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Вроде разобрался, itemize и enumarate используют внутри себя list, в котором жестко заданы отступы, поэтому не получается их переопределить на верхнем уровне, сделал вот так:

\makeatletter
\renewcommand{\@listI}{%
\topsep=0pt }
\makeatother

\makeatletter
\let\old@itemize=\itemize
\def\itemize{\old@itemize
\setlength{\itemsep}{0pt}
\setlength{\parskip}{0pt}
\setlength{\leftskip}{0pt}
}
\makeatother

\makeatletter
\let\old@enumerate=\enumerate
\def\enumerate{\old@enumerate
\setlength{\itemsep}{0pt}
\setlength{\parskip}{0pt}
\setlength{\leftskip}{0pt}
}\makeatother

kirichenkoga
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.