自动防止枚举打印“(i)”

自动防止枚举打印“(i)”

在进行证明时,我会进行语义区分,将所有假设用字母表示,将证明义务用罗马数字表示。不幸的是,这与字母 (i) 发生冲突,我正在寻找一种方法来规避这种情况。我可以通过在\setcounter{enumi}{8}我的假设列表中有问题的项目前面手动轻松地防止这种情况发生。但是,这很容易出错。有没有办法自动执行此操作并跳过该字符?

此处描述的问题的屏幕截图

以下是产生冲突的 M(N)WE:

\documentclass[a4paper]{article}
\usepackage{enumitem}

\newenvironment{assumptions}
    {\begin{enumerate}[label=(\alph*)]
    }
    {
    \end{enumerate}
  }
\newenvironment{goals}
    {\begin{enumerate}[label=(\roman*)]
    }
    {
    \end{enumerate}
  }

\begin{document}
If
\begin{assumptions}
\item $1+1=2$
\item $2+0=2$
\item $0+2=2$
\item $3-1=2$
\item $4-2=2$
\item $5-3=2$
\item $6-4=2$
\item $7-5=2$
\end{assumptions}
Then
\begin{goals}
\item uhoh
\item this is ok
\end{goals}
\end{document}

答案1

正如评论中其他人指出的那样,防止这种冲突的最佳方法似乎只是更改其中一种编号样式。但是如果您愿意,您也可以设置列表assumptions以修改命令\item,以便在打印新项目之前检查编号以自动跳过“(i)”。

\documentclass[a4paper]{article}
\usepackage{enumitem}

\let\olditem\item
\newcommand*{\changeitem}{%
    \def\item{%
        \ifnum\arabic{assumptionsi}=8
            \stepcounter{assumptionsi}%
            \olditem%
        \else
            \olditem%
        \fi%
    }%
}
\newlist{assumptions}{enumerate}{1}
\setlist[assumptions]{
    label=(\alph*),
    before=\changeitem,
    after={\let\item\olditem},
}

\newlist{goals}{enumerate}{1}
\setlist[goals]{label=(\roman*)}

\begin{document}
If
\begin{assumptions}
\item $1+1=2$
\item $2+0=2$
\item $0+2=2$
\item $3-1=2$
\item $4-2=2$
\item $5-3=2$
\item $6-4=2$
\item $7-5=2$
\item $8-6=2$
\end{assumptions}
Then
\begin{goals}
\item uhoh
\item this is ok
\end{goals}
\end{document}

顺便说一句,您不必使用 来定义assumptionsgoals列表\newenvironment,而是可以将它们定义为enumerate带有的 的enumitem克隆\newlist。然后,您可以使用\setlist来对它们进行不同的设置。

相关内容