我需要为列表创建一个自定义环境,该环境接受一个参数作为项目标签,并将所有项目标签颜色设为红色。此外,我需要能够使用 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 的回答对您的问题的评论中提到的额外要求。global
local
\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}