列表环境(itemize),标签和内容之间有垂直线

列表环境(itemize),标签和内容之间有垂直线

是否可以有列表环境(itemize、enumerate等),其中标签(即项目符号/编号)和列表内容之间有一条垂直线?

也许最好使用图像来解释这一点,我想要实现这样的目标:

列表

编辑:关于预期行为的更多信息:如果发生分页符,则该行应该自然地在新页面上继续。

答案1

tcolorbox允许分页并且可高度定制的版本:

\documentclass{article}
\usepackage{tcolorbox}
\tcbuselibrary{skins,breakable}
\usepackage{lipsum}


\newtcolorbox{mybox}{
  freelance,
  breakable,
  colback=white,
  top=0pt,
  frame code={                          %%decoration code for unbreakable version
    \draw(frame.north west)--(frame.south west);
    \node[at=(frame.north west),anchor=north east,xshift=-5pt,circle,fill=black, inner sep=3pt]{};
  },
  extend freelancefirst={               %%decoration code for breakable version, first page
    frame code={
      \draw(frame.north west)--(frame.south west);
      \node[at=(frame.north west),anchor=north east,xshift=-5pt,circle,fill=black]{};
    },
  },
  extend freelancemiddle={              %%decoration code for breakable version, middle pages
    frame code={
      \draw(frame.north west)--(frame.south west);
    },
  },
  extend freelancelast={                %%decoration code for breakable version, last page
    frame code={
      \draw(frame.north west)--(frame.south west);
    },
  },
}

\newcommand{\myitem}[1]{\item\begin{mybox}#1\end{mybox}}
\begin{document}
\begin{itemize}
  \myitem{one line}
  \myitem{two

  lines}
  \myitem{\lipsum}
\end{itemize}

\end{document}

在此处输入图片描述

答案2

解决方案是mdframed,它还允许在项目中分页。但我并不赞同这种布局。

\documentclass{article}
\usepackage{lipsum,mdframed}

\mdfdefinestyle{litem}{
  skipabove=0pt,
  skipbelow=0pt,
  leftmargin=\dimexpr\leftmargini-\fboxrule-2pt\relax,
  rightmargin=0pt,
  innerleftmargin=2pt,
  innerrightmargin=0pt,
  innertopmargin=0pt,
  innerbottommargin=0pt,
  leftline=true,
  rightline=false,
  topline=false,
  bottomline=false,
}

\newenvironment{litemize}{\trivlist\item\relax}{\endtrivlist}
\newenvironment{litem}
  {%
   \par\addvspace{3\itemsep}
   \begin{mdframed}[style=litem]
   \makebox[0pt][r]{\textbullet\hspace{\dimexpr\labelsep+2pt+\fboxrule}}\ignorespaces
  }
  {%
   \end{mdframed}
  }

\begin{document}
\lipsum[2]
\begin{itemize}
\item a
\item b
\end{itemize}
Some text to separate the two environments
\begin{litemize}
  \begin{litem}
  \lipsum*[2]
  \end{litem}

  \begin{litem}
  \lipsum*[3]
  \end{litem}

  \begin{litem}
  A fairly small one!
  \end{litem}
\end{litemize}
\lipsum[4]
\end{document}

在此处输入图片描述

答案3

这是我的不太优雅而且很蹩脚解决方案:tabular在 itemize 中使用。

\documentclass{article}
\usepackage{lipsum}
\newcommand{\LinedItem}[1]{\item \begin{tabular}[t]{|p{10cm}}#1\end{tabular}}
\begin{document}
\lipsum[1]
\begin{itemize} 
    \LinedItem{\lipsum[2]}
    \LinedItem{\lipsum[3]}
    \LinedItem{A fairly small one!}
\end{itemize}
\lipsum[4]
\end{document}

在此处输入图片描述

我留给您测试的几个可能的更新是:除了p{10cm},尝试一些更通用的东西,例如p{\SomeInterestingWidth}。其次,您可以尝试使用其他软件包,例如tabularx来更改换行符中的行为。

相关内容