笔记:我希望这可以成为“改用列表”评论的通用资源。如果您有改进建议,请告诉我。
我经常看到这样的评论
此布局应使用列表而不是 来排版
tabular
。
和(我最喜欢的,改述因为我现在找不到确切的引文)
如果每一个
tabularx
带有lX
序言的内容都是一个列表,那么世界将会变得更加美好。
这一切都很好,而且我可以看到它的好处(主要是:在“行”中间分页并且不需要专门的表格包)。
环境description
接近,但它具有固定的左缩进,不依赖于最长的项目名称。
这接受的答案在根据最宽的标签自动设置描述列表“标签宽度”?environ
展示了使用和包实现此目的的方法enumitem
。
您还使用了哪些其他方法来实现这种布局?我想避免手动指定最长标签(本质上是其宽度)。这是不需要tabularx
的,如果可以避免的话,我也不希望在解决这个问题时需要它。
或者,对于此类内容,还推荐哪些其他布局?常用文档元素的示例tabularx
包括命名法列表和其他符号列表。
平均能量损失
\documentclass{article}
\usepackage{tabularx}
\usepackage{lipsum} % just for blind texts
\newenvironment{mylist} % what else goes here?
{\trivlist}
{\endtrivlist}
\begin{document}
\section{trivlist version}
\begin{mylist}
\item[Text 2] \lipsum*[2]
\end{mylist}
\section{tabularx version}
\noindent
\begin{tabularx}{\textwidth}{@{}lX@{}}
Text 2 & \lipsum*[2]
\end{tabularx}
\section{description version}
\begin{description}
\item[Text 2] \lipsum*[2]
\end{description}
\end{document}
答案1
很难给出一个普遍的答案,但下面是我用列表回答过的一些表格问题(并非所有答案都被 OP 接受:-)通常可以使用自定义列表布局,它具有非常严格的表格外观,但具有技术优势,例如更容易分页,但有时决定不使用表格,您最终决定使用更流畅的布局,使用更标准的列表(或部分标题)布局。
关于最长标签的评论就是一个很好的例子。要测量最长的标签,您要么需要一个多遍解决方案,要么多次运行 latex(例如longtable
),要么在同一次运行中进行多次试验(例如tabularx
),这两种方法现在都相对容易(该environ
软件包使它很容易进行tabularx
- 就像试运行一样),但如果您说服自己更像标题的布局是合适的,那么问题就会神奇地消失,因为文本的缩进不受标签长度的控制。
答案2
我对所有列表和表格都是又爱又恨。它们都不能真正满足我所描述的情况,而这正是人们想要的,比如说,一个符号列表。
这是一种简单的方法,确实需要人们弄清楚哪个条目“标签”是最长的,但它可以很好地跨页面分解,因为每个条目都是一个段落,而且如果确实得到一个很长的“标签”,它总是可以打包成\parbox
顶部对齐。
\documentclass{article}
\newlength\mylistindent
\newcommand{\mylist}[1]{\par\addvspace{2pt}
\noindent \hangindent\mylistindent
\makebox[\mylistindent]{\hfill #1\enspace}\ignorespaces
}
\begin{document}
\thispagestyle{empty}
\settowidth\mylistindent{the longest\kern.5em}
\mylist{First} this is the text for the first item.
\mylist{Second} this is the text for the second item. It is
very long, and may require several lines.
\mylist{Another} one more here
\mylist{the longest} this one has both a long label and a
long text. it keeps going on, and on, and on, and on,
and on, \ldots
\mylist{Final} one more to finish off.
\medskip
\noindent
You'll need to put in some explicit space at the end.
\end{document}
您想让条目左对齐吗?只需将其移至\hfill
开头即可。
您想要条目之间有更多(或更少)空间吗?只需修改\addvspace
。
通常包含在符号列表中的数据类型几乎是乞求的
\raggedright
(或其对应部分ragged2e
),所以不要排除这种可能性。
一切都在你的掌控之中。