声明整数数组

声明整数数组

是否可以在 TeX 中声明整数数组?我想做的是为跨多列和(或)多页的非常长的表格声明新的表格环境。我当前的解决方案如下所示(简化):

\begin{tabular}{>{\ttfamily}p{2cm}>{\ttfamily}p{2cm}>{\ttfamily}p{2cm}}
    \toprule
    \myth{Začiatok úseku}&\myth{Koniec úseku}&\myth{Hodnota} \\
    \midrule
    \partialinput{2}{27}{data/KrivkaTvorivosti.csv}
    \bottomrule
\end{tabular}

\begin{tabular}{>{\ttfamily}p{2cm}>{\ttfamily}p{2cm}>{\ttfamily}p{2cm}}
    \toprule
    \myth{Začiatok úseku}&\myth{Koniec úseku}&\myth{Hodnota} \\
    \midrule
    \partialinput{28}{53}{data/KrivkaTvorivosti.csv}
    \bottomrule
\end{tabular}

\begin{tabular}{>{\ttfamily}p{2cm}>{\ttfamily}p{2cm}>{\ttfamily}p{2cm}}
    \toprule
    \myth{Začiatok úseku}&\myth{Koniec úseku}&\myth{Hodnota} \\
    \midrule
    \partialinput{54}{79}{data/KrivkaTvorivosti.csv}
    \bottomrule
\end{tabular}

宏 partialinput 定义这里。在表格环境中定义的长表的每个部分都会根据行索引读取外部 CSV 文件的特定部分。与纯 LaTeX 相比,这相对方便,但对于由许多部分组成的非常长的表格,正确设置每个部分的开始和结束行索引是一项繁琐的任务。随着部分数量的增加,我在某个地方犯错的概率也会增加。如果在开头的某个地方犯错,我不得不重新计算后面所有部分的行索引。目前我打印的长表由 12 个部分组成!有时必须将内容向上或向下移动几行,每次我都必须经过 12 个表格环境并计算正确的索引。我最好为每个部分声明一个包含行数的数组,例如

\DeclareArray SectionLengths={20,20,20,20,30,30,30,30,10,10,10,10}

并定义新的环境 longtabular,它将遍历此数组并自动计算当前部分的开始和结束行索引。使用 TeX 或 LaTeX 是否可行?

答案1

这是一种可能性expl3

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[slovak]{babel}

\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\declarechunks}{m}
 {
  \seq_set_from_clist:Nn \g_truth_chunks_seq { #1 }
 }

\NewDocumentCommand{\partialtable}{}
 {
  \int_gincr:N \g_truth_arrayindex_int
  \int_gset:Nn \g_truth_start_int { \g_truth_end_int + 1 }
  \int_gadd:Nn \g_truth_end_int
   {
    \seq_item:Nn \g_truth_chunks_seq { \g_truth_arrayindex_int }
   }
  \truth_partial_table:VV \g_truth_start_int \g_truth_end_int
 }

\cs_new_protected:Npn \truth_partial_table:nn #1 #2
 {
\tl_to_str:n {% <--------------- remove this line
  \begin{tabular}{>{\ttfamily}p{2cm}>{\ttfamily}p{2cm}>{\ttfamily}p{2cm}}
    \toprule
    \myth{Začiatok~úseku}&\myth{Koniec~úseku}&\myth{Hodnota} \\
    \midrule
    \partialinput{#1}{#2}{data/KrivkaTvorivosti.csv}
    \bottomrule
  \end{tabular}
}% <------------------ remove this line
 }

\cs_generate_variant:Nn \truth_partial_table:nn { VV }
\seq_new:N \g_truth_chunks_seq
\int_new:N \g_truth_arrayindex_int
\int_new:N \g_truth_start_int
\int_new:N \g_truth_end_int

\ExplSyntaxOff

\declarechunks{20,12,13,15,2}

\begin{document}

\ttfamily\footnotesize

\partialtable

\partialtable

\partialtable

\partialtable

\partialtable

\end{document}

\declarechunks命令指出了每个命令应打印的行数\partialtable

\partialtable被调用时,索引计数器会步进,起点设置为前一个终点加一,终点设置为前一个终点加上块的当前长度之和。

然后调用内部函数\truth_partial_table:VV,这样\partialinput就会“看到”明确的值。

我以前\tl_to_str:n只是展示调用,因为我无法模拟您的设置。删除标记的两行,不用担心下面出现的奇怪字母,它们只是“字符串化 UTF-8”的副产品。

在此处输入图片描述

相关内容