![使用 enumitem 和 \newcommand 宏进行枚举](https://linux22.com/image/322837/%E4%BD%BF%E7%94%A8%20enumitem%20%E5%92%8C%20%5Cnewcommand%20%E5%AE%8F%E8%BF%9B%E8%A1%8C%E6%9E%9A%E4%B8%BE.png)
% !TeX spellcheck = he_IL
\documentclass[titlepage=false,12pt,titlepage]{scrreprt}
%\pagenumbering{roman}
\usepackage{ucs} % unicode support
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
%-----
\usepackage{anyfontsize}
\usepackage{t1enc}
\usepackage[english,russian,hebrew]{babel}
\usepackage{helvet}
\renewcommand{\familydefault}{\rmdefault}
\usepackage[inline, shortlabels]{enumitem}
\renewcommand{\labelenumi}{)\textrm{\arabic{enumi}}(}
\renewcommand{\labelenumii}{\alph{enumii}(}
\setlist{topsep = 2 pt, partopsep = 1 pt, parsep = 0 pt, itemsep = 2 pt}
\usepackage{graphicx}
\usepackage{wasysym}
\newcommand{\mybigbox}{\APLbox}
\newcommand{\mybox}{\APLbox}
%------------------------------------------------------
\newcommand{\BoxArabicEnum}{)1( \APLbox}
\usepackage[left= 1cm, right= 1.5 cm, top=1cm,bottom=1 cm, footskip=0.5cm]{geometry}
\begin{document}
\L{First enumerate:}
\begin{enumerate}[ \BoxArabicEnum ]
\item
a
\item
b
\item
c
\end{enumerate}
\L{Second enumerate:}
\begin{enumerate}[ )1( \APLbox ]
\item
a
\item
b
\item
c
\end{enumerate}
\end{document}
%---------------------------------
结果如下:
问题:为什么“第一次枚举:”与“第二次枚举:”不同,以及如何使用户定义的命令\BoxArabicEnum
产生与直接替换相同的结果 )1( \APLbox
?
答案1
enumitem
需要键值序列,因此不会扩展提供的可选参数。如果您决定使用此接口,则需要确保enumitem
接收您提供的扩展版本。
下面我重新定义了enumerate
扩展其可选参数。我还选择使用另一种打印方式,\APLbox
即使用\fbox
不可见的水平和垂直支柱(零宽度\rule
):
\documentclass{article}
\usepackage[inline, shortlabels]{enumitem}
\renewcommand{\labelenumi}{(\textrm{\arabic{enumi}})}
\renewcommand{\labelenumii}{\alph{enumii})}
\usepackage{wasysym,letltxmacro}
\newcommand{\mybigbox}{\APLbox}
\newcommand{\mybox}{\APLbox}
\setlength{\fboxsep}{0pt}
\newcommand{\BoxArabicEnum}{(1) \protect\fbox{\protect\rule{.55em}{0pt}\protect\rule{0pt}{.7em}}}
%\renewcommand{\BoxArabicEnum}{(1) \protect\APLbox}
\LetLtxMacro\oldenumerate\enumerate
\let\endoldenumerate\endenumerate
\makeatletter
\renewenvironment{enumerate}[1][]
{\begingroup\protected@edef\x{\endgroup\noexpand\begin{oldenumerate}[#1]}\x}
{\end{oldenumerate}}
\makeatother
\begin{document}
First enumerate:
\begin{enumerate}[ \BoxArabicEnum ]
\item a
\item b
\item c
\end{enumerate}
Second enumerate:
\begin{enumerate}[ (1) \APLbox ]
\item a
\item b
\item c
\end{enumerate}
\end{document}