更改项目标签颜色(包括项目[自定义])

更改项目标签颜色(包括项目[自定义])

我需要为列表创建一个自定义环境,该环境接受一个参数作为项目标签,并将所有项目标签颜色设为红色。此外,我需要能够使用 item 命令的可选参数为某些项目指定不同的标签。这个不同的标签也应该是红色的。

到目前为止,我有以下代码,它可以正常工作,但我无法将 ### 标签的颜色变为红色。

\newenvironment{textitemize}[1]{ 
  \renewcommand*{\labelitemi}{\color{red}#1} 
  \begin{itemize}
}{
  \end{itemize}
}

\begin{textitemize}{ad}
  \item Foo
  \item Bar
  \item[\#\#\#] foo
\end{textitemize}

编辑

最后它应该像下图这样,其中第一行是使用示例。我需要一个本地计数器,并且应该只使用命令\item而不是其他自定义命令来创建项目。

它应该看起来像这样

答案1

以下是使用该enumitem包的替代方法:

\documentclass{article}
\usepackage{xcolor}
\usepackage{enumitem}
\newlist{myitemize}{itemize}{1}
\setlist[myitemize]{font=\color{red}}

\begin{document}
\begin{myitemize}[label=ad]
  \item Foo
  \item Bar
  \item[\#\#\#] foo
\end{myitemize}
\end{document}

以下是包含计数器的更新版本代码:

在此处输入图片描述

\documentclass{article}
\usepackage{xcolor}
\usepackage{enumitem}
\newlist{myitemize}{enumerate}{1}
\setlist[myitemize]{font=\color{red}\bfseries\itshape}

\begin{document}
\begin{myitemize}[label=ad~\arabic*]
  \item Foo
  \item Bar
  \item[\#\#\#] foo
  \item more text
  \item another item
\end{myitemize}
\end{document}

答案2

根据@lendriis的回答,我添加了一个计数器来计算带有 的特殊项目\myitem。我不知道您想要全局计数器还是本地计数器。所以我定义了\globalmyitem和以在和\localmyitem之间切换。并且请添加您在@lendriis 的回答对您的问题的评论中提到的额外要求。globallocal

\documentclass{article}
\usepackage{paracol}
\usepackage{xpatch}
\usepackage{xcolor}
\usepackage{enumitem}
\newlist{myitemize}{itemize}{1}
\setlist[myitemize]{font=\bfseries\itshape\color{red}, label=ad \themyitem}
\newcounter{myitem}
\setcounter{myitem}{1}
\newcommand{\myitem}{\item \stepcounter{myitem}}
\makeatletter
\newcommand{\globalmyitem}{\setcounter{myitem}{1}\def\patch@myitem{}}
\newcommand{\localmyitem}{\def\patch@myitem{\setcounter{myitem}{1}}}
\def\patch@myitem{}
\xpretocmd{\myitemize}{\patch@myitem}{}{}
\makeatother

\begin{document}
\begin{paracol}{2}
\section*{Global counter}

\globalmyitem
\fbox{list 1}
\begin{myitemize}
  \myitem Foo
  \myitem Bar
  \item[\#\#\#] foo
\end{myitemize}
\fbox{list 2}
\begin{myitemize}
  \myitem Foo
  \myitem Bar
  \item[\#\#\#] foo
\end{myitemize}

\switchcolumn
\section*{Local counter}

\localmyitem
\fbox{list 1}
\begin{myitemize}
  \myitem Foo
  \myitem Bar
  \item[\#\#\#] foo
\end{myitemize}
\fbox{list 2}
\begin{myitemize}
  \myitem Foo
  \myitem Bar
  \item[\#\#\#] foo
\end{myitemize}
\end{paracol}
\end{document}

在此处输入图片描述

答案3

我通过更新\item命令解决了这个问题,并且根据是否提供了可选参数,要么重用旧的\item,要么编写我自己的前缀。请参阅下面的代码。

套餐

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{color}
\usepackage{enumitem}
\usepackage{xifthen}% provides \isempty test

定义

% used for counting list entries
\newcounter{myCounter}

% myPrefix will return the prefix for list items set by textitemize
\newcommand{\myPrefix}{}

% set myPrefix and start itimize environment
\newenvironment{textitemize}[1] {
    \renewcommand{\myPrefix}[1]{#1 }
    \begin{itemize}
}{\end{itemize}}

% redefine item as olditem because this will be reused
\let\olditem\item
% if optional parameter is present call \olditem with it, otherwise add custom prefix and counter
\renewcommand{\item}[1][ ]{
    \ifthenelse{\isempty{#1}}%
        {\olditem[\color{red}\textit{\textbf{\myPrefix~\stepcounter{myCounter}\themyCounter}}]}% if #1 is empty
        {\olditem[\color{red}{\textbf{#1}}]}% if #1 is not empty
    
}

用法:

\begin{textitemize}{ad}
    \item Was wir wollen.
    \item Was wir haben.
    \item Was wir tun.
    \item[\#\#\#] Dieser Eintrag tanzt aus der Reihe.
    \item
    \item
\end{textitemize}

结果 结果

相关内容