enumerate 环境的默认编号对齐方式是编号右对齐,内容左对齐,如下图 调用 enumitem 宏包,然后设置选项 align=left,可以实现编号和内容都左对齐,如下图但是其中的编号 9 和内容之间的距离过大,我想得到如下的效果,该如何设置呢?

LaTeX 的列表内容与页面的左右间距是通过 \parshape 实现的。因此解决这个问题的想法是,量取每一个编号的宽度,动态地调整 \parshape 的缩进。可以通过 enumitem 包的 \SetLabelAlign 定义一个特殊的对齐方式来实现。
\documentclass{article}

\usepackage{enumitem}

\makeatletter

%% 定义对齐方式 hang
\SetLabelAlign{hang}{%
  #1%
  \aftergroup\adjustparshapeindent}
%% 编号 #1 会通过 \sbox 存到 \@tempboxa 中,为避免全局设置,
%% 需要用 \aftergroup 跳到盒子外部来设置
\newcommand*\adjustparshapeindent{%
  \@ifnextchar\egroup
    {\aftergroup\adjustparshapeindent}
    {\adjustparshapeindent@auxi}}
\newcommand*\adjustparshapeindent@auxi{%
  \unless\ifdim\wd\@tempboxa=\labelwidth
    \adjustparshapeindent@auxii
  \fi}
%% 调整 \parshape 的缩进
\newcommand*\adjustparshapeindent@auxii{%
  \dimen@ = \dimexpr\wd\@tempboxa-\labelwidth\relax
  \labelwidth = \wd\@tempboxa
  \advance\linewidth -\dimen@
  \advance\leftmargin \dimen@
  \advance\@totalleftmargin \dimen@
  \parshape \@ne \@totalleftmargin \linewidth}

\makeatother

\begin{document}

\begin{enumerate}[align=hang, start=9]
\item test\\test
\item test\\test
\end{enumerate}

\end{document}
效果图: style1_list选自:https://www.zhihu.com/question/53242822/answer/134167664

点赞(2)

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部