如何创建高度定制的“编号”环境

如何创建高度定制的“编号”环境

我希望拥有一个与itemize或环境相似或完全相同的环境enumerate,以便能够完全自定义每个项目。例如,我想使用我自己定义的“编号”,并且每次使用环境时,我定义的项目都会根据相应的索引自动放置。另外,为了有所区别,我想添加一些类似于“itemize”环境中的项目符号,但这次在每个项目旁边使用一些自定义图形形状;这些形状可能是 LaTeX 图表或使用导入的艺术品\includegraphics。我希望项目的最终输出类似于下图:

在此处输入图片描述

例如,输入以下内容:

\begin{itemize}
\itemRectangle[itme 1]‎
\itemDiamond[item 2]‎
‎\itemRectangle‎[item 4]‎
\itemCustom[item 5]
\end{itemize}

我想要一个类似于上图的输出,其中要自动执行的自定义“编号”是 A、B、C 和 D,这些编号可能之前已使用一些 LaTeX 代码为计数器定义,并且为了方便起见,图形形状将通过命令定义,例如\includegraphics在定义的计数器之前插入形状,而建议命令的最后一部分是项目的名称。在此先行致谢,我请求有资格的人帮助我。谢谢。

答案1

由于 OP 想要各种未指定的图标,我将把这些图像的实际规范留给 OP。但是,我在这里所做的是创建一个自定义环境,geonumerate并能够使用

\newitem{<Name>}{<content>}

当在环境\itemName中调用时geonumerate,它会缩放一个版本<content>并使其成为标签的一部分(因此,<content>可以是任意大小并会缩放到大写字母的垂直足迹X)。

\documentclass{article}
\usepackage{enumitem,scalerel,graphicx}
\newlist{geonumerate}{enumerate}{1}
\setlist[geonumerate,1]{label={\protect\geoimage\,\Alph*.\protect\clearimage}}
\newcommand\newitem[2]{%
  \expandafter\newcommand\csname item#1\endcsname{%
    \gdef\geoimage{\scalerel*{#2}{X}}\item%
  }%
}
\def\clearimage{\gdef\geoimage{}}
\newitem{Rectangle}{\rule{2pt}{1pt}}
\newitem{Diamond}{\includegraphics{example-image-B}}
\newitem{Cross}{\includegraphics{example-image-C}}
\begin{document}
\begin{geonumerate}
\itemRectangle Foo
\itemDiamond Bar
\itemRectangle Is
\itemCross Nice
\item None of the above
\end{geonumerate}
\end{document}

在此处输入图片描述

答案2

像这样吗?

我使用了图纸,但这当然tikz可以用命令代替,并且用定义了一个具有特殊名称的新列表,它根据值选择形状。\includegraphicsenumitemcountershapeenum\AddEnumerateCounter

由于的内部结构enumitem,形状命令必须是强大的,即使用\DeclareRobustCommand{...}\robustify(需要etoolbox然后)

可以轻松添加更多形状,但在这种情况下,loop计数器值和形状的类似分配很可能更为合适。

\documentclass{article}


\usepackage{tikz}
\usetikzlibrary{shadings}
\usepackage{enumitem}


\DeclareRobustCommand{\shaperect}{
\begin{tikzpicture}[scale=0.15]
%  \draw (0,0) rectangle (2,1);
  \shadedraw[shading=color wheel] (0,0) rectangle (2,1);
\end{tikzpicture}
}

\DeclareRobustCommand{\shapediamond}{%
  \begin{tikzpicture}[scale=0.15]
%    \draw (-0.5,0) -- (0,0.5) -- (0.5,0) -- (0,-0.5) -- cycle;
    \shadedraw (-1,0) -- (0,1) -- (1,0) -- (0,-1) -- cycle;
  \end{tikzpicture}
}

\DeclareRobustCommand{\shapeplus}{%
  \begin{tikzpicture}[scale=0.15]
%    \draw (-1,-0.5) -- (-1,0.5) -- (-0.5,0.5) -- (-0.5,1) -- (0.5,1) -- (0.5,0.5) -- (1,0.5) -- (1,-0.5) -- (0.5,-0.5) -- (0.5,-1) -- (-0.5,-1) -- (-0.5,-0.5)-- cycle;
    \shadedraw[top color=red,bottom color=yellow] (-1,-0.5) -- (-1,0.5) -- (-0.5,0.5) -- (-0.5,1) -- (0.5,1) -- (0.5,0.5) -- (1,0.5) -- (1,-0.5) -- (0.5,-0.5) -- (0.5,-1) -- (-0.5,-1) -- (-0.5,-0.5)-- cycle;
  \end{tikzpicture}
}

\DeclareRobustCommand{\shapecircle}{%
  \begin{tikzpicture}[scale=0.2]
%    \draw circle(0.5);
    \shadedraw[top color=blue, bottom color=yellow] circle(0.5);
  \end{tikzpicture}
}



\makeatletter

\def\shapeenum#1{\expandafter\@shapeenum\csname c@#1\endcsname}

\def\@shapeenum#1{%
    \ifcase\number#1 % No number for 0
    \or
    \shaperect
    \or
    \shapediamond 
    \or
    \shapeplus
    \or
    \shapecircle
    \else
    \@ctrerr
    \fi
}


\AddEnumerateCounter*{\shapeenum}{\@shapeenum}{500}
\makeatother

\newlist{shapenum}{enumerate}{1}
\setlist[shapenum,1]{label={\shapeenum* \Alph*.}}
\begin{document}


\begin{shapenum}
\item Foo
\item Bar
\item Other
\item FooBar
%\item Error!  Will provide an error since not more than 4 shapes are defined
\end{shapenum}


\end{document}

在此处输入图片描述

相关内容