如何在不修改数据输入的情况下将两行 2 列合并为一行 4 列?

如何在不修改数据输入的情况下将两行 2 列合并为一行 4 列?

在此处输入图片描述

一开始我设计了一个表格,里面有大量的首字母缩略词。该表格有两列,占\textwidth,如下所示。

\documentclass{article}

\usepackage{longtable,array,xcolor}
\renewcommand*\arraystretch{10}
\newcounter{counter}


\newcolumntype\specifier{%
    |>{\centering\selectfont\stepcounter{counter}\thecounter}m{1cm}
    |>{\centering}m{\dimexpr\linewidth-1cm-4\tabcolsep-3\arrayrulewidth\relax}
    |}

\def\row[#1]#2{& #1 \par \vspace{15pt} \textcolor{red}{#2} \tabularnewline\hline}


\begin{document}
\begin{longtable}{\specifier}\hline
\row[RAM]{Random Access Memory}
\row[BIOS]{Basic Input Output System}
\row[OMG]{Oh My Ghost}
\row[PS]{Post Script}
% and many more 
\end{longtable}
\end{document}

在此处输入图片描述

后来我觉得不经济,太浪费纸张了,我的新方案是把两行连续的合并成一行4列,如下图。

在此处输入图片描述

限制和问题

首先,我有大量以下条目。

\row[RAM]{Random Access Memory}
\row[BIOS]{Basic Input Output System}
\row[OMG]{Oh My Ghost}
\row[PS]{Post Script}

第二,我懒得用regex(把这些条目投影到其他形式中)。

是否有一个技巧可以实现我上述的想法而不需要修改上面给出的大量条目?

答案1

\documentclass{article}

\usepackage{longtable,array,xcolor}
\renewcommand*\arraystretch{10}
\newcounter{counter}


\newcolumntype\specifier{|%
*2{
    >{\centering\selectfont\stepcounter{counter}\thecounter}m{1cm}
    |>{\centering}m{\dimexpr.5\linewidth-1cm-4\tabcolsep-3\arrayrulewidth\relax}
    |}
}

\makeatletter
\def\row[#1]#2{%
& #1 \par \vspace{15pt} \textcolor{red}{#2} 
\ifodd\value{counter}
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
{&}{\tabularnewline\hline}
}

\let\oldendlongtable\endlongtable
\def\endlongtable{%
\ifodd\value{counter}\omit\tabularnewline\cline{1-2}\fi
\oldendlongtable}


\begin{document}
\begin{longtable}{\specifier}\hline
\row[RAM]{Random Access Memory}
\row[BIOS]{Basic Input Output System}
\row[OMG]{Oh My Ghost}
\row[PS]{Post Script}
% and many more 
\end{longtable}
\end{document}

enter image description here

相关内容