我希望拥有一个与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
可以用命令代替,并且用定义了一个具有特殊名称的新列表,它根据值选择形状。\includegraphics
enumitem
counter
shapeenum
\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}