cellspacebreak 宏

cellspacebreak 宏

(我正在开发自己的小系统来获取我的 LaTeX 文件并将其转换为合理的 HTML 和 Epub。我遇到了以下问题。)

我希望我的tabulars 保持非常简单。有些(标题)单元格我希望在空格处断开。

\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

这里有两个选项:

  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}
    
  2. 如果项目符合以下条件,请使用 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 \\

相关内容