使用 \vtop 框时,\newenvironment 中出现“出现问题 - 可能缺少 \item”错误

使用 \vtop 框时,\newenvironment 中出现“出现问题 - 可能缺少 \item”错误

在尝试回答“如何标记列表/使列表前的一行与列表相符?”我使用一个\vtop框来包含包括标签在内的整个列表。然后,为了改进我的答案,我尝试使用\newenvironment我称为的将解决方案放置在其自己的环境中Imyz。这没有奏效,日志包含两个错误消息:

错误1:Something's wrong--perhaps a missing \item.

错误2:Lonely \item--perhaps a missing list environment.

代码:

\documentclass[12pt]{article}
\usepackage[a5paper]{geometry}
\usepackage{fontspec}
\usepackage{microtype}
\usepackage{multicol}
\usepackage[defaultlines=2,all]{nowidow}
\usepackage{ragged2e}
\usepackage{lipsum}
\usepackage{enumitem}
\usepackage{parskip}

\tolerance=1000

\makeatletter
\newcommand{\indexClass}[1]{\index{#1}}
\newcommand{\class}[1]{#1\indexClass{#1}}
\makeatother

\newcommand{\WviiTwoColumnSetup}{\raggedcolumns\RaggedRight}

\SetEnumitemKey{WviiTwoColumn}{%
  before=\begin{multicols}{2}\WviiTwoColumnSetup,
  after=\end{multicols}}

\newenvironment{Imyz}[1]{%
    \vtop{%
        #1%
         \begin{itemize}[ WviiTwoColumn]}%
             {\end{itemize}}%
    }

\begin{document}
\lipsum[1-2]

    \vtop{%

        Convenient Starting Professions%

     \begin{itemize}[WviiTwoColumn]%

            \item \class{Fighter}
            \item \class{Thief}
            \item \class{Ranger}
            \item \class{Bishop}
            \item \class{Ninja}

         \end{itemize}%
   }

\begin{Imyz}{Convenient Starting Professions}

    \item \class{Fighter}
    \item \class{Thief}
    \item \class{Ranger}
    \item \class{Bishop}
    \item \class{Ninja}

\end{Imyz}

\end{document}

输出:

在此处输入图片描述

从输出和错误中可以明显看出,我的新环境无法itemize使用添加的\vtop包含标签的框来启动和结束环境。任何帮助和任何解释为什么这不起作用都将不胜感激。

答案1

\vtop在“开始”部分启动和结束,因此\begin{itemize}在检查环境内容之前就执行并且框结束。

TeX 允许以 开始一个框\bgroup并以 结束\egroup

\documentclass[12pt]{article}
\usepackage[a5paper]{geometry}
\usepackage{microtype}
\usepackage{multicol}
\usepackage[defaultlines=2,all]{nowidow}
\usepackage{ragged2e}
\usepackage{lipsum}
\usepackage{enumitem}
\usepackage{parskip}

\newcommand{\WviiTwoColumnSetup}{\raggedcolumns\RaggedRight}

\SetEnumitemKey{WviiTwoColumn}{%
  before=\begin{multicols}{2}\WviiTwoColumnSetup,
  after=\vfill\end{multicols}}

\newenvironment{Imyz}[1]
 {\vtop\bgroup #1%
  \begin{itemize}[WviiTwoColumn]}
 {\end{itemize}\egroup}

\newcommand{\indexClass}[1]{\index{#1}}
\newcommand{\class}[1]{#1\indexClass{#1}}

\begin{document}

\lipsum[2]

    \vtop{%

        Convenient Starting Professions%

     \begin{itemize}[WviiTwoColumn]%

            \item \class{Fighter}
            \item \class{Thief}
            \item \class{Ranger}
            \item \class{Bishop}
            \item \class{Ninja}

         \end{itemize}%
   }

\begin{Imyz}{Convenient Starting Professions}

    \item \class{Fighter}
    \item \class{Thief}
    \item \class{Ranger}
    \item \class{Bishop}
    \item \class{Ninja}

\end{Imyz}

\end{document}

在此处输入图片描述

相关内容