
Я хотел бы определить среду следующим образом:
\newenvironment{antiitemize}{\end{itemize}}{\begin{itemize}}
Я называю это, antiitemize
потому что я намереваюсь использовать это внутри itemize
среды, чтобы вырваться из списка на короткое время, например, чтобы написать комментарий, который на самом деле не является частью списка. Например, я хотел бы написать
\documentclass{article}
\newenvironment{antiitemize}{\end{itemize}}{\begin{itemize}}
\parindent=0pt
\begin{document}
Donec aliquam quam sed enim bibendum, quis ultrices felis porttitor.
\begin{itemize}
\item Lorem ipsum dolor sit amet, consectetur adipiscing elit.
\item Quisque ac porttitor lectus.
\begin{antiitemize}
Mauris a libero laoreet, iaculis arcu et, tincidunt quam.
\end{antiitemize}
\item Suspendisse auctor leo ut felis lobortis commodo vel quis diam.
\end{itemize}
Morbi nec rhoncus ante.
\end{document}
Однако это не работает. LaTeX, похоже, не нравится, что среды плохо вложены. Я нашел обходной путь, который включает определение пары команд для запуска и завершения среды antiitemize
вручную, вот так.
\documentclass{article}
\def\antiitemize{\end{itemize}}
\def\endantiitemize{\begin{itemize}}
\parindent=0pt
\begin{document}
Donec aliquam quam sed enim bibendum, quis ultrices felis porttitor.
\begin{itemize}
\item Lorem ipsum dolor sit amet, consectetur adipiscing elit.
\item Quisque ac porttitor lectus.
\antiitemize
Mauris a libero laoreet, iaculis arcu et, tincidunt quam.
\endantiitemize
\item Suspendisse auctor leo ut felis lobortis commodo vel quis diam.
\end{itemize}
Morbi nec rhoncus ante.
\end{document}
Это терпимо, но мне бы очень хотелось узнать, почему я не могу определить свою antiitemize
среду с помощью \newenvironment
.
Редактировать.В ответ на некоторые комментарии, полученные мной по моему вопросу, вот несколько заметок о мотивах, побудивших меня задать этот вопрос.
cgnieder указывает, что это
\end{itemize}...\begin{itemize}
будет иметь тот же эффект, что и\begin{antiitemize}...\end{antiitemize}
. Это правда, но в моем случае это не очень «семантический» способ разметки документа. В моейantiitemize
среде следует рассматривать вещи как «прерывание списка», а не как «завершение одного списка и начало другого».Я не разъяснил это в своем первоначальном вопросе, но, полагаю, мне бы хотелось получить ответ на следующий вопрос:почемумоя
antiitemize
среда нарушена?
решение1
Вы уже можете сделать это довольно легко с помощью enumitem
пакета: в нем есть resume*
опция, которая использует параметры предыдущего списка того же типа и уровня, и, для enumerate
, запускает счетчик там, где его оставил предыдущий список. Демонстрация:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{amssymb}
\usepackage[svgnames]{xcolor}
\usepackage{enumitem}
\parindent=0pt
\begin{document}
Donec aliquam quam sed enim bibendum, quis ultrices felis porttitor.
\begin{itemize}[label =\color{VioletRed}$ \lozenge $]
\item Lorem ipsum dolor sit amet, consectetur adipiscing elit.
\item Quisque ac porttitor lectus.
\end{itemize}
Mauris a libero laoreet, iaculis arcu et, tincidunt quam.
\begin{itemize}[resume*]
\item Suspendisse auctor leo ut felis lobortis commodo vel quis diam.
\end{itemize}
Morbi nec rhoncus ante.
\begin{itemize}
\item Lorem ipsum dolor sit amet, consectetur adipiscing elit.
\item Quisque ac porttitor lectus.
\end{itemize}
\end{document}
решение2
Вы можете использовать \antiitemize
and \endantiitemize
вместо \begin{antiitemize}
and \end{antiitemize}
и сохранить определение среды.
\documentclass{article}
\newenvironment{antiitemize}{\end{itemize}}{\begin{itemize}}
\parindent=0pt
\begin{document}
Donec aliquam quam sed enim bibendum, quis ultrices felis porttitor.
\begin{itemize}
\item Lorem ipsum dolor sit amet, consectetur adipiscing elit.
\item Quisque ac porttitor lectus.
\antiitemize
Mauris a libero laoreet, iaculis arcu et, tincidunt quam.
\endantiitemize
\item Suspendisse auctor leo ut felis lobortis commodo vel quis diam.
\end{itemize}
Morbi nec rhoncus ante.
\end{document}
Посмотреть результатыздесь.