文件大小命令量依赖吗?

文件大小命令量依赖吗?

在写简历时,我决定将 tex 文件与内容分开。我将内容复制到 csv 文件中,以便用 加载它datatool

但这大大增加了 PDF 的大小:

  1. 直接以 tex 代码完成内容。大小:101 KB。
  2. 将内容外部化为 csv 文件。大小:5.093 kb。

使用 pdflatex 编译的 MWE:

\documentclass{scrreprt}

\usepackage[T1]{fontenc}% Use 8-bit encoding that has 256 glyphs
\usepackage[utf8]{inputenc}% Uses the utf8 input encoding
\usepackage{datatool}
\usepackage{filecontents}% added to write additional files.
\usepackage{hyperref}

% Massive lines to show the differences in this file
\begin{document}
\begin{filecontents}{dbload.tex}
\DTLloadrawdb[keys={c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c20,c21,c22,c23,c24,c25}]{cv}{./cvtestdatabase.csv}
\FPupn{langselectkey}{langselect 7 + 0 round}
\DTLgetvalueforkey{\Langaugecode}{c\langselectkey}{cv}{c1}{Langaugecode}
\typeout{Loading A}
\DTLgetvalueforkey{\chapterAtestaaaa}{c\langselectkey}{cv}{c1}{chapterAtestaaaa}
\DTLgetvalueforkey{\chapterAtestaaab}{c\langselectkey}{cv}{c1}{chapterAtestaaab}
\DTLgetvalueforkey{\chapterAtestaaac}{c\langselectkey}{cv}{c1}{chapterAtestaaac}
\DTLgetvalueforkey{\chapterAtestaaad}{c\langselectkey}{cv}{c1}{chapterAtestaaad}
\DTLgetvalueforkey{\chapterAtestaaae}{c\langselectkey}{cv}{c1}{chapterAtestaaae}
\DTLgetvalueforkey{\chapterAtestaaaf}{c\langselectkey}{cv}{c1}{chapterAtestaaaf}
\DTLgetvalueforkey{\chapterAtestaaag}{c\langselectkey}{cv}{c1}{chapterAtestaaag}
\DTLgetvalueforkey{\chapterAtestaaah}{c\langselectkey}{cv}{c1}{chapterAtestaaah}
\DTLgetvalueforkey{\chapterAtestaaai}{c\langselectkey}{cv}{c1}{chapterAtestaaai}
\DTLgetvalueforkey{\chapterAtestaaaj}{c\langselectkey}{cv}{c1}{chapterAtestaaaj}
\DTLgetvalueforkey{\chapterAtestaaak}{c\langselectkey}{cv}{c1}{chapterAtestaaak}
\DTLgetvalueforkey{\chapterAtestaaal}{c\langselectkey}{cv}{c1}{chapterAtestaaal}
\DTLgetvalueforkey{\chapterAtestaaam}{c\langselectkey}{cv}{c1}{chapterAtestaaam}
\typeout{Loading B}
\DTLgetvalueforkey{\chapterBtestaaaa}{c\langselectkey}{cv}{c1}{chapterBtestaaaa}
\DTLgetvalueforkey{\chapterBtestaaab}{c\langselectkey}{cv}{c1}{chapterBtestaaab}
\DTLgetvalueforkey{\chapterBtestaaac}{c\langselectkey}{cv}{c1}{chapterBtestaaac}
\DTLgetvalueforkey{\chapterBtestaaad}{c\langselectkey}{cv}{c1}{chapterBtestaaad}
\DTLgetvalueforkey{\chapterBtestaaae}{c\langselectkey}{cv}{c1}{chapterBtestaaae}
\DTLgetvalueforkey{\chapterBtestaaaf}{c\langselectkey}{cv}{c1}{chapterBtestaaaf}
\DTLgetvalueforkey{\chapterBtestaaag}{c\langselectkey}{cv}{c1}{chapterBtestaaag}
\DTLgetvalueforkey{\chapterBtestaaah}{c\langselectkey}{cv}{c1}{chapterBtestaaah}
\DTLgetvalueforkey{\chapterBtestaaai}{c\langselectkey}{cv}{c1}{chapterBtestaaai}
\DTLgetvalueforkey{\chapterBtestaaaj}{c\langselectkey}{cv}{c1}{chapterBtestaaaj}
\DTLgetvalueforkey{\chapterBtestaaak}{c\langselectkey}{cv}{c1}{chapterBtestaaak}
\DTLgetvalueforkey{\chapterBtestaaal}{c\langselectkey}{cv}{c1}{chapterBtestaaal}
\DTLgetvalueforkey{\chapterBtestaaam}{c\langselectkey}{cv}{c1}{chapterBtestaaam}
\DTLgetvalueforkey{\chapterBtestaaan}{c\langselectkey}{cv}{c1}{chapterBtestaaan}
\DTLgetvalueforkey{\chapterBtestaaao}{c\langselectkey}{cv}{c1}{chapterBtestaaao}
\DTLgetvalueforkey{\chapterBtestaaap}{c\langselectkey}{cv}{c1}{chapterBtestaaap}
\DTLgetvalueforkey{\chapterBtestaaaq}{c\langselectkey}{cv}{c1}{chapterBtestaaaq}
\DTLgetvalueforkey{\chapterBtestaaar}{c\langselectkey}{cv}{c1}{chapterBtestaaar}
\DTLgetvalueforkey{\chapterBtestaaas}{c\langselectkey}{cv}{c1}{chapterBtestaaas}
\DTLgetvalueforkey{\chapterBtestaaat}{c\langselectkey}{cv}{c1}{chapterBtestaaat}
\DTLgetvalueforkey{\chapterBtestaaau}{c\langselectkey}{cv}{c1}{chapterBtestaaau}
\DTLgetvalueforkey{\chapterBtestaaav}{c\langselectkey}{cv}{c1}{chapterBtestaaav}
\DTLgetvalueforkey{\chapterBtestaaaw}{c\langselectkey}{cv}{c1}{chapterBtestaaaw}
\DTLgetvalueforkey{\chapterBtestaaax}{c\langselectkey}{cv}{c1}{chapterBtestaaax}
\DTLgetvalueforkey{\chapterBtestaaay}{c\langselectkey}{cv}{c1}{chapterBtestaaay}
\DTLgetvalueforkey{\chapterBtestaaaz}{c\langselectkey}{cv}{c1}{chapterBtestaaaz}
\DTLgetvalueforkey{\chapterBtestaaba}{c\langselectkey}{cv}{c1}{chapterBtestaaba}
\DTLgetvalueforkey{\chapterBtestaabb}{c\langselectkey}{cv}{c1}{chapterBtestaabb}
\DTLgetvalueforkey{\chapterBtestaabc}{c\langselectkey}{cv}{c1}{chapterBtestaabc}
\DTLgetvalueforkey{\chapterBtestaabd}{c\langselectkey}{cv}{c1}{chapterBtestaabd}
\DTLgetvalueforkey{\chapterBtestaabe}{c\langselectkey}{cv}{c1}{chapterBtestaabe}
\DTLgetvalueforkey{\chapterBtestaabf}{c\langselectkey}{cv}{c1}{chapterBtestaabf}
\DTLgetvalueforkey{\chapterBtestaabg}{c\langselectkey}{cv}{c1}{chapterBtestaabg}
\DTLgetvalueforkey{\chapterBtestaabh}{c\langselectkey}{cv}{c1}{chapterBtestaabh}
\DTLgetvalueforkey{\chapterBtestaabi}{c\langselectkey}{cv}{c1}{chapterBtestaabi}
\DTLgetvalueforkey{\chapterBtestaabj}{c\langselectkey}{cv}{c1}{chapterBtestaabj}
\DTLgetvalueforkey{\chapterBtestaabk}{c\langselectkey}{cv}{c1}{chapterBtestaabk}
\DTLgetvalueforkey{\chapterBtestaabl}{c\langselectkey}{cv}{c1}{chapterBtestaabl}
\DTLgetvalueforkey{\chapterBtestaabm}{c\langselectkey}{cv}{c1}{chapterBtestaabm}
\DTLgetvalueforkey{\chapterBtestaabn}{c\langselectkey}{cv}{c1}{chapterBtestaabn}
\DTLgetvalueforkey{\chapterBtestaabo}{c\langselectkey}{cv}{c1}{chapterBtestaabo}
\DTLgetvalueforkey{\chapterBtestaabp}{c\langselectkey}{cv}{c1}{chapterBtestaabp}
\DTLgetvalueforkey{\chapterBtestaabq}{c\langselectkey}{cv}{c1}{chapterBtestaabq}
\DTLgetvalueforkey{\chapterBtestaabr}{c\langselectkey}{cv}{c1}{chapterBtestaabr}
\DTLgetvalueforkey{\chapterBtestaabs}{c\langselectkey}{cv}{c1}{chapterBtestaabs}
\DTLgetvalueforkey{\chapterBtestaabt}{c\langselectkey}{cv}{c1}{chapterBtestaabt}
\DTLgetvalueforkey{\chapterBtestaabu}{c\langselectkey}{cv}{c1}{chapterBtestaabu}
\DTLgetvalueforkey{\chapterBtestaabv}{c\langselectkey}{cv}{c1}{chapterBtestaabv}
\DTLgetvalueforkey{\chapterBtestaabw}{c\langselectkey}{cv}{c1}{chapterBtestaabw}
\DTLgetvalueforkey{\chapterBtestaabx}{c\langselectkey}{cv}{c1}{chapterBtestaabx}
\DTLgetvalueforkey{\chapterBtestaaby}{c\langselectkey}{cv}{c1}{chapterBtestaaby}
\DTLgetvalueforkey{\chapterBtestaabz}{c\langselectkey}{cv}{c1}{chapterBtestaabz}
\DTLgetvalueforkey{\chapterBtestaaca}{c\langselectkey}{cv}{c1}{chapterBtestaaca}
\DTLgetvalueforkey{\chapterBtestaacb}{c\langselectkey}{cv}{c1}{chapterBtestaacb}
\DTLgetvalueforkey{\chapterBtestaacc}{c\langselectkey}{cv}{c1}{chapterBtestaacc}
\DTLgetvalueforkey{\chapterBtestaacd}{c\langselectkey}{cv}{c1}{chapterBtestaacd}
\DTLgetvalueforkey{\chapterBtestaace}{c\langselectkey}{cv}{c1}{chapterBtestaace}
\DTLgetvalueforkey{\chapterBtestaacf}{c\langselectkey}{cv}{c1}{chapterBtestaacf}
\DTLgetvalueforkey{\chapterBtestaacg}{c\langselectkey}{cv}{c1}{chapterBtestaacg}
\DTLgetvalueforkey{\chapterBtestaach}{c\langselectkey}{cv}{c1}{chapterBtestaach}
\DTLgetvalueforkey{\chapterBtestaaci}{c\langselectkey}{cv}{c1}{chapterBtestaaci}
\DTLgetvalueforkey{\chapterBtestaacj}{c\langselectkey}{cv}{c1}{chapterBtestaacj}
\DTLgetvalueforkey{\chapterBtestaack}{c\langselectkey}{cv}{c1}{chapterBtestaack}
\DTLgetvalueforkey{\chapterBtestaacl}{c\langselectkey}{cv}{c1}{chapterBtestaacl}
\DTLgetvalueforkey{\chapterBtestaacm}{c\langselectkey}{cv}{c1}{chapterBtestaacm}
\DTLgetvalueforkey{\chapterBtestaacn}{c\langselectkey}{cv}{c1}{chapterBtestaacn}
\DTLgetvalueforkey{\chapterBtestaaco}{c\langselectkey}{cv}{c1}{chapterBtestaaco}
\DTLgetvalueforkey{\chapterBtestaacp}{c\langselectkey}{cv}{c1}{chapterBtestaacp}
\DTLgetvalueforkey{\chapterBtestaacq}{c\langselectkey}{cv}{c1}{chapterBtestaacq}
\DTLgetvalueforkey{\chapterBtestaacr}{c\langselectkey}{cv}{c1}{chapterBtestaacr}
\DTLgetvalueforkey{\chapterBtestaacs}{c\langselectkey}{cv}{c1}{chapterBtestaacs}
\DTLgetvalueforkey{\chapterBtestaact}{c\langselectkey}{cv}{c1}{chapterBtestaact}
\DTLgetvalueforkey{\chapterBtestaacu}{c\langselectkey}{cv}{c1}{chapterBtestaacu}
\DTLgetvalueforkey{\chapterBtestaacv}{c\langselectkey}{cv}{c1}{chapterBtestaacv}
\DTLgetvalueforkey{\chapterBtestaacw}{c\langselectkey}{cv}{c1}{chapterBtestaacw}
\DTLgetvalueforkey{\chapterBtestaacx}{c\langselectkey}{cv}{c1}{chapterBtestaacx}
\DTLgetvalueforkey{\chapterBtestaacy}{c\langselectkey}{cv}{c1}{chapterBtestaacy}
\DTLgetvalueforkey{\chapterBtestaacz}{c\langselectkey}{cv}{c1}{chapterBtestaacz}
\DTLgetvalueforkey{\chapterBtestaada}{c\langselectkey}{cv}{c1}{chapterBtestaada}
\DTLgetvalueforkey{\chapterBtestaadb}{c\langselectkey}{cv}{c1}{chapterBtestaadb}
\DTLgetvalueforkey{\chapterBtestaadc}{c\langselectkey}{cv}{c1}{chapterBtestaadc}
\DTLgetvalueforkey{\chapterBtestaadd}{c\langselectkey}{cv}{c1}{chapterBtestaadd}
\DTLgetvalueforkey{\chapterBtestaade}{c\langselectkey}{cv}{c1}{chapterBtestaade}
\DTLgetvalueforkey{\chapterBtestaadf}{c\langselectkey}{cv}{c1}{chapterBtestaadf}
\DTLgetvalueforkey{\chapterBtestaadg}{c\langselectkey}{cv}{c1}{chapterBtestaadg}
\DTLgetvalueforkey{\chapterBtestaadh}{c\langselectkey}{cv}{c1}{chapterBtestaadh}
\DTLgetvalueforkey{\chapterBtestaadi}{c\langselectkey}{cv}{c1}{chapterBtestaadi}
\DTLgetvalueforkey{\chapterBtestaadj}{c\langselectkey}{cv}{c1}{chapterBtestaadj}
\DTLgetvalueforkey{\chapterBtestaadk}{c\langselectkey}{cv}{c1}{chapterBtestaadk}
\DTLgetvalueforkey{\chapterBtestaadl}{c\langselectkey}{cv}{c1}{chapterBtestaadl}
\DTLgetvalueforkey{\chapterBtestaadm}{c\langselectkey}{cv}{c1}{chapterBtestaadm}
\DTLgetvalueforkey{\chapterBtestaadn}{c\langselectkey}{cv}{c1}{chapterBtestaadn}
\DTLgetvalueforkey{\chapterBtestaado}{c\langselectkey}{cv}{c1}{chapterBtestaado}
\DTLgetvalueforkey{\chapterBtestaadp}{c\langselectkey}{cv}{c1}{chapterBtestaadp}
\DTLgetvalueforkey{\chapterBtestaadq}{c\langselectkey}{cv}{c1}{chapterBtestaadq}
\DTLgetvalueforkey{\chapterBtestaadr}{c\langselectkey}{cv}{c1}{chapterBtestaadr}
\DTLgetvalueforkey{\chapterBtestaads}{c\langselectkey}{cv}{c1}{chapterBtestaads}
\DTLgetvalueforkey{\chapterBtestaadt}{c\langselectkey}{cv}{c1}{chapterBtestaadt}
\DTLgetvalueforkey{\chapterBtestaadu}{c\langselectkey}{cv}{c1}{chapterBtestaadu}
\DTLgetvalueforkey{\chapterBtestaadv}{c\langselectkey}{cv}{c1}{chapterBtestaadv}
\DTLgetvalueforkey{\chapterBtestaadw}{c\langselectkey}{cv}{c1}{chapterBtestaadw}
\DTLgetvalueforkey{\chapterBtestaadx}{c\langselectkey}{cv}{c1}{chapterBtestaadx}
\DTLgetvalueforkey{\chapterBtestaady}{c\langselectkey}{cv}{c1}{chapterBtestaady}
\DTLgetvalueforkey{\chapterBtestaadz}{c\langselectkey}{cv}{c1}{chapterBtestaadz}
\DTLgetvalueforkey{\chapterBtestaaea}{c\langselectkey}{cv}{c1}{chapterBtestaaea}
\DTLgetvalueforkey{\chapterBtestaaeb}{c\langselectkey}{cv}{c1}{chapterBtestaaeb}
\DTLgetvalueforkey{\chapterBtestaaec}{c\langselectkey}{cv}{c1}{chapterBtestaaec}
\DTLgetvalueforkey{\chapterBtestaaed}{c\langselectkey}{cv}{c1}{chapterBtestaaed}
\DTLgetvalueforkey{\chapterBtestaaee}{c\langselectkey}{cv}{c1}{chapterBtestaaee}
\typeout{Loading C}
\DTLgetvalueforkey{\chapterCtestaaaa}{c\langselectkey}{cv}{c1}{chapterCtestaaaa}
\DTLgetvalueforkey{\chapterCtestaaab}{c\langselectkey}{cv}{c1}{chapterCtestaaab}
\DTLgetvalueforkey{\chapterCtestaaac}{c\langselectkey}{cv}{c1}{chapterCtestaaac}
\DTLgetvalueforkey{\chapterCtestaaad}{c\langselectkey}{cv}{c1}{chapterCtestaaad}
\DTLgetvalueforkey{\chapterCtestaaae}{c\langselectkey}{cv}{c1}{chapterCtestaaae}
\DTLgetvalueforkey{\chapterCtestaaaf}{c\langselectkey}{cv}{c1}{chapterCtestaaaf}
\DTLgetvalueforkey{\chapterCtestaaag}{c\langselectkey}{cv}{c1}{chapterCtestaaag}
\DTLgetvalueforkey{\chapterCtestaaah}{c\langselectkey}{cv}{c1}{chapterCtestaaah}
\DTLgetvalueforkey{\chapterCtestaaai}{c\langselectkey}{cv}{c1}{chapterCtestaaai}
\DTLgetvalueforkey{\chapterCtestaaaj}{c\langselectkey}{cv}{c1}{chapterCtestaaaj}
\DTLgetvalueforkey{\chapterCtestaaak}{c\langselectkey}{cv}{c1}{chapterCtestaaak}
\DTLgetvalueforkey{\chapterCtestaaal}{c\langselectkey}{cv}{c1}{chapterCtestaaal}
\DTLgetvalueforkey{\chapterCtestaaam}{c\langselectkey}{cv}{c1}{chapterCtestaaam}
\DTLgetvalueforkey{\chapterCtestaaan}{c\langselectkey}{cv}{c1}{chapterCtestaaan}
\DTLgetvalueforkey{\chapterCtestaaao}{c\langselectkey}{cv}{c1}{chapterCtestaaao}
\DTLgetvalueforkey{\chapterCtestaaap}{c\langselectkey}{cv}{c1}{chapterCtestaaap}
\DTLgetvalueforkey{\chapterCtestaaaq}{c\langselectkey}{cv}{c1}{chapterCtestaaaq}
\DTLgetvalueforkey{\chapterCtestaaar}{c\langselectkey}{cv}{c1}{chapterCtestaaar}
\DTLgetvalueforkey{\chapterCtestaaas}{c\langselectkey}{cv}{c1}{chapterCtestaaas}
\DTLgetvalueforkey{\chapterCtestaaat}{c\langselectkey}{cv}{c1}{chapterCtestaaat}
\DTLgetvalueforkey{\chapterCtestaaau}{c\langselectkey}{cv}{c1}{chapterCtestaaau}
\DTLgetvalueforkey{\chapterCtestaaav}{c\langselectkey}{cv}{c1}{chapterCtestaaav}
\DTLgetvalueforkey{\chapterCtestaaaw}{c\langselectkey}{cv}{c1}{chapterCtestaaaw}
\DTLgetvalueforkey{\chapterCtestaaax}{c\langselectkey}{cv}{c1}{chapterCtestaaax}
\DTLgetvalueforkey{\chapterCtestaaay}{c\langselectkey}{cv}{c1}{chapterCtestaaay}
\DTLgetvalueforkey{\chapterCtestaaaz}{c\langselectkey}{cv}{c1}{chapterCtestaaaz}
\DTLgetvalueforkey{\chapterCtestaaba}{c\langselectkey}{cv}{c1}{chapterCtestaaba}
\DTLgetvalueforkey{\chapterCtestaabb}{c\langselectkey}{cv}{c1}{chapterCtestaabb}
\DTLgetvalueforkey{\chapterCtestaabc}{c\langselectkey}{cv}{c1}{chapterCtestaabc}
\DTLgetvalueforkey{\chapterCtestaabd}{c\langselectkey}{cv}{c1}{chapterCtestaabd}
\DTLgetvalueforkey{\chapterCtestaabe}{c\langselectkey}{cv}{c1}{chapterCtestaabe}
\DTLgetvalueforkey{\chapterCtestaabf}{c\langselectkey}{cv}{c1}{chapterCtestaabf}
\DTLgetvalueforkey{\chapterCtestaabg}{c\langselectkey}{cv}{c1}{chapterCtestaabg}
\DTLgetvalueforkey{\chapterCtestaabh}{c\langselectkey}{cv}{c1}{chapterCtestaabh}
\DTLgetvalueforkey{\chapterCtestaabi}{c\langselectkey}{cv}{c1}{chapterCtestaabi}
\DTLgetvalueforkey{\chapterCtestaabj}{c\langselectkey}{cv}{c1}{chapterCtestaabj}
\DTLgetvalueforkey{\chapterCtestaabk}{c\langselectkey}{cv}{c1}{chapterCtestaabk}
\DTLgetvalueforkey{\chapterCtestaabl}{c\langselectkey}{cv}{c1}{chapterCtestaabl}
\DTLgetvalueforkey{\chapterCtestaabm}{c\langselectkey}{cv}{c1}{chapterCtestaabm}
\DTLgetvalueforkey{\chapterCtestaabn}{c\langselectkey}{cv}{c1}{chapterCtestaabn}
\DTLgetvalueforkey{\chapterCtestaabo}{c\langselectkey}{cv}{c1}{chapterCtestaabo}
\DTLgetvalueforkey{\chapterCtestaabp}{c\langselectkey}{cv}{c1}{chapterCtestaabp}
\DTLgetvalueforkey{\chapterCtestaabq}{c\langselectkey}{cv}{c1}{chapterCtestaabq}
\DTLgetvalueforkey{\chapterCtestaabr}{c\langselectkey}{cv}{c1}{chapterCtestaabr}
\DTLgetvalueforkey{\chapterCtestaabs}{c\langselectkey}{cv}{c1}{chapterCtestaabs}
\DTLgetvalueforkey{\chapterCtestaabt}{c\langselectkey}{cv}{c1}{chapterCtestaabt}
\DTLgetvalueforkey{\chapterCtestaabu}{c\langselectkey}{cv}{c1}{chapterCtestaabu}
\DTLgetvalueforkey{\chapterCtestaabv}{c\langselectkey}{cv}{c1}{chapterCtestaabv}
\DTLgetvalueforkey{\chapterCtestaabw}{c\langselectkey}{cv}{c1}{chapterCtestaabw}
\DTLgetvalueforkey{\chapterCtestaabx}{c\langselectkey}{cv}{c1}{chapterCtestaabx}
\DTLgetvalueforkey{\chapterCtestaaby}{c\langselectkey}{cv}{c1}{chapterCtestaaby}
\DTLgetvalueforkey{\chapterCtestaabz}{c\langselectkey}{cv}{c1}{chapterCtestaabz}
\DTLgetvalueforkey{\chapterCtestaaca}{c\langselectkey}{cv}{c1}{chapterCtestaaca}
\DTLgetvalueforkey{\chapterCtestaacb}{c\langselectkey}{cv}{c1}{chapterCtestaacb}
\DTLgetvalueforkey{\chapterCtestaacb}{c\langselectkey}{cv}{c1}{chapterCtestaacc}
\typeout{Loading D}
\DTLgetvalueforkey{\chapterDtestaaaa}{c\langselectkey}{cv}{c1}{chapterDtestaaaa}
\DTLgetvalueforkey{\chapterDtestaaab}{c\langselectkey}{cv}{c1}{chapterDtestaaab}
\DTLgetvalueforkey{\chapterDtestaaac}{c\langselectkey}{cv}{c1}{chapterDtestaaac}
\DTLgetvalueforkey{\chapterDtestaaad}{c\langselectkey}{cv}{c1}{chapterDtestaaad}
\DTLgetvalueforkey{\chapterDtestaaae}{c\langselectkey}{cv}{c1}{chapterDtestaaae}
\DTLgetvalueforkey{\chapterDtestaaaf}{c\langselectkey}{cv}{c1}{chapterDtestaaaf}
\DTLgetvalueforkey{\chapterDtestaaag}{c\langselectkey}{cv}{c1}{chapterDtestaaag}
\DTLgetvalueforkey{\chapterDtestaaah}{c\langselectkey}{cv}{c1}{chapterDtestaaah}
\DTLgetvalueforkey{\chapterDtestaaai}{c\langselectkey}{cv}{c1}{chapterDtestaaai}
\DTLgetvalueforkey{\chapterDtestaaaj}{c\langselectkey}{cv}{c1}{chapterDtestaaaj}
\DTLgetvalueforkey{\chapterDtestaaak}{c\langselectkey}{cv}{c1}{chapterDtestaaak}
\DTLgetvalueforkey{\chapterDtestaaal}{c\langselectkey}{cv}{c1}{chapterDtestaaal}
\DTLgetvalueforkey{\chapterDtestaaam}{c\langselectkey}{cv}{c1}{chapterDtestaaam}
\DTLgetvalueforkey{\chapterDtestaaan}{c\langselectkey}{cv}{c1}{chapterDtestaaan}
\DTLgetvalueforkey{\chapterDtestaaao}{c\langselectkey}{cv}{c1}{chapterDtestaaao}
\DTLgetvalueforkey{\chapterDtestaaap}{c\langselectkey}{cv}{c1}{chapterDtestaaap}
\DTLgetvalueforkey{\chapterDtestaaaq}{c\langselectkey}{cv}{c1}{chapterDtestaaaq}
\DTLgetvalueforkey{\chapterDtestaaar}{c\langselectkey}{cv}{c1}{chapterDtestaaar}
\DTLgetvalueforkey{\chapterDtestaaas}{c\langselectkey}{cv}{c1}{chapterDtestaaas}
\DTLgetvalueforkey{\chapterDtestaaat}{c\langselectkey}{cv}{c1}{chapterDtestaaat}
\DTLgetvalueforkey{\chapterDtestaaau}{c\langselectkey}{cv}{c1}{chapterDtestaaau}
\DTLgetvalueforkey{\chapterDtestaaav}{c\langselectkey}{cv}{c1}{chapterDtestaaav}
\DTLgetvalueforkey{\chapterDtestaaaw}{c\langselectkey}{cv}{c1}{chapterDtestaaaw}
\DTLgetvalueforkey{\chapterDtestaaax}{c\langselectkey}{cv}{c1}{chapterDtestaaax}
\DTLgetvalueforkey{\chapterDtestaaay}{c\langselectkey}{cv}{c1}{chapterDtestaaay}
\DTLgetvalueforkey{\chapterDtestaaaz}{c\langselectkey}{cv}{c1}{chapterDtestaaaz}
\DTLgetvalueforkey{\chapterDtestaaba}{c\langselectkey}{cv}{c1}{chapterDtestaaba}
\DTLgetvalueforkey{\chapterDtestaabb}{c\langselectkey}{cv}{c1}{chapterDtestaabb}
\DTLgetvalueforkey{\chapterDtestaabc}{c\langselectkey}{cv}{c1}{chapterDtestaabc}
\DTLgetvalueforkey{\chapterDtestaabd}{c\langselectkey}{cv}{c1}{chapterDtestaabd}
\DTLgetvalueforkey{\chapterDtestaabe}{c\langselectkey}{cv}{c1}{chapterDtestaabe}
\DTLgetvalueforkey{\chapterDtestaabf}{c\langselectkey}{cv}{c1}{chapterDtestaabf}
\DTLgetvalueforkey{\chapterDtestaabg}{c\langselectkey}{cv}{c1}{chapterDtestaabg}
\DTLgetvalueforkey{\chapterDtestaabh}{c\langselectkey}{cv}{c1}{chapterDtestaabh}
\DTLgetvalueforkey{\chapterDtestaabi}{c\langselectkey}{cv}{c1}{chapterDtestaabi}
\DTLgetvalueforkey{\chapterDtestaabj}{c\langselectkey}{cv}{c1}{chapterDtestaabj}
\DTLgetvalueforkey{\chapterDtestaabk}{c\langselectkey}{cv}{c1}{chapterDtestaabk}
\DTLgetvalueforkey{\chapterDtestaabl}{c\langselectkey}{cv}{c1}{chapterDtestaabl}
\DTLgetvalueforkey{\chapterDtestaabm}{c\langselectkey}{cv}{c1}{chapterDtestaabm}
\DTLgetvalueforkey{\chapterDtestaabn}{c\langselectkey}{cv}{c1}{chapterDtestaabn}
\DTLgetvalueforkey{\chapterDtestaabo}{c\langselectkey}{cv}{c1}{chapterDtestaabo}
\DTLgetvalueforkey{\chapterDtestaabp}{c\langselectkey}{cv}{c1}{chapterDtestaabp}
\DTLgetvalueforkey{\chapterDtestaabq}{c\langselectkey}{cv}{c1}{chapterDtestaabq}
\DTLgetvalueforkey{\chapterDtestaabr}{c\langselectkey}{cv}{c1}{chapterDtestaabr}
\DTLgetvalueforkey{\chapterDtestaabs}{c\langselectkey}{cv}{c1}{chapterDtestaabs}
\DTLgetvalueforkey{\chapterDtestaabt}{c\langselectkey}{cv}{c1}{chapterDtestaabt}
\DTLgetvalueforkey{\chapterDtestaabu}{c\langselectkey}{cv}{c1}{chapterDtestaabu}
\DTLgetvalueforkey{\chapterDtestaabv}{c\langselectkey}{cv}{c1}{chapterDtestaabv}
\DTLgetvalueforkey{\chapterDtestaabw}{c\langselectkey}{cv}{c1}{chapterDtestaabw}
\DTLgetvalueforkey{\chapterDtestaabx}{c\langselectkey}{cv}{c1}{chapterDtestaabx}
\DTLgetvalueforkey{\chapterDtestaaby}{c\langselectkey}{cv}{c1}{chapterDtestaaby}
\DTLgetvalueforkey{\chapterDtestaabz}{c\langselectkey}{cv}{c1}{chapterDtestaabz}
\DTLgetvalueforkey{\chapterDtestaaca}{c\langselectkey}{cv}{c1}{chapterDtestaaca}
\DTLgetvalueforkey{\chapterDtestaacb}{c\langselectkey}{cv}{c1}{chapterDtestaacb}
\DTLgetvalueforkey{\chapterDtestaacc}{c\langselectkey}{cv}{c1}{chapterDtestaacc}
\DTLgetvalueforkey{\chapterDtestaacd}{c\langselectkey}{cv}{c1}{chapterDtestaacd}
\DTLgetvalueforkey{\chapterDtestaace}{c\langselectkey}{cv}{c1}{chapterDtestaace}
\DTLgetvalueforkey{\chapterDtestaacf}{c\langselectkey}{cv}{c1}{chapterDtestaacf}
\DTLgetvalueforkey{\chapterDtestaacg}{c\langselectkey}{cv}{c1}{chapterDtestaacg}
\DTLgetvalueforkey{\chapterDtestaach}{c\langselectkey}{cv}{c1}{chapterDtestaach}
\DTLgetvalueforkey{\chapterDtestaaci}{c\langselectkey}{cv}{c1}{chapterDtestaaci}
\DTLgetvalueforkey{\chapterDtestaacj}{c\langselectkey}{cv}{c1}{chapterDtestaacj}
\DTLgetvalueforkey{\chapterDtestaack}{c\langselectkey}{cv}{c1}{chapterDtestaack}
\DTLgetvalueforkey{\chapterDtestaacl}{c\langselectkey}{cv}{c1}{chapterDtestaacl}
\DTLgetvalueforkey{\chapterDtestaacm}{c\langselectkey}{cv}{c1}{chapterDtestaacm}
\DTLgetvalueforkey{\chapterDtestaacn}{c\langselectkey}{cv}{c1}{chapterDtestaacn}
\DTLgetvalueforkey{\chapterDtestaaco}{c\langselectkey}{cv}{c1}{chapterDtestaaco}
\DTLgetvalueforkey{\chapterDtestaacp}{c\langselectkey}{cv}{c1}{chapterDtestaacp}
\DTLgetvalueforkey{\chapterDtestaacq}{c\langselectkey}{cv}{c1}{chapterDtestaacq}
\DTLgetvalueforkey{\chapterDtestaacr}{c\langselectkey}{cv}{c1}{chapterDtestaacr}
\DTLgetvalueforkey{\chapterDtestaacs}{c\langselectkey}{cv}{c1}{chapterDtestaacs}
\DTLgetvalueforkey{\chapterDtestaact}{c\langselectkey}{cv}{c1}{chapterDtestaact}
\DTLgetvalueforkey{\chapterDtestaacu}{c\langselectkey}{cv}{c1}{chapterDtestaacu}
\DTLgetvalueforkey{\chapterDtestaacv}{c\langselectkey}{cv}{c1}{chapterDtestaacv}
\DTLgetvalueforkey{\chapterDtestaacw}{c\langselectkey}{cv}{c1}{chapterDtestaacw}
\DTLgetvalueforkey{\chapterDtestaacx}{c\langselectkey}{cv}{c1}{chapterDtestaacx}
\DTLgetvalueforkey{\chapterDtestaacy}{c\langselectkey}{cv}{c1}{chapterDtestaacy}
\DTLgetvalueforkey{\chapterDtestaacz}{c\langselectkey}{cv}{c1}{chapterDtestaacz}
\DTLdeletedb{cv}
\end{filecontents}
\begin{filecontents*}{cvtestdatabase.csv}
LANGID;CATA;CATB;MIN;MAX;ADDA;ADDB;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18
Langaugecode;SYSTEM;;2;3;;;DE;EN;;;;;;;;;;;;;;;;
chapterAtestaaaa;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterAtestaaab;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterAtestaaac;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterAtestaaad;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterAtestaaae;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterAtestaaaf;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterAtestaaag;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterAtestaaah;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaaa;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaab;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaac;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaad;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaae;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaaf;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaag;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaah;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaai;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaaj;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaak;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaal;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaam;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaan;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaao;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaap;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaaq;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaar;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaas;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaat;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaau;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaaa;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaab;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaac;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaad;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaae;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaaf;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaag;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaah;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaai;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaaj;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaak;;;3;10;;;GER;EN;;;;;;;;;;;;;;;; 
chapterCtestaaal;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaam;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaan;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaao;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaap;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaaq;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaar;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaas;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaat;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaau;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaav;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaaw;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaax;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaay;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaaz;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaba;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaabb;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaabc;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaabd;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaabe;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaabf;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaaa;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaab;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaac;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaad;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaae;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaaf;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaag;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaah;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaai;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaaj;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaak;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaal;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaam;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaan;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaao;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaap;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaaq;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaar;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaas;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaat;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaau;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaav;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaaw;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaax;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaay;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaaz;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaba;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabb;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabc;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabd;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabe;;;3;10;;;GER;EN;;;;;;;;;;;;;;;; 
chapterDtestaabf;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabg;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabh;;;3;10;;;GER;EN;;;;;;;;;;;;;;;; 
chapterDtestaabi;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabj;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabk;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabl;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabm;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabn;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabo;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacd;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaace;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabp;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabq;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabr;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabs;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabt;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabu;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabv;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabw;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabx;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaby;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabz;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaca;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacb;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacc;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacf;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacg;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaach;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaci;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacj;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaack;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacl;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacm;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacn;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaco;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacp;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacq;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacr;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacs;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaact;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacu;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacv;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacw;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacx;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacy;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacz;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
\end{filecontents*}

