명령을 두 번 갱신하는 데 문제가 있습니다.

명령을 두 번 갱신하는 데 문제가 있습니다.

색깔이 있는 숫자로 열거된 목록을 만들고 싶습니다. 내가 찾은 방법은 항목에 레이블을 지정하기 위해 열거 환경에서 사용하는 \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}

여기에 이미지 설명을 입력하세요

관련 정보