自定义枚举的编译问题

自定义枚举的编译问题

由于某种原因,以下代码无法编译。有人能解释一下原因吗?

\documentclass[letterpaper]{article}
\usepackage{enumitem}
\usepackage{fullpage}
\usepackage[dvipsnames,table]{xcolor}
\usepackage{amsmath,amsthm,amsfonts,amssymb,hhline,mathtools}
\usepackage{tikz,background,array,multicol,bbding}
\usepackage{enumitem}
\usepackage{cancel,array,booktabs}
\usepackage{framed}

\setlist[enumerate]{before=\setupmodenumerate}

\newif\ifmoditem
\newcommand{\setupmodenumerate}{%
  \global\moditemfalse
  \let\origmakelabel\makelabel
  \def\moditem##1{\global\moditemtrue\def\mesymbol{##1}\item}%
  \def\makelabel##1{%
    \origmakelabel{\ifmoditem\llap{\mesymbol\enspace}\fi##1}%
    \global\moditemfalse}%
}

\setlist[enumerate]{before=\setupcmodenumerate}

\newif\ifcitem
\newcommand{\setupcmodenumerate}{%
  \global\citemfalse
  \let\origmakelabel\makelabel
  \def\citem##1{\global\citemtrue\def\cecolor{##1}\item}%
  \def\makelabel##1{%
    \origmakelabel{\ifcitem\color{\cecolor}\fi##1}%
    \global\citemfalse}%
}
\begin{document}
\begin{enumerate}
\moditem{*} test
\citem{blue}
\end{enumerate}
\end{document}

答案1

第二个\setlist命令用第一个命令覆盖before=\setupmodenumerate给定的内容,因此\moditem未定义。您必须合并这两个设置。最小示例:

\documentclass{article}
\usepackage{enumitem,color}

\setlist[enumerate]{before=\setupmodenumerate}

\newif\ifmoditem
\newif\ifcitem
\newcommand{\setupmodenumerate}{%
  \global\moditemfalse
  \global\citemfalse
  \let\origmakelabel\makelabel
  \def\moditem##1{\global\moditemtrue\def\mesymbol{##1}\item}%
  \def\citem##1{\global\citemtrue\def\cecolor{##1}\item}%
  \def\makelabel##1{%
    \origmakelabel{\ifmoditem\llap{\mesymbol\enspace}\else\ifcitem\color{\cecolor}\fi\fi##1}%
    \global\moditemfalse\global\citemfalse}%
}

\begin{document}
\begin{enumerate}
\moditem{*} test
\citem{blue} test
\end{enumerate}
\end{document}

在此处输入图片描述

相关内容