合并多个不同的表记录。// 拆分表中的表记录

合并多个不同的表记录。// 拆分表中的表记录

上下文 假设我们有 2 个团体聚会,分别是红色和蓝色。它们有不同的子部分:红色、蓝色。在每个相应的子部分中,都有一个包含相同信息的表格。时刻(计数数字)、日期、类型(红色或蓝色)、主题。

我有 2 个表,想生成第 3 个表;或者我有 1 个表,想生成另外 2 个表

期望结果开始

1 张桌子

\begin{table}[]
\begin{tabular}{llll}
Moment & Date & Type & subject\\
  1 &    \now{}    &  RED    &   Pie
  2 &    \now{}    &  BLUE &   Pie         
  3 &    \now{}    &  RED    &   Apple
  4 &    \now{}    &  BLUE &   Apple
\end{tabular}
\end{table}

\begin{table}[]
\begin{tabular}{llll}
Moment & Date & Type & subject\\

\end{tabular}
\end{table}

2 张桌子

\begin{table}[]
\begin{tabular}{llll}
Moment & Date & Type & subject\\
  1 &    \now{}    &  RED    &   Pie     
  3 &    \now{}    &  RED    &   Apple
\end{tabular}
\end{table}

\begin{table}[]
\begin{tabular}{llll}
Moment & Date & Type & subject\\
  2 &    \now{}    &  BLUE &   Pie     
  4 &    \now{}    &  BLUE &   Apple
\end{tabular}
\end{table}

期望结果结束

希望 1 生成其他 2 个。或者 1 是在 2 个之前生成的

答案1

分裂

我建议使用pgfplotstable并从用创建的文本文件开始filecontents

pgfplotstable有一个选项row predicate允许您在每一行执行一些代码。\pgfplotstablegetelem{#1}{Type}\of\mytable您可以使用它获取当前行的“类型”列的值\pgfplotsretval

然后您可以使用包\ifdefstringetoolbox测试该值并设置\pgfplotstableuserowfalse何时不想显示该行。

由于您没有发布完整的 MWE 并且我不知道\now宏,所以我使用了包\today中的宏datetime

\documentclass{article}
\usepackage{array}
\usepackage{booktabs}
\usepackage{pgfplotstable} 
\pgfplotsset{compat=1.16}
\pgfplotstableset{
    string type,
    column type=l,
    every head row/.style={
        before row=\toprule,
        after row=\midrule,
    },
    every last row/.style={
        after row=\bottomrule
    },  
}

\usepackage{etoolbox}

\usepackage[yyyymmdd]{datetime}

\usepackage{filecontents}

\begin{document}

\begin{filecontents}{mytable.dat}
    Moment  Date  Type  subject
    1     {\today}      RED       Pie
    2     {\today}      BLUE    Pie         
    3     {\today}      RED       Apple
    4     {\today}      BLUE    Apple
\end{filecontents}

\pgfplotstableread{mytable.dat}{\mytable}

Whole table:\bigskip

\pgfplotstabletypeset{\mytable}

\bigskip\bigskip Table with only rows with column ``Type''=BLUE:\bigskip

\pgfplotstabletypeset[
    row predicate/.code={%
        \pgfplotstablegetelem{#1}{Type}\of\mytable%
        \ifdefstring{\pgfplotsretval}{BLUE}{}{\pgfplotstableuserowfalse}%
    },
    ]{\mytable}

\bigskip\bigskip Table with only rows with column ``Type''=RED:\bigskip

\pgfplotstabletypeset[
    row predicate/.code={%
        \pgfplotstablegetelem{#1}{Type}\of\mytable%
        \ifdefstring{\pgfplotsretval}{RED}{}{\pgfplotstableuserowfalse}%
    },
    ]{\mytable}
\end{document}

在此处输入图片描述

合并

这甚至更简单。您可以使用 创建两个文本文件filecontents,一个包含“蓝色”行,另一个包含“红色”行,您可以分别对它们进行排版,也可以使用 合并它们\pgfplotstablevertcat,如果需要,还可以使用 对它们进行排序\pgfplotstablesort

\documentclass{article}
\usepackage{array}
\usepackage{booktabs}
\usepackage{pgfplotstable} 
\pgfplotsset{compat=1.16}
\pgfplotstableset{
    string type,
    column type=l,
    every head row/.style={
        before row=\toprule,
        after row=\midrule,
    },
    every last row/.style={
        after row=\bottomrule
    },  
}

\usepackage{etoolbox}

\usepackage[yyyymmdd]{datetime}

\usepackage{filecontents}

\begin{document}

\begin{filecontents}{mytableblue.dat}
    Moment  Date  Type  subject
    2     {\today}      BLUE    Pie         
    4     {\today}      BLUE    Apple
\end{filecontents}

\begin{filecontents}{mytablered.dat}
    Moment  Date  Type  subject
    1     {\today}      RED       Pie
    3     {\today}      RED       Apple
\end{filecontents}

\pgfplotstableread{mytableblue.dat}{\mytable}
\pgfplotstableread{mytableblue.dat}{\mytableblue}
\pgfplotstableread{mytablered.dat}{\mytablered}

Whole table:\bigskip

\pgfplotstablevertcat{\mytable}{\mytablered}
\pgfplotstablesort[sort key={Moment}]\mytable\mytable
\pgfplotstabletypeset{\mytable}

\bigskip\bigskip Table with only rows with column ``Type''=BLUE:\bigskip

\pgfplotstabletypeset{\mytableblue}

\bigskip\bigskip Table with only rows with column ``Type''=RED:\bigskip

\pgfplotstabletypeset{\mytablered}

\end{document}

结果和以前一样。

相关内容