替换 \vbox{\hbox{...}\hbox{...}\hbox{...}\hbox{...}\hbox{...}...} 的环境

替换 \vbox{\hbox{...}\hbox{...}\hbox{...}\hbox{...}\hbox{...}...} 的环境

我正在使用 LaTeX (实际上是 LuaLaTeX),最近我发现自己经常这样做:

\vbox{%
    \hbox{\strut foo}%
    \hbox{\strut bar}%
    \hbox{\strut baz}%
}

我在表格环境、浮动、标题页甚至普通文本中使用它。当我这样做时foobarbaz总是比例如短很多\linewidth。我发现这是获得我想要的东西的最简单和最快捷的方法。在特殊场合,当有很多项目需要显示时,我会求助于\tabular{l}

从用户的角度来看,这两种构造看起来都不是 LaTeX 应该的工作方式。是否有某种环境或任何东西可以用来实现与上面 5 行相同的效果?当然有,例如所有的 itemize,但它们都有一些边距/填充/缩进魔法,最终总是让我想使用 Word。我的\vbox- \hbox-\strut构造在我的 100% 用例中始终按预期工作。

答案1

也许某种“长”(固定基线跳过值的行)堆栈可以满足您的需要。

\documentclass{article}
\usepackage{stackengine}
\setstackEOL{$}
\setstackgap{L}{\normalbaselineskip}
\strutlongstacks{T}
\begin{document}
\begin{tabular}{|l|l|}
\hline
\Longstack[l]{foo$  bar$  baz} & text\\
\hline
\Centerstack[l]{foo$  bar$  baz} & text\\
\hline
\Longunderstack[l]{foo$  bar$  baz} & text\\
\hline
\end{tabular}
\end{document}

在此处输入图片描述

答案2

如果您想将当前构造写得更短,请使用\halign(并考虑使用纯 TeX)。

\documentclass{article}
\begin{document}
\halign{#\crcr foo\cr bar\cr baz\cr}
\end{document}

在此处输入图片描述

答案3

\input expl3-generic

\ExplSyntaxOn

\cs_new_protected:Npn \vboxofhboxes #1
 {
  \vbox:n
   {
    \clist_map_inline:nn { #1 }
     {
      \hbox:n { \strut ##1 }
     }
   }
 }

\ExplSyntaxOff

\vboxofhboxes{
  foo,
  bar,
  baz,
  OK
}

\bye

在此处输入图片描述

我真的看不出有什么优势

\begin{tabular}{@{}l@{}}
foo \\
bar \\
baz
\end{tabular}

或类似的 Plain TeX 构造。

相关内容