自定义枚举列表:将枚举标签对齐到文本中心

自定义枚举列表:将枚举标签对齐到文本中心

我正在尝试创建一个新的枚举列表,并以自定义形状作为其标签。我想要:

目标1.标签与文本居中对齐。(下图上部)

目标2.圆圈后的垂直线跨越了文本的高度。(下图)

fancylist 演示

在下面的 MWE 中,我使用enumitem包实现了基本设计。但是,我很难让标签正确对齐。

\documentclass{article}
\usepackage{enumitem}
\usepackage{tikz}

\newcounter{fancycount}
\let\realitem\item
\newcommand\fakeitem[1][\relax]{
    \refstepcounter{fancycount}
    \realitem[\tikz{\node[circle, draw=green, minimum width=1cm, fill=green, anchor=west](a){\LARGE\arabic{fancycount}}; \draw[very thick, green] ([xshift=1cm]a.north) -- ([xshift=1cm]a.south)}#1]
}


\newlist{fancylist}{enumerate}{1}

\setlist[fancylist]{
    label=\arabic*.,   % label format
    leftmargin=*,      % indent labels
    before=\let\item\fakeitem,
}

\begin{document}

\begin{fancylist}
    \item This is point 1.
    \item This is point 2.
    \item This is a big point which goes on for lines....\\
    too many lines \\
    and some more lines \\
    ends finally. 
\end{fancylist}

\end{document} 

MWE 生成以下输出:

现在的幻想列表

有没有办法实现目标 1 和目标 2(或至少其中之一)?感谢您的帮助。

答案1

新的解决方案

这是一个全新的解决方案,使用tcolorbox

这个解决方案可以满足你们两个目标。

您可以调整尺寸和长度以适合您的喜好。


\documentclass{article}

\RequirePackage[most]{tcolorbox}

\usepackage{lipsum}

\newcounter{fancycount}

\newenvironment{fancyenumerate}{%
  \setcounter{fancycount}{0}
  \begin{tcbitemize}[raster columns=1,    
    nofloat,
    enhanced,
    raster left skip=15.0mm,
    sharp corners=all,
    colback=white,
    colframe=green,
    toprule=0.0mm,
    bottomrule=0.0mm,
    leftrule=1.0mm,
    rightrule=0.0mm,
    boxsep=0.005\textwidth,
    valign=center,
    overlay={\coordinate (X) at ([xshift=-7.50mm]frame.west);
      \node[draw,circle,minimum width=10.0mm,inner sep=0pt,color=green,fill=green,text=black] at (X) {\refstepcounter{fancycount}\LARGE\arabic{fancycount}};}]}{\end{tcbitemize}}

\begin{document}

\section{First List}

\begin{fancyenumerate}
  \tcbitem Short.  

  \tcbitem Middle middle middle middle middle middle middle
  middle middle middle middle.  

  \tcbitem \textbf{Long} \lipsum[1]
\end{fancyenumerate}

\section{Another List, Check that the Counter is Being Reset Properly}

\begin{fancyenumerate}
  \tcbitem One.

  \tcbitem Two\\ii,\\ II,\\ and 2.

  \tcbitem Three.

  \tcbitem Four.
\end{fancyenumerate}

\end{document}

在此处输入图片描述

原始解决方案

我正在使用\adjustbox垂直居中项目标签。我不喜欢较长的文本项目必须放在 中的想法 minipage。让我看看我是否可以自动执行此操作。


\documentclass{article}
\usepackage{enumitem}
\usepackage{tikz}

\newcounter{fancycount}
\let\realitem\item
\newcommand\fakeitem[1][\relax]{
    \refstepcounter{fancycount}
    \realitem[\adjustbox{valign=c}{\tikz{\node[circle, draw=green, minimum width=1cm, fill=green, anchor=west](a){\LARGE\arabic{fancycount}}; \draw[very thick, green] ([xshift=1cm]a.north) -- ([xshift=1cm]a.south)}#1}]
}


\newlist{fancylist}{enumerate}{1}

\setlist[fancylist]{
    label=\arabic*.,   % label format
    leftmargin=*,      % indent labels
    before=\let\item\fakeitem,
}

\usepackage{adjustbox}

\begin{document}

\begin{fancylist}
    \item This is point 1.

    \item This is point 2.
    \item \begin{minipage}[c]{0.8\linewidth}
        This is a big point which goes\\ on for lines....  too many
        lines and\\ some more lines ends finally.
      \end{minipage}

\end{fancylist}

\end{document}

在此处输入图片描述

相关内容