
Al escribir un cv decidí separar el archivo tex del contenido. Copié el contenido en un archivo csv para poder cargarlo con datatool
.
Pero esto aumenta enormemente el tamaño del PDF:
- Contenido completo directamente en código tex. Tamaño: 101Kb.
- Externalice el contenido a un archivo csv. Tamaño: 5.093 KB.
MWE compilado con pdflatex:
\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}
Respuesta1
Algunos de los comandos de usuario de alto nivel proporcionados por datatool
no son tan eficientes como los comandos de usuario de nivel inferior y \DTLgetvalueforkey
es uno de esos casos, ya que se utiliza internamente \DTLforeach*
para encontrar el valor requerido en la base de datos. Esto no supone un gran problema para el uso ocasional con bases de datos pequeñas, pero para un uso repetido y para bases de datos más grandes, es mejor utilizar los comandos más avanzados.
Hay dos problemas principales con el uso repetido de \DTLforeach
en este tipo de contexto. El primero es el tiempo adicional que lleva crear el documento y el segundo es el uso repetido de \refstepcounter
. Sospecho que es el segundo de estos dos el que hace que el tamaño del archivo aumente a medida que hyperref
se insertan anclajes de PDF. Este mecanismo se proporciona para \DTLforeach
permitir la referencia cruzada de filas al iterar sobre la base de datos (por ejemplo, mostrar el contenido de la base de datos como una tabla).
Considere esta versión reducida de su 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}
Esto da como resultado que \refstepcounter
se utilice cinco veces. Si amplía esto, se producirán muchos anclajes de PDF innecesarios que rellenan el documento.
Aquí hay una alternativa que utiliza los comandos de nivel inferior que no realizan ninguna iteración (consulte la sección 5.11.1 del datatool
manual del usuario):
\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}
Puede resumir esas líneas en un comando para simplificar las cosas. Por ejemplo:
\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}%
}
Entonces puedes usarlo así:
\fetchinfo{\LanguageCode}{Languagecode}
El segundo de los dos documentos de prueba en este ejemplo (el que usa los comandos de bajo nivel) es 867 bytes más pequeño que el primero (el que usa \DTLgetvalueforkey
).
Editar:
Me doy cuenta de que tuve una búsqueda adicional en el primer ejemplo que no tuve en el segundo, por lo que no es una buena comparación. Aquí hay un nuevo conjunto de pruebas que producen el mismo texto. El ejemplo se ha reducido para mayor claridad.
Prueba 1
hyperref
y \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}
El tamaño del archivo del PDF resultante ( test.pdf
):
ls -l test.pdf
-rw-rw-r--. 1 nlct nlct 14178 Nov 18 09:58 test.pdf
Prueba 2:
No hyperref
y \DTLgetvalueforkey
. Esto es lo mismo que el anterior pero con una línea comentada:
\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}
Tamaño del archivo:
ls -l test.pdf
-rw-rw-r--. 1 nlct nlct 13865 Nov 18 10:05 test.pdf
Prueba 3:
Como la Prueba 1, pero el código de búsqueda se ha movido al preámbulo:
\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}
Tamaño del archivo:
ls -l test.pdf
-rw-rw-r--. 1 nlct nlct 14175 Nov 18 10:07 test.pdf
Prueba 4:
hyperref
y comandos de usuario de bajo nivel.
\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}
Tamaño del archivo:
ls -l test2.pdf
-rw-rw-r--. 1 nlct nlct 14084 Nov 18 10:12 test2.pdf
Prueba 5:
Sin hyperref
comandos de usuario y de bajo nivel. Esto es lo mismo que el anterior pero con la \usepackage{hyperref}
línea comentada.
Tamaño del archivo:
ls -l test2.pdf
-rw-rw-r--. 1 nlct nlct 13865 Nov 18 10:13 test2.pdf
Prueba 6:
hyperref
y comandos de bajo nivel con búsqueda realizada en el preámbulo. Esto es lo mismo que la Prueba 4 pero la \begin{document}
línea se ha movido más hacia abajo.
\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}
Tamaño del archivo:
ls -l test2.pdf
-rw-rw-r--. 1 nlct nlct 14084 Nov 18 10:16 test2.pdf
Resumen:
- Prueba 1: 14178 (
hyperref
, nivel alto, búsqueda endocument
) - Prueba 2: 13865 (no
hyperref
, nivel alto, búsqueda endocument
) - Prueba 3: 14175 (
hyperref
, nivel alto, búsqueda en el preámbulo) - Prueba 4: 14084 (
hyperref
, nivel bajo, búsqueda endocument
) - Prueba 5: 13865 (no
hyperref
, nivel bajo, búsqueda endocument
) - Prueba 6: 14084 (
hyperref
, nivel bajo, búsqueda en el preámbulo)
No hay diferencia en el tamaño del archivo con la Prueba 4 y la Prueba 6, pero hay una ligera diferencia en el tamaño del archivo con la Prueba 1 y la Prueba 3. Supongo que eso hyperref
no crea anclajes \refstepcounter
si ocurre en el preámbulo (lo cual tiene sentido) , por lo que esto tendría en cuenta los diferentes tamaños de archivo en la Prueba 1 y la Prueba 3.
La diferencia en el tamaño del archivo con la Prueba 2 y la Prueba 3 (y con la Prueba 5 y la Prueba 6 o 4) se debe a la información adicional relacionada con el PDF que hyperref
se agrega.
La diferencia en el tamaño del archivo con la Prueba 3 y la Prueba 6 es más interesante, pero no sé el motivo, por lo que obviamente hay algo más que \refstepcounter
en el comando de alto nivel que contribuyó al tamaño adicional.
Edición 2:
Pruebas adicionales para investigar el aumento del tamaño del archivo con \refstepcounter
:
\refstepcounter
en document
el ambiente:
\documentclass{article}
\usepackage{hyperref}
\newcounter{test}
\begin{document}
\loop \refstepcounter{test} \ifnum\value{test}<10\repeat
\thetest.
\end{document}
Tamaño de archivo: 10733 bytes.
\refstepcounter
en el preámbulo:
\documentclass{article}
\usepackage{hyperref}
\newcounter{test}
\loop \refstepcounter{test} \ifnum\value{test}<10\repeat
\begin{document}
\thetest.
\end{document}
Tamaño de archivo: 10732 bytes.
\refstepcounter
reemplazadas con \stepcounter
:
\documentclass{article}
\usepackage{hyperref}
\newcounter{test}
\loop \stepcounter{test} \ifnum\value{test}<10\repeat
\begin{document}
\thetest.
\end{document}
Tamaño de archivo: 10581 bytes.
Entonces, parece que incluso si \refstepcounter
se usa en el preámbulo, todavía aumenta el tamaño del PDF (en comparación con \stepcounter
), aunque no tanto como cuando se usa en el archivo document
.
Respuesta2
si agregas
\pdfcompresslevel=0
En la parte superior del documento aparecen tamaños de archivo de 3129555 y 13642 con y sin hiperreferencia. Mirando el pdf, la primera diferencia obvia son 26368 apariciones de la misma línea.
/D [3 0 R /XYZ 88.291 795.961 null]
que hasta donde yo sé es establecer un destino con nombre en esas coordenadas. Eso por sí solo representa 1000000 de la diferencia en la versión sin comprimir.
Es demasiado tarde para buscar más, pero eso puede darte un lugar donde buscar (o Heiko podría pasar y explicar lo que está pasando :-)