% Comment the following lines (just before test) and uncomment hyperref and filesize will be small. 
% Comment hyperref and uncomment all the following lines and the filesize will be small.
% Uncomment hyperref and all the following lines and the filesize will be big.

    \providecommand{\hspce}{\,}
    \FPupn{langselect}{1}
    \DTLsetseparator{;}
    \FPupn{langselectkey}{0}
    \input{dbload}

test

\end{document}

答案1

提供的一些高级用户命令datatool不如低级用户命令那么高效,这\DTLgetvalueforkey是因为它内部使用它来\DTLforeach*在数据库中查找所需的值。对于偶尔使用小型数据库来说,这不是什么大问题,但对于重复使用和较大的数据库,最好使用更高级的命令。

\DTLforeach在这种情况下,重复使用 有两个主要问题。第一个是构建文档需要额外的时间,第二个是重复使用\refstepcounter。我怀疑是这两个问题中的第二个导致文件大小随着hyperref插入 PDF 锚点而增加。此机制由 提供,\DTLforeach允许在迭代数据库时交叉引用行(例如,将数据库的内容显示为表格)。

考虑一下 MWE 的这个精简版本:

\documentclass{scrreprt}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{datatool}
\usepackage{filecontents}
\usepackage{hyperref}

\begin{filecontents*}{cvtestdatabase.csv}
LANGID;CATA;CATB;MIN;MAX;ADDA;ADDB;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18
Languagecode;SYSTEM;;2;3;;;DE;EN;;;;;;;;;;;;;;;;
chapterAtestaaaa;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
\end{filecontents*}

