如何制作可跨页分栏的列表环境,使得标签顶格且标签宽度等于标签自身?

发布于 2025-05-19 23:33:26

众所周知,列表环境分为项目符号和项目内容,例如LaTeX默认提供的enumerate环境,键入\item A,得到一个序号1和小数点的组合,一个字母A,以及一些空白距离,包括垂直的和水平的。略去这些空白距离,只谈“有效信息”,即序号和小数点的组合(项目符号)和字母A(项目内容),当项目内容较多的时候,就会产生悬挂效果,并且默认是支持换页和分栏的。

但是这里面有一些我不满意的点,参照enumitem宏包的图:
image.png

  1. 标签盒子的宽度是预设置的,由此,其一,label默认是居右的,这就导致label盒子的左端留出些许水平空白,我想让label顶格,至少需要居左才行,这当然可以通过align=left来实现,此后显然是居左的,但是此时又导致其二,label盒子的右端可能留出许多空白。然而,实际上在label两边的水平空白,我都不想要,但仍然需要在label1.后面留出一些微不足道的水平空白,以将项目符号和项目内容分隔开。
  2. 剩下的部分是关于项目内容,只要其总宽度加上label的总宽度刚好等于版心宽度就满足了。当然前面说的标签顶格,意思大概就是说这段红框的水平长度:image.png刚好为0pt,看起来似乎是当itemindent=labelsep=0ptleftmargin-labelwidth的值。
  3. 当然,我希望可以换页和分栏。
  4. 标签可以自动计数吗?我想要它!而且最好可以灵活处理,毕竟有时候我想跳过一些数字或者重新开始计数
  5. 可以用诗歌verse环境实现吗?或者其他的封装方法?

一个效果图是这样:
efc62559cd8efe75c7f923433ef3b847.png
一个mwe像这样:
877f17bd7ac0e9bc0ec0cb1be7b63ba1.png

查看更多

关注者
0
被浏览
176
1 个回答
其实有点卡
其实有点卡 2天前
这家伙很懒,什么也没写!

大概写了一个:

\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}

image.png

细节的慢慢改吧(摊手

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览