![重新定义具有不确定数量项的环境或命令](https://linux22.com/image/242412/%E9%87%8D%E6%96%B0%E5%AE%9A%E4%B9%89%E5%85%B7%E6%9C%89%E4%B8%8D%E7%A1%AE%E5%AE%9A%E6%95%B0%E9%87%8F%E9%A1%B9%E7%9A%84%E7%8E%AF%E5%A2%83%E6%88%96%E5%91%BD%E4%BB%A4.png)
根据 LaTeX 的基本命令,如果我想创建一个项目列表,我必须使用以下概念代码:
\begin{itemize}
\item first
\item second
\item third
\end{itemize}
为了使我的代码尽可能干净并且真正可定制,我使用了另一个概念:
\begin{myenv}
\item first
\item second
\item third
\end{myenv}
如果可能的话,我还想像这样自定义“项目命令”(但这不是必需的):
\begin{myenv}
\myitem first
\myitem second
\myitem third
\end{myenv}
问题是:我如何重新定义这样的环境?
\newenvironment{myenv}
{?}
{?}
我想针对新创建的命令提出同样的问题
\newcommand{\mycmd}{?}
答案1
您可以使用该enumitem
包来设置您自己的列表。
请注意,在下面的代码中,我已使用\newlist
来创建环境mylist
并setlist
对其进行自定义。{10}
指的是max-depth
,这意味着您最多可以拥有 10 个嵌套版本。
该enumitem
套餐提供许多更多自定义标签、缩进、边距、字体等的选项 - 有关更多详细信息,请参阅文档。
\documentclass{article}
\usepackage{enumitem}
\newlist{mylist}{enumerate}{10}
\setlist[mylist]{label=$\triangleright$}
\begin{document}
\begin{mylist}
\item my first item
\item my second item
\end{mylist}
\end{document}
答案2
定义与环境匹配的新环境itemize
的方法如下:
\newenvironment{myenv}%
{\begin{itemize}}% \begin{myenv}
{\end{itemize}}% \end{myenv}
定义一个执行类似操作的命令的\item
方法如下:
\usepackage{letltxmacro}% http://ctan.org/pkg/letltxmacro
\LetLtxMacro{\mycmd}{\item}% \mycmd = \item
请注意\item
可能带有可选参数,因此通过 来“复制”它并不容易\newcommand{\mycmd}{\item}
。letltxmacro
包裹允许制作“负责任的”副本。下面是一个展示用法的最小示例:
\documentclass{article}
\newenvironment{myenv}%
{\begin{itemize}}% \begin{myenv}
{\end{itemize}}% \end{myenv}
\usepackage{letltxmacro}% http://ctan.org/pkg/letltxmacro
\LetLtxMacro{\mycmd}{\item}% \mycmd = \item
\begin{document}
\begin{myenv}
\mycmd first
\mycmd second
\mycmd third
\end{myenv}
\end{document}
如上所述,您现在还可以使用\mycmd[<stuff>]
它来覆盖传统的\textbullet
项目符号。