在 PDF 中创建特定的(局部垂直优先)单元格突出显示顺序

在 PDF 中创建特定的(局部垂直优先)单元格突出显示顺序

我有一张带有一堆拆分单元格(或大\multirow单元格,取决于人们如何看待它)的表格。这是一个最小示例,对于我需要表格的设置:

\documentclass{memoir}
\usepackage{float}
\usepackage{arydshln}

\newcommand{\colheading}[1]{\textrm{\fontfamily{ppl}\selectfont#1}}
\newcommand{\specialcell}[1]{\begin{tabular}[t]{@{}l@{}}#1\end{tabular}} % for multi-row cells, adapted from user @egreg's answer to http://tex.stackexchange.com/questions/2441/how-to-add-a-forced-line-break-inside-a-table-cell

\begin{document}

\begin{Spacing}{1}
\begin{table}[H]
  \caption{Selection of popular Linux distributions}
  \begin{center}
  \begin{small}
  \begin{tabular}{|l|l|l|}
    \hline
      \colheading{name of distribution} & \colheading{\specialcell{abbreviated \\ name}} & \colheading{inventor} \\
    \hline
      Debian GNU/Linux & Debian & Ian Murdock \\
    \hline
      \specialcell{Red Hat \\ Enterprise Linux} & RHEL & \specialcell{Red Hat, \\ Inc.} \\
    \cdashline{1-2}[.4pt/1pt]
      \specialcell{\ \ \textit{formerly:} \\ \ \ Red Hat Linux \\ \ \ Advanced Server} & \ \ --- & {} \\
    \hline
      Slackware & --- & \specialcell{Patrick \\ Volkerding} \\
    \hline
  \end{tabular}
  \end{small}
  \end{center}
\end{table}
\end{Spacing}

\end{document}

(1. 从概念上讲,一些东西(例如列标题的特殊字体)不是必需的,但如果解决方案适用于非平凡/非最小设置,那就太好了。2. 请不要修改单元格内容:有些事情(例如,中间行簇的单元格不是定义列宽的最长的单元格)是故意的。)

布局是有效的:从视觉上看,一切都符合我的要求。然而,当我在编译的 PDF 文件中选择文本时,我想要的某种突出显示顺序还不够正确。PDF 文件中单元格的当前突出显示选择顺序

“Red Hat Enterprise Linux”→“RHEL”→“Red Hat,Inc.”→“以前是 [...]”→“---”。

然而我想要:

“Red Hat Enterprise Linux”→“以前 [...]”→“RHEL”→“---”→“Red Hat, Inc.”

我尝试了很多方法,包括\multirow\minipage以及将列长度存储在某个地方(\newlength{\colwidthColumnnumber} \settowidth{\colwidthColumnnumber}{Debian GNU/Linux})的技巧,但总有一些东西不起作用。我得到:

  • 分割单元格的点太短,没有覆盖整个单元格宽度
  • 单元格中出现多余的空行
  • \\涉及/ &/的错误消息\cr
  • 垂直条缺失或加倍

顺便说一句,看来应用于\cdashline单个列的正确方法是写\cdashline{1-1},而不是\cdashline{1}

有没有一种简单的方法可以保持当前的精确视觉外观(单元格布局和内容),只是单元格选择顺序不同这可能涉及更多地使用子表。

注意:通常\specialcell-trick(参见我的代码;它是用户 @egreg 的另一个问题的解决方案的变体)就足够了。虚线(来自包arydshln)使事情变得复杂,并且需要更通用的处理。

答案1

要保持特定的选择顺序,您必须同时设置整个单元格的内容,然后再移动到下一个单元格。我在以下示例中通过将单元格结构包装在 中来实现这一点\smash。这样可以设置任意多的内容,而不会影响 的其余部分tabular[t]的操作对齐\specialcell很有帮助,我已经用一些空行更正了任何溢出:

在此处输入图片描述

\documentclass{memoir}% http://ctan.org/pkg/memoir
\usepackage{float,arydshln}% http://ctan.org/pkg/{float,arydshln}

\newcommand{\colheading}[1]{\textrm{\fontfamily{ppl}\selectfont#1}}
\newcommand{\specialcell}[1]{\begin{tabular}[t]{@{}l@{}}#1\end{tabular}} % http://tex.stackexchange.com/q/2441/5764

\begin{document}

\begin{Spacing}{1}
\begin{table}[H]
  \caption{Selection of popular Linux distributions}
  \centering\small
  \begin{tabular}{|l|l|l|}
    \hline
      \colheading{name of distribution} & \colheading{\specialcell{abbreviated \\ name}} & \colheading{inventor} \\
    \hline
      Debian GNU/Linux & Debian & Ian Murdock \\
    \hline
      \smash{\specialcell{Red Hat \\ Enterprise Linux \\ \quad \textit{formerly:} \\ \quad Red Hat Linux \\ \quad Advanced Server}} & 
        \smash{\specialcell{RHEL \\ \\ \quad ---}} & \specialcell{Red Hat, \\ Inc.} \\
    \cdashline{1-2}[.4pt/1pt]
      & & \\
      & & \\
      & & \\
    \hline
      Slackware & --- & \specialcell{Patrick \\ Volkerding} \\
    \hline
  \end{tabular}
\end{table}
\end{Spacing}

\end{document}

请注意,我已删除center环境以代替\centering。请参阅我应该使用centercentering来制作图表和表格吗?

相关内容