
我希望製作一個用彩色數字列舉的清單。我發現的方法是更新枚舉環境使用的 \labelenumi 命令來標記項目。但是,我希望能夠切換回預設值,並在 Circledsteps 套件的幫助下使用這段程式碼實現了所有目標。
\newcommand{\colorlabel}{
\let\oldlabelenumi\labelenumi
\renewcommand{\labelenumi}{
\Circled[inner color=white,fill color=mycolor,outer color=mycolor]{\textsf{\arabic{enumi}}}
}
}
\newcommand{\defaultlabel}{
\renewcommand{\labelenumi}{\oldlabelenumi}
}
問題是我第一次使用 \colorlabel 和 \defaultlabel 時它有效。第二次我切換到彩色標籤時它也可以工作,但是再次返回預設值則不起作用(如果在枚舉群組\defaultlabel 內部使用,則不會執行任何操作,如果在外部使用,則會導致程式碼無法編譯)。我可以透過手動標記所有未著色的內容來修復它,並且永遠不會切換回預設值,但我想避免解決方案。
編輯:
這是程式碼的可編譯版本。如果取消最後一部分的註釋,程式碼將無法編譯。
\documentclass[a4paper,11 pt]{article}
\usepackage{enumitem}
\usepackage{xcolor}
\usepackage{circledsteps}
\newcommand{\colorlabel}{
\let\oldlabelenumi\labelenumi
\renewcommand{\labelenumi}{
\Circled[inner color=white,fill color=mycolor,outer color=mycolor]{\textsf{\arabic{enumi}}}
}
}
\newcommand{\defaultlabel}{
\renewcommand{\labelenumi}{\oldlabelenumi}
}
\begin{document}
\definecolor{hardex}{RGB}{204,51,0}
\definecolor{mediumex}{RGB}{204,153,0}
\definecolor{easyex}{RGB}{0,153,51}
\colorlet{mycolor}{easyex}
\newcommand{\ritem}{\colorlet{mycolor}{hardex} \item}
\newcommand{\yitem}{\colorlet{mycolor}{mediumex} \item}
\newcommand{\gitem}{\colorlet{mycolor}{easyex} \item}
\colorlabel
\begin{enumerate}
\gitem green
\yitem yellow
\ritem red
\item red again
\end{enumerate}
\defaultlabel
\begin{enumerate}
\item one
\item two
\end{enumerate}
\colorlabel
\begin{enumerate}
\gitem green
\end{enumerate}
\defaultlabel
%\begin{enumerate}
% \item ?
%\end{enumerate}
\end{document}
答案1
您需要初始化\oldlabelenumi
,否則缺少初始值\colorlabel
會產生錯誤。
\documentclass[a4paper,11 pt]{article}
\usepackage{enumitem}
\usepackage{xcolor}
\usepackage{circledsteps}
\let\oldlabelenumi\labelenumi
\newcommand{\colorlabel}{%
\renewcommand{\labelenumi}{%
\Circled[inner color=white,fill color=mycolor,outer color=mycolor]{\textsf{\arabic{enumi}}}
}%
}
\newcommand{\defaultlabel}{%
\let\labelenumi\oldlabelenumi
}
\definecolor{hardex}{RGB}{204,51,0}
\definecolor{mediumex}{RGB}{204,153,0}
\definecolor{easyex}{RGB}{0,153,51}
\colorlet{mycolor}{easyex}
\newcommand{\ritem}{\colorlet{mycolor}{hardex} \item}
\newcommand{\yitem}{\colorlet{mycolor}{mediumex} \item}
\newcommand{\gitem}{\colorlet{mycolor}{easyex} \item}
\begin{document}
\colorlabel
\begin{enumerate}
\gitem green
\yitem yellow
\ritem red
\item red again
\end{enumerate}
\defaultlabel
\begin{enumerate}
\item one
\item two
\end{enumerate}
\colorlabel
\begin{enumerate}
\gitem green
\end{enumerate}
\defaultlabel
\begin{enumerate}
\item one
\item two
\end{enumerate}
\end{document}
另一方面,我更喜歡不同的策略,即定義一個colorenumerate
環境。
\documentclass[a4paper,11 pt]{article}
\usepackage{enumitem}
\usepackage{xcolor}
\usepackage{circledsteps}
\newenvironment{colorenumerate}[1][]{%
\begin{enumerate}[#1]
\renewcommand{\labelenumi}{%
\Circled[inner color=white,fill color=mycolor,outer color=mycolor]{\textsf{\arabic{enumi}}}
}%
}{\end{enumerate}}
\definecolor{hardex}{RGB}{204,51,0}
\definecolor{mediumex}{RGB}{204,153,0}
\definecolor{easyex}{RGB}{0,153,51}
\colorlet{mycolor}{easyex}
\newcommand{\ritem}{\colorlet{mycolor}{hardex}\item}
\newcommand{\yitem}{\colorlet{mycolor}{mediumex}\item}
\newcommand{\gitem}{\colorlet{mycolor}{easyex}\item}
\begin{document}
\begin{colorenumerate}
\gitem green
\yitem yellow
\ritem red
\item red again
\end{colorenumerate}
\begin{enumerate}
\item one
\item two
\end{enumerate}
\begin{colorenumerate}
\gitem green
\end{colorenumerate}
\begin{enumerate}
\item one
\item two
\end{enumerate}
\end{document}