Das ist wieder einmal ein Expansionsproblem. `\glsxtrnewsymbol` expandiert beim Schreiben in die `*.sls`-Datei absichtlich nicht. Hier willst du aber, dass `\marke` genau einmal expandiert wird. Es gibt verschiedene Möglichkeiten, die Expansion zu erzwingen. Eine einfache wäre mit einem expandierten *runner* zu arbeiten:
\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 `\glsxtrnewsymbol` nicht direkt aufgerufen, sondern ein Befehl `\myrunner` definiert, der diesen Aufruf enthält. Durch Verwendung von `\edef` wird die Definition vollständig expandiert. Mit `\noexpand` wird verhindert, dass `\glsxtrnewsymbol` dabei selbst expandiert wird. Mit `\unexpanded\expandafter{\foo}` wird dafür gesorgt, dass `\foo` nicht komplett, sondern nur eine Stufe weit expandiert wird. Es wird also die Definition von `\foo` verwendet, darin enthaltene Makros werden aber nicht expandiert.
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}
[![Ergebnis mit vollständigem Glossar][1]][1]
***
Eine eventuell etwas komplizierter aussehende Möglichkeit bestünde in der Verwendung von [`expl3`](https://ctan.prg/pkg/l3kernel). [`expl3`](https://ctan.org/pkg/l3kernel). Damit gibt es nämlich die Möglichkeit, Befehle zu definieren, deren Argument automatisch einfach expandiert wird. Man könnte also für die `\DTLforeach*`-Schleife einen Befehl definieren, der an `\glsxtrnewsymbol` nicht mehr `\beschr`, `\marke` und `\sym`, sondern bereits deren Expansionen übergibt. Dazu definiert man beispielsweise zunächst einen Befehl, der den in der Schleife verwendeten Befehl ganz normal enthält, beispielsweise
\cs_new:Npn \dt__glsxtrnewmathsymbol:nnn #1 #2 #3
{
\glsxtrnewsymbol [ description = { #1 } ] { #2 } { \ensuremath{ #3 } }
}
Würde man den nun in der Schleife als `\dt__glsxtrnewmathsymbol{\beschr}{\marke}{\sym}` aufrufen, so hätte man wieder den Aufruf `\glsxtrnewmathsymbol[description={\beschr}]{\marke}{\ensuremath{\sym}}` also genau dasselbe Problem wie bisher. Man kann in `l3` aber per
\cs_generate_variant:Nn \dt__glsxtrnewmathsymbol:nnn { ooo }
einfach eine Variante `\dt__glsxtrnewmathsymbol:ooo` aus `\dt__glsxtrnewmathsymbol:nnn` erzeugen. Der Unterschied der `ooo`-Variante ist, dass die Argumente einfach expandiert werden, bevor sie zur Anwendung kommen. Es wird dann also nicht mehr `\beschr`, `\marke` und `\sym`, sondern die Definition dieser Makros in der Schleife verwendet.
Damit in der Schleife nicht die `expl3`-Syntax benötigt wird, definiert man sich noch eine Benutzeranweisung, die ohne `_` und `:` auskommt. Man erhält dann mit:
\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.
[1]: https://texwelt.de/upfiles/test_20201105_081941.png