如何实现常见的布局而不是滥用表格环境?

如何实现常见的布局而不是滥用表格环境?

笔记:我希望这可以成为“改用列表”评论的通用资源。如果您有改进建议,请告诉我。


我经常看到这样的评论

此布局应使用列表而不是 来排版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),所以不要排除这种可能性。

一切都在你的掌控之中。

相关内容