众所周知,列表环境分为项目符号和项目内容,例如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会遇到我还搞不懂的宏展开问题(摊手