是否可以在 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”的副产品。