周囲の環境を離れる環境を定義する

周囲の環境を離れる環境を定義する

次のような環境を定義したいと思います。

\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


編集。私の質問に対して寄せられたコメントに応えて、この質問をした動機についていくつかメモしておきます。

  • \end{itemize}...\begin{itemize}cgnieder は、は と同じ効果を持つだろうと指摘しています\begin{antiitemize}...\end{antiitemize}。これは事実ですが、私の使用例では、ドキュメントをマークアップする方法としてはあまり「セマンティック」ではありません。私のantiitemize環境では、これは「1 つのリストを終了して別のリストを開始する」というよりも、「リストの中断」として考える必要があります。

  • 元の質問ではこれを明確に述べませんでしたが、私が本当に答えてほしいのは次の点だと思います。なぜ私の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 および を使用し、環境定義を保持することができます。\endantiitemize\begin{antiitemize}\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}

ここに画像の説明を入力してください

結果を見るここ

関連情報