我怎样才能在列表中的列表中仅排版b
(子项的标签)而不排版2
(封闭项的标签)?inparaenum
enumerate
\documentclass {article}
\usepackage {paralist}
\begin {document}
\noindent
Here is my list:
\begin {enumerate}
\item First item.
\item Second item:
\begin {inparaenum}[(a)]
\item \label {first} first subitem,
\item \label {second} second subitem.
\end {inparaenum}
\end {enumerate}
\noindent
I want to typeset `b' not `\ref {second}'.
\end {document}
答案1
根据以下内容定义您自己的环境inparaenum
:
\documentclass{article}
\usepackage{paralist}
\makeatletter
\def\zinparaenum{%
\ifnum\@enumdepth>\thr@@
\@toodeep
\else
\advance\@enumdepth\@ne
\edef\@enumctr{enum\romannumeral\the\@enumdepth}%
\fi
\@ifnextchar[{\@enumlabel@{\@zinparaenum@}[}{\@zinparaenum@}}
\def\@zinparaenum@{%
\usecounter{\@enumctr}%
\@namedef{p@\@enumctr}{}%
\def\@itemlabel{\csname label\@enumctr\endcsname}%
\let\@item\pl@item
\def\makelabel##1{##1}%
\ignorespaces}
\let\endzinparaenum\ignorespacesafterend
\makeatother
\begin{document}
Here is my list:
\begin{enumerate}
\item First item.
\item Second item:
\begin{zinparaenum}[(a)]
\item \label{first} first subitem,
\item \label{second} second subitem.
\end{zinparaenum}
\end{enumerate}
I want to typeset `b' not `\ref{second}'.
\end{document}
引用仅针对本地数字,没有任何前缀,与嵌套级别无关。
如果你仔细研究一下paralist.sty
,就会发现上面的代码只是 的定义,除了主要的更改(即局部重新定义 )之外,inparaenum
我z
还在 的每次出现后添加了。inparaenum
\p@<counter>
答案2
交叉引用格式存储在名为\p@enumi
etc 的宏中。
paralist
的inparaenum
扩展enumerate
(最多 6 个级别)并使用计数器enumi
,...,enumvi
然后。
对于第二级(已经嵌套了enumerate
,\p@enumii
格式采用\theenumi
,即当前第一级的值,即2
当前示例中的 )。
解决办法是定义\p@enumii
为空。
\documentclass {article}
\usepackage {paralist}
\makeatletter
\renewcommand{\p@enumii}{}
\makeatother
\begin {document}
\noindent
Here is my list:
\begin {enumerate}
\item First item.
\item Second item:
\begin {inparaenum}[(a)]
\item \label {first} first subitem,
\item \label {second} second subitem.
\end {inparaenum}
\end {enumerate}
\noindent
I want to typeset `b' not `\ref {second}'.
\end {document}
显然,paralist
不允许更改交叉引用格式,否则,可以enumitem
使用其inline
列表和ref
选项来替代。