Ein (zumindest im Original) recht umfangreiches Symbolverzeichnis soll in eine CSV-Datei ausgelagert werden, die per datatool eingelesen wird. Jedoch führt \printglossary damit nur den letzten Eintrag auf. % arara: pdflatex % arara: makeglossaries % arara: pdflatex \documentclass{article} \usepackage{datatool} \usepackage[nomain,symbols,xindy]{glossaries-extra} \begin{filecontents*}{matsym.csv} Marke,Symbol,Beschreibung E,E,E-Modul t0,t_0,Anfangszeitpunkt tmax,t_\text{max},Endzeitpunkt w,\omega,Winkelgeschwindigkeit \end{filecontents*} \DTLloaddb{matsym}{matsym.csv} \DTLforeach*{matsym}{\marke=Marke,\sym=Symbol,\beschr=Beschreibung}{ \glsxtrnewsymbol[description={\beschr}]{\marke}{\ensuremath{\sym}} } \makeglossaries \begin{document} \section{Die Tabelle, wie \textit{datatool} sie verstanden hat:} \DTLdisplaydb[Symbol]{matsym} % sprich: OHNE Symbol \section{Alle definierten Symbole werden hier genannt} \DTLforeach*{matsym}{\marke=Marke}{\gls{\marke} } \printglossary[type=symbols,title={Das Glossar zeigt nur den letzten Eintrag}] \end{document} Ich habe als Anhaltspunkt die glo-Datei: (indexentry :tkey (("\\marke " "\\glossentry{E}") ) :locref "{}{1}" :attr "pageglsnumberformat" ) (indexentry :tkey (("\\marke " "\\glossentry{t0}") ) :locref "{}{1}" :attr "pageglsnumberformat" ) (indexentry :tkey (("\\marke " "\\glossentry{tmax}") ) :locref "{}{1}" :attr "pageglsnumberformat" ) (indexentry :tkey (("\\marke " "\\glossentry{w}") ) :locref "{}{1}" :attr "pageglsnumberformat" ) Sieht so aus, als ob \makeglossaries alle Einträge unter der selben Marke anlegt hat, vermutlich weil die Definition in einer \DTLforeach-Schleife geschieht. Wie bekomme ich pdflatex dazu, jedesmal den tatsächlichen Wert anstatt diesem Platzhalter zu nehmen? PS: Die Kombi datatool mit glossaries wird bewusst benutzt, auch wenn datatool eine eigene Glossarunterstützung (datagidx) mitbringt. gefragt 05 Nov '20, 03:27 Giovani Ragazze |
Das ist wieder einmal ein Expansionsproblem. \DTLforeach*{matsym}{\marke=Marke,\sym=Symbol,\beschr=Beschreibung}{% \edef\myrunner{% \noexpand\glsxtrnewsymbol [description={\unexpanded\expandafter{\beschr}}]% {\unexpanded\expandafter{\marke}}% {\noexpand\ensuremath{\unexpanded\expandafter{\sym}}}% }% \myrunner } Hier wird Insgesamt sieht das dann beispielsweise so aus: \documentclass{article} \usepackage{datatool} \usepackage[nomain,symbols,xindy]{glossaries-extra} \begin{filecontents*}{matsym.csv} Marke,Symbol,Beschreibung E,E,E-Modul t0,t_0,Anfangszeitpunkt tmax,t_\text{max},Endzeitpunkt w,\omega,Winkelgeschwindigkeit \end{filecontents*} \DTLloaddb{matsym}{matsym.csv} \newcommand*{\myrunner}{}% Makro quasi reservieren \DTLforeach*{matsym}{\marke=Marke,\sym=Symbol,\beschr=Beschreibung}{% \edef\myrunner{% \noexpand\glsxtrnewsymbol [description={\unexpanded\expandafter{\beschr}}]% {\unexpanded\expandafter{\marke}}% {\noexpand\ensuremath{\unexpanded\expandafter{\sym}}}% }% \myrunner } \makeglossaries \begin{document} \section{Die Tabelle, wie \textit{datatool} sie verstanden hat:} \DTLdisplaydb[Symbol]{matsym} % sprich: OHNE Symbol \section{Alle definierten Symbole werden hier genannt} \DTLforeach*{matsym}{\marke=Marke}{\gls{\marke} }% Hier wäre das explizite Expandieren auch kein Fehler. Es geht aber wohl auch so. \printglossary[type=symbols,title={Das Glossar zeigt nur den letzten Eintrag}] \end{document} Eine eventuell etwas komplizierter aussehende Möglichkeit bestünde in der Verwendung von \cs_new:Npn \dt__glsxtrnewmathsymbol:nnn #1 #2 #3 { \glsxtrnewsymbol [ description = { #1 } ] { #2 } { \ensuremath{ #3 } } } Würde man den nun in der Schleife als \cs_generate_variant:Nn \dt__glsxtrnewmathsymbol:nnn { ooo } einfach eine Variante Damit in der Schleife nicht die \documentclass{article} \usepackage{datatool} \usepackage[nomain,symbols,xindy]{glossaries-extra} \usepackage{xparse}% Für LaTeX >= 2020-10-01 nicht mehr zwingend aber zu empfehlen. Lädt auch expl3. \begin{filecontents*}{matsym.csv} Marke,Symbol,Beschreibung E,E,E-Modul t0,t_0,Anfangszeitpunkt tmax,t_\text{max},Endzeitpunkt w,\omega,Winkelgeschwindigkeit \end{filecontents*} \ExplSyntaxOn \cs_new:Npn \dt__glsxtrnewmathsymbol:nnn #1 #2 #3 { \glsxtrnewsymbol [ description = { #1 } ] { #2 } { \ensuremath{ #3 } } } \cs_generate_variant:Nn \dt__glsxtrnewmathsymbol:nnn { ooo } \NewDocumentCommand \dtglsxtrnewmathsymbol { m m m } { \dt__glsxtrnewmathsymbol:ooo { #1 } { #2 } { #3 } } \ExplSyntaxOff \DTLloaddb{matsym}{matsym.csv} \DTLforeach*{matsym}{\marke=Marke,\sym=Symbol,\beschr=Beschreibung}{% \dtglsxtrnewmathsymbol{\beschr}{\marke}{\sym}% } \makeglossaries \begin{document} \section{Die Tabelle, wie \textit{datatool} sie verstanden hat:} \DTLdisplaydb[Symbol]{matsym} % sprich: OHNE Symbol \section{Alle definierten Symbole werden hier genannt} \DTLforeach*{matsym}{\marke=Marke}{\gls{\marke} }% Hier wäre das explizite Expandieren auch kein Fehler. Es geht aber wohl auch so. \printglossary[type=symbols,title={Das Glossar zeigt nur den letzten Eintrag}] \end{document} das oben bereits gezeigte Ergebnis. beantwortet 05 Nov '20, 08:21 gast3 Also expandiert Vielen Dank!
(05 Nov '20, 21:31)
Giovani Ragazze
Du meinst zwar das richtige, was da steht, ist aber nicht richtig. Bevor das Klammertoken expandiert, wird Solange sich in
(06 Nov '20, 08:10)
gast3
|