在进行证明时,我会进行语义区分,将所有假设用字母表示,将证明义务用罗马数字表示。不幸的是,这与字母 (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}
顺便说一句,您不必使用 来定义assumptions
和goals
列表\newenvironment
,而是可以将它们定义为enumerate
带有的 的enumitem
克隆\newlist
。然后,您可以使用\setlist
来对它们进行不同的设置。