我尝试创建一个自定义列表,如下面的代码所示,但我需要知道如何创建具有不同标签类型(阿拉伯语、罗马语等)的自定义列表,并更改特定标签的框架颜色(例如,\item[blue]
而不是红色)?
目前,我为每种标签类型和每种标签颜色都创建了单独的列表,我不确定如何在列表定义中将颜色设为可选参数(例如\begin{boxati}[label=(red)]
)或更改标签类型\label=(\arabic*)
。
有人可以提供一个解决方案,让我能够在同一个列表定义中实现这两个或其中一个功能吗?
\documentclass{article}
\usepackage{amsmath,amsfonts}
\usepackage{tikz}
%==== Custom List : Roman ====%
\newcounter{boxlblcntri}
\newcommand{\makeboxlabeli}[1]{\tikz[baseline=(char.base)]{
\node[rounded corners=3pt, draw=red!50,thick,
inner sep=4pt,minimum width =15pt,minimum height =15pt](char){#1};}}
\newenvironment{boxati}
{\begin{list}
{\roman{boxlblcntri}}
{\usecounter{boxlblcntri}
\setlength{\labelwidth}{3.5em}
\setlength{\labelsep}{-12pt}
\setlength{\itemsep}{2pt}
\setlength{\topsep}{6pt}
\setlength{\leftmargin}{1.1cm}
\setlength{\rightmargin}{0cm}
\setlength{\itemindent}{0pt}
\let\makelabel=\makeboxlabeli
}
}
{\end{list}}
\begin{document}
\begin{boxati}
\item 1
\item 2
\item 3
\end{boxati}
\end{document}
列表示例:
答案1
您可以使用 expl3 的 keyval 机制:
\documentclass{article}
\usepackage{tikz}
%==== Custom List : Roman ====%
\ExplSyntaxOn
\keys_define:nn { boxkeyval } {
counter .tl_set:N = \l__boxkeyval_counter_tl,
counter .initial:n = roman,
color .tl_set:N = \l__keyval_color_tl,
color .initial:n = red
}
\newcounter{boxlblcntri}
\newcommand{\makeboxlabeli}[1]{%
\tikz[baseline=(char.base)]{
\node[
rounded~corners=3pt,
draw=\l__keyval_color_tl!50,
thick,
inner~sep=4pt,
minimum~width=15pt,
minimum~height=15pt
] (char) {#1};
}%
}
\NewDocumentEnvironment{boxati}{ O{} +b }{
\group_begin:
\keys_set:nn { boxkeyval } { #1 }
\begin{list}
{\csname\l__boxkeyval_counter_tl\endcsname{boxlblcntri}}
{
\usecounter{boxlblcntri}
\setlength{\labelwidth}{3.5em}
\setlength{\labelsep}{-12pt}
\setlength{\itemsep}{2pt}
\setlength{\topsep}{6pt}
\setlength{\leftmargin}{1.1cm}
\setlength{\rightmargin}{0cm}
\setlength{\itemindent}{0pt}
\let\makelabel=\makeboxlabeli
}
#2
\end{list}
\group_end:
}{}
\ExplSyntaxOff
\begin{document}
\begin{boxati}
\item 1
\item 2
\item 3
\end{boxati}
\begin{boxati}[counter=arabic, color=blue]
\item 1
\item 2
\item 3
\end{boxati}
\end{document}