% This file is embedded in datatool-user.pdf version 3.0.1 2025-03-05 % Example 84 Display Two Fields in One Column % Label: "ex:displaydbmergefields" % arara: pdflatex % arara: pdfcrop \documentclass[12pt]{article} \pagestyle{empty} \begin{filecontents}[noheader,overwrite]{studentmarks.csv} Surname,Forename,StudentNo,Assign1,Assign2,Assign3 "Smith, Jr",John,102689,68,57,72 "Brown",Jane,102647,75,84,80 "Brown",Jane,102646,64,92,79 "Brown",Andy,103569,42,52,54 "Adams",Zoƫ,105987,52,48,57 "Brady",Roger,106872,68,60,62 "Verdon",Clare,104356,45,50,48 \end{filecontents} \usepackage{datatool} \DTLsetup{store-datum,default-name=marks} \DTLread{studentmarks.csv} \ExplSyntaxOn \RenewDocumentCommand \DTLdisplaydbAddItem { m m m m m m m m } { \int_compare:nNnTF { #7 } = { \c_one_int } { \DTLaction[ return={\l_tmpa_tl=Forename} ] { current ~ row ~ values } \datatool_if_null_or_empty:NTF \l_tmpa_tl { \tl_put_right:Nn #1 { #3 { #2 } } } { \tl_put_right:Nx #1 { \exp_not:N #3 { \exp_not:n { #2 }, ~ \exp_not:V \l_tmpa_tl } } } } { \tl_put_right:Nn #1 { #3 { #2 } } } } \ExplSyntaxOff \begin{document} \DTLaction[ options={ only-keys={Surname,StudentNo,Assign1,Assign2,Assign3}, header-row={Name & Reg.\ No., & Mark 1 & Mark 2 & Mark 3} } ]{display} \end{document}