众所周知,列表环境分为项目符号和项目内容,例如LaTeX
默认提供的enumerate
环境,键入\item A
,得到一个序号1
和小数点的组合,一个字母A
,以及一些空白距离,包括垂直的和水平的。略去这些空白距离,只谈“有效信息”,即序号和小数点的组合(项目符号)和字母A
(项目内容),当项目内容较多的时候,就会产生悬挂效果,并且默认是支持换页和分栏的。
但是这里面有一些我不满意的点,参照enumitem
宏包的图:
label
默认是居右的,这就导致label
盒子的左端留出些许水平空白,我想让label
顶格,至少需要居左才行,这当然可以通过align=left
来实现,此后显然是居左的,但是此时又导致其二,label
盒子的右端可能留出许多空白。然而,实际上在label
两边的水平空白,我都不想要,但仍然需要在label
即1.
后面留出一些微不足道的水平空白,以将项目符号和项目内容分隔开。0pt
,看起来似乎是当itemindent=labelsep=0pt
时leftmargin-labelwidth
的值。verse
环境实现吗?或者其他的封装方法?大概写了一个:
\documentclass{article}
\usepackage{showframe}
\makeatletter
\NewDocumentEnvironment{yuanlist}{}{
\newcounter{yuan}
\def\item{
\stepcounter{yuan}
\settowidth{\@tempskipa}{\theyuan.}
\par\leftskip=\@tempskipa\noindent\llap{\theyuan.}\ignorespaces
}
}{\@endparenv}
\makeatother
\begin{document}
yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan
\begin{yuanlist}
\item yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan
\item yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan \setcounter{yuan}{1000}
\item yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan
\end{yuanlist}
yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan
\end{document}
细节的慢慢改吧(摊手
想要通过
\list{}{}
实现动态的\leftmargin
似乎很困难,我上一次遇到这样的问题还是在尝试根据字号设置段首缩进长度。总之实现动态\leftmargin
会遇到我还搞不懂的宏展开问题(摊手