(我正在开发自己的小系统来获取我的 LaTeX 文件并将其转换为合理的 HTML 和 Epub。我遇到了以下问题。)
我希望我的tabular
s 保持非常简单。有些(标题)单元格我希望在空格处断开。
\begin{tabular}{lr}
& long column name \\
interesting & 2
\end{tabular}
在表格中使用\\
是危险的。我也不想让我的tabular
编程变得非常复杂。理想情况下,我想要一个宏
\begin{tabular}{lr}
& \cellspacebreak{long column name} \\
interesting & 2
\end{tabular}
可以将空格拆分为行,就像我有一样\begin{minipage}{\widestwidth} long\\column\\name \end{minipage}
。这在 LuaTeX 中可能更容易,但我需要一个适用于 pdfTeX 的解决方案。我还有一个偏好,但不是绝对的,就是坚持使用标准表格环境。这两者都是必需的,因为许多用户会使用它,而且他们可能没有最新的 TeX 安装或复杂程度。
这个存在吗?
答案1
这里有两个选项:
使用
\\
替换空格字符xstring
:\documentclass{article} \usepackage{xstring}% http://ctan.org/pkg/xstring % Ideas from Output generated macro content with newline (http://tex.stackexchange.com/q/124810/5764) \newcommand{\cellspacebreak}[1]{% \saveexpandmode\expandarg\exploregroups \StrSubstitute{#1}{ }{\noexpand\\}[\cellwithlinebreaks]% \restoreexpandmode% \show\cellwithlinebreaks \begin{tabular}[t]{@{}c@{}} \cellwithlinebreaks \end{tabular} } \begin{document} \begin{tabular}{lr} & \cellspacebreak{long column name} \\ interesting & 2 \end{tabular} \end{document}
如果项目符合以下条件,请使用 LaTeX3 迭代您的“空格分隔列表”:
\documentclass{article} \usepackage{xparse}% http://ctan.org/pkg/xparse \ExplSyntaxOn % Taken from How to iterate over a comma separated list? (http://tex.stackexchange.com/q/159118/5764) \NewDocumentCommand{\cellspacebreak}{ m } { \begin{tabular}[t]{@{}c@{}} \xyz_break_items:n { #1 } \end{tabular} } \seq_new:N \l_xyz_input_seq \cs_new_protected:Npn \xyz_break_items:n #1 { \seq_set_split:Nnn \l_xyz_input_seq { ~ } { #1 } \seq_use:Nn \l_xyz_input_seq { \\ } } \ExplSyntaxOff \begin{document} \begin{tabular}{lr} & \cellspacebreak{long column name} \\ interesting & 2 \end{tabular} \end{document}
在这两种情况下,输出类似于:
答案2
可能是A\Longstack
的问题。[l]
导致堆栈中的左对齐([c]
和[r]
也是用于居中和右对齐的选项)。我还需要在前导码中重置 longstack gapsize,因为\baselineskip
在 a 中设置为 0pt tabular
。默认\Longstack
使用空格作为行尾分隔符,除非使用\setstackEOL{\\}
或类似重新分配进行重置。
\documentclass{article}
\usepackage{stackengine}
\edef\tmp{\the\baselineskip}
\setstackgap{L}{\tmp}
\def\cellspacebreak{\Longstack[l]}
\begin{document}
\begin{tabular}{lr}
& \cellspacebreak{long column name} \\
interesting & 2
\end{tabular}
\end{document}
答案3
我不确定您是否真的在寻找一p{}
列,但至少对于您的示例表来说,这个基本解决方案就足够了:
\documentclass{article}
\begin{document}
\begin{tabular}{lp{1.5cm}}
& long column name \\
interesting & 2
\end{tabular}
\end{document}
请注意,在较宽的列内(p{5cm}
例如),您可以使用以下命令强制换行\newline
:
& long \newline column \newline name \\