是否可以有列表环境(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
来更改换行符中的行为。