\begin{document}
\providecommand{\hspce}{\,}
\FPupn{langselect}{1}
\DTLsetseparator{;}
\FPupn{langselectkey}{0}

\DTLloadrawdb[keys={c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c20,c21,c22,c23,c24,c25}]{cv}{./cvtestdatabase.csv}
\FPupn{langselectkey}{langselect 7 + 0 round}
\DTLgetvalueforkey{\Languagecode}{c\langselectkey}{cv}{c1}{Languagecode}
\DTLgetvalueforkey{\chapterAtestaaaa}{c\langselectkey}{cv}{c1}{chapterAtestaaaa}

Languagecode: \Languagecode.
test command: \chapterAtestaaaa.
\end{document}

这会导致\refstepcounter使用五次。将其放大,就会出现大量不必要的 PDF 锚点,使文档变得臃肿。

以下是使用不执行任何迭代的低级命令的替代方法(参见datatool用户手册第 5.11.1 节):

\documentclass{scrreprt}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{datatool}
\usepackage{filecontents}
\usepackage{hyperref}

\begin{filecontents*}{cvtestdatabase.csv}
LANGID;CATA;CATB;MIN;MAX;ADDA;ADDB;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18
Languagecode;SYSTEM;;2;3;;;DE;EN;;;;;;;;;;;;;;;;
chapterAtestaaaa;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
\end{filecontents*}

\begin{document}
\providecommand{\hspce}{\,}
\FPupn{langselect}{1}
\DTLsetseparator{;}
\FPupn{langselectkey}{0}

\DTLloadrawdb[keys={c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c20,c21,c22,c23,c24,c25}]{cv}{./cvtestdatabase.csv}
\FPupn{langselectkey}{langselect 7 + 0 round}

% Get the column index for the column labelled ``c1''
\DTLgetcolumnindex{\columnidx}{cv}{c1}%
% Get the row where that column matches the given text:
\DTLgetrowindex{\rowidx}{cv}{\columnidx}{Languagecode}%
% Set it as the current row
\dtlgetrow{cv}{\rowidx}%
% Get the index for the required column
\DTLgetcolumnindex{\columnidx}{cv}{c\langselectkey}%
\dtlgetentryfromcurrentrow{\LanguageCode}{\columnidx}

Result: \LanguageCode.

\end{document}

您可以将这几行放在一个命令中,以使操作更简单。例如:

\newcommand{\fetchinfo}[2]{%
   % Get the column index for the column labelled ``c1''
   \DTLgetcolumnindex{\columnidx}{cv}{c1}%
   % Get the row where that column matches the given text:
   \DTLgetrowindex{\rowidx}{cv}{\columnidx}{#2}%
   % Set it as the current row
   \dtlgetrow{cv}{\rowidx}%
   % Get the index for the required column
   \DTLgetcolumnindex{\columnidx}{cv}{c\langselectkey}%
   \dtlgetentryfromcurrentrow{#1}{\columnidx}%
}

然后你可以像这样使用它:

\fetchinfo{\LanguageCode}{Languagecode}

本例中两个测试文档中的第二个(使用低级命令的文档)比第一个(使用 的文档\DTLgetvalueforkey)小 867 个字节。

编辑:

我意识到我在第一个示例中进行了额外的查找,而在第二个示例中没有,因此这不是一个好的比较。下面是一组产生相同文本的新测试。为了清晰起见,示例已被缩减。

测试 1

hyperref\DTLgetvalueforkey

\documentclass{scrreprt}

\usepackage{datatool}
\usepackage{filecontents}
\usepackage{hyperref}

\begin{filecontents*}{cvtestdatabase.csv}
LANGID,1
Languagecode,DE
chapterAtestaaaa,GER
\end{filecontents*}

\begin{document}

\DTLloadrawdb[keys={c1,c2}]{cv}{./cvtestdatabase.csv}
\DTLgetvalueforkey{\Languagecode}{c2}{cv}{c1}{Languagecode}
\DTLgetvalueforkey{\chapterAtestaaaa}{c2}{cv}{c1}{chapterAtestaaaa}

Languagecode: \Languagecode.
test command: \chapterAtestaaaa.
\end{document}

生成的 PDF 的文件大小 ( test.pdf):

ls -l test.pdf
-rw-rw-r--. 1 nlct nlct 14178 Nov 18 09:58 test.pdf

测试2:

hyperref\DTLgetvalueforkey这与上面的相同,但注释掉了一行:

\documentclass{scrreprt}

\usepackage{datatool}
\usepackage{filecontents}
%\usepackage{hyperref}

\begin{filecontents*}{cvtestdatabase.csv}
LANGID,1
Languagecode,DE
chapterAtestaaaa,GER
\end{filecontents*}

\begin{document}

\DTLloadrawdb[keys={c1,c2}]{cv}{./cvtestdatabase.csv}
\DTLgetvalueforkey{\Languagecode}{c2}{cv}{c1}{Languagecode}
\DTLgetvalueforkey{\chapterAtestaaaa}{c2}{cv}{c1}{chapterAtestaaaa}

Languagecode: \Languagecode.
test command: \chapterAtestaaaa.
\end{document}

文件大小:

ls -l test.pdf
-rw-rw-r--. 1 nlct nlct 13865 Nov 18 10:05 test.pdf

测试 3:

与测试 1 相同,但查找代码已移至序言部分:

\documentclass{scrreprt}

\usepackage{datatool}
\usepackage{filecontents}
\usepackage{hyperref}

\begin{filecontents*}{cvtestdatabase.csv}
LANGID,1
Languagecode,DE
chapterAtestaaaa,GER
\end{filecontents*}

\DTLloadrawdb[keys={c1,c2}]{cv}{./cvtestdatabase.csv}
\DTLgetvalueforkey{\Languagecode}{c2}{cv}{c1}{Languagecode}
\DTLgetvalueforkey{\chapterAtestaaaa}{c2}{cv}{c1}{chapterAtestaaaa}

\begin{document}

Languagecode: \Languagecode.
test command: \chapterAtestaaaa.
\end{document}

文件大小:

ls -l test.pdf
-rw-rw-r--. 1 nlct nlct 14175 Nov 18 10:07 test.pdf

测试 4:

hyperref以及低级用户命令。

\documentclass{scrreprt}

\usepackage{datatool}
\usepackage{filecontents}
\usepackage{hyperref}

\begin{filecontents*}{cvtestdatabase.csv}
LANGID,1
Languagecode,DE
chapterAtestaaaa,GER
\end{filecontents*}

\begin{document}

\DTLloadrawdb[keys={c1,c2}]{cv}{./cvtestdatabase.csv}

\newcommand{\fetchinfo}[2]{%
   % Get the column index for the column labelled ``c1''
   \DTLgetcolumnindex{\columnidx}{cv}{c1}%
   % Get the row where that column matches the given text:
   \DTLgetrowindex{\rowidx}{cv}{\columnidx}{#2}%
   % Set it as the current row
   \dtlgetrow{cv}{\rowidx}%
   % Get the index for the required column
   \DTLgetcolumnindex{\columnidx}{cv}{c2}%
   \dtlgetentryfromcurrentrow{#1}{\columnidx}%
}

\fetchinfo{\LanguageCode}{Languagecode}
\fetchinfo{\chapterAtestaaaa}{chapterAtestaaaa}

Languagecode: \LanguageCode.
test command: \chapterAtestaaaa.

\end{document}

文件大小:

ls -l test2.pdf 
-rw-rw-r--. 1 nlct nlct 14084 Nov 18 10:12 test2.pdf

测试 5:

没有hyperref和低级用户命令。这与上面的相同,但\usepackage{hyperref}注释掉了该行。

文件大小:

ls -l test2.pdf
-rw-rw-r--. 1 nlct nlct 13865 Nov 18 10:13 test2.pdf

测试 6:

hyperref以及在前导码中执行查找的低级命令。这与测试 4 相同,但\begin{document}行移得更远了。

\documentclass{scrreprt}

\usepackage{datatool}
\usepackage{filecontents}
\usepackage{hyperref}

\begin{filecontents*}{cvtestdatabase.csv}
LANGID,1
Languagecode,DE
chapterAtestaaaa,GER
\end{filecontents*}

\DTLloadrawdb[keys={c1,c2}]{cv}{./cvtestdatabase.csv}

\newcommand{\fetchinfo}[2]{%
   % Get the column index for the column labelled ``c1''
   \DTLgetcolumnindex{\columnidx}{cv}{c1}%
   % Get the row where that column matches the given text:
   \DTLgetrowindex{\rowidx}{cv}{\columnidx}{#2}%
   % Set it as the current row
   \dtlgetrow{cv}{\rowidx}%
   % Get the index for the required column
   \DTLgetcolumnindex{\columnidx}{cv}{c2}%
   \dtlgetentryfromcurrentrow{#1}{\columnidx}%
}

\fetchinfo{\LanguageCode}{Languagecode}
\fetchinfo{\chapterAtestaaaa}{chapterAtestaaaa}

\begin{document}

Languagecode: \LanguageCode.
test command: \chapterAtestaaaa.

\end{document}

文件大小:

ls -l test2.pdf
-rw-rw-r--. 1 nlct nlct 14084 Nov 18 10:16 test2.pdf

概括:

  • 测试 1:14178(hyperref,高级,查找document
  • 测试 2:13865(无hyperref,高级,查找document
  • 测试 3:14175 (hyperref,高级,在序言中查找)
  • 测试 4:14084(hyperref,低级,查找document
  • 测试 5:13865(无hyperref,低级,查找document
  • 测试 6:14084 (hyperref,低级,在前言中查找)

测试 4 和测试 6 的文件大小没有区别,但测试 1 和测试 3 的文件大小略有不同。我假设如果它出现在前导码中(这是有道理的) hyperref,则不会创建锚点\refstepcounter,因此这可以解释测试 1 和测试 3 中的文件大小差异。

测试 2 与测试 3(以及测试 5 与测试 6 或 4)的文件大小的差异是由于hyperref添加了额外的 PDF 相关信息造成的。

测试 3 和测试 6 的文件大小差异更有趣,但我不知道其原因,因此显然除了\refstepcounter高级命令之外还有其他因素导致了额外的大小。

编辑2:

进一步的测试来调查文件大小的增加\refstepcounter

\refstepcounterdocument环境中:

\documentclass{article}

\usepackage{hyperref}

\newcounter{test}

\begin{document}
\loop \refstepcounter{test} \ifnum\value{test}<10\repeat

\thetest.
\end{document}

文件大小:10733 字节。

\refstepcounter在序言中:

\documentclass{article}

\usepackage{hyperref}

\newcounter{test}

\loop \refstepcounter{test} \ifnum\value{test}<10\repeat

\begin{document}
\thetest.
\end{document}

文件大小:10732 字节。

\refstepcounter替换为\stepcounter

\documentclass{article}

\usepackage{hyperref}

\newcounter{test}

\loop \stepcounter{test} \ifnum\value{test}<10\repeat

\begin{document}
\thetest.
\end{document}

文件大小:10581字节。

因此看起来,即使\refstepcounter在序言中使用,它仍然会增加 PDF 大小(与 相比\stepcounter),尽管不如在 中使用时那么多document

答案2

如果你添加

 \pdfcompresslevel=0

在文档顶部,您可以获得带和不带 hyperref 的文件大小分别为 3129555 和 13642。查看 pdf 时,第一个明显的区别是相同的行出现了 26368 次

/D [3 0 R /XYZ 88.291 795.961 null]

据我所知,这是在这些坐标处设置一个命名目的地。这本身就解释了未压缩版本中 1000000 的差异。

继续看已经太晚了,但这可能会给你一个可以看的地方(或者 Heiko 可能会路过并解释发生了什么:-)

相关内容