Zunächst einmal musst Du für die Umdefinierung natürlich \renewcommand an Stelle von \newcommand verwenden. Dann willst Du die Expansion von \(re)newcommand nicht nur bis nach dem Einlesen der geschweiften Klammer von \test verzögern, sondern bis zur Expansion von \currfilename. Also muss eine entsprechende \expandafter-Kette aufgespannt werden:
\begin{filecontents*}{\jobname-test.tex}
\setFileName
\end{filecontents*}
\documentclass{scrartcl}
\usepackage{currfile}
\newcommand{\test}{Kein Speicherpunkt gesetzt.}
\newcommand\setFileName{%
\expandafter\renewcommand\expandafter\test\expandafter{\currfilename}%
}
\begin{document}
\input{\jobname-test.tex}
\test
\end{document}
Da wir uns mit \expandafter aber ohnehin bereits von der LaTeX- auf die TeX-Ebene begeben und mit dem vorherigen \newcommand bereits sichergestellt ist, dass \test uns
gehört, können wir auch die Definition auf TeX-Ebene vornehmen:
\begin{filecontents*}{\jobname-test.tex}
\setFileName
\end{filecontents*}
\documentclass{scrartcl}
\usepackage{currfile}
\newcommand{\test}{Kein Speicherpunkt gesetzt.}
\newcommand\setFileName{%
\edef\test{\currfilename}%
}
\begin{document}
\input{\jobname-test.tex}
\test
\end{document}
\edef führt bei der Definition eine vollständiges Expansion durch. Da hier das Argument der Definition nur aus einem einzigen Makro besteht, kann alternativ auch \let verwendet werden:
\begin{filecontents*}{\jobname-test.tex}
\setFileName
\end{filecontents*}
\documentclass{scrartcl}
\usepackage{currfile}
\newcommand{\test}{Kein Speicherpunkt gesetzt.}
\newcommand\setFileName{%
\let\test\currfilename
}
\begin{document}
\input{\jobname-test.tex}
\test
\end{document}
\let weist einem Argument den
Wert eines Tokens zu. Daher darf man an der Stelle auch auf keinen Fall \currfilename in geschweifte Klammern setzen. \test würde sonst zu { und \test} wäre dann quasi übrig.
Bezüglich der zusätzlich eingefügten % beachte bitte:
https://komascript.de/signifikanteLeerzeichen.
Zunächst einmal musst Du für die Umdefinierung natürlich [tt]\renewcommand[/tt] an Stelle von [tt]\newcommand[/tt] verwenden. Dann willst Du die Expansion von [tt]\(re)newcommand[/tt] nicht nur bis nach dem Einlesen der geschweiften Klammer von [tt]\test[/tt] verzögern, sondern bis zur Expansion von [tt]\currfilename[/tt]. Also muss eine entsprechende [tt]\expandafter[/tt]-Kette aufgespannt werden: [code]\begin{filecontents*}{\jobname-test.tex}
\setFileName
\end{filecontents*}
\documentclass{scrartcl}
\usepackage{currfile}
\newcommand{\test}{Kein Speicherpunkt gesetzt.}
\newcommand\setFileName{%
\expandafter\renewcommand\expandafter\test\expandafter{\currfilename}%
}
\begin{document}
\input{\jobname-test.tex}
\test
\end{document}[/code]
Da wir uns mit [tt]\expandafter[/tt] aber ohnehin bereits von der LaTeX- auf die TeX-Ebene begeben und mit dem vorherigen [tt]\newcommand[/tt] bereits sichergestellt ist, dass [tt]\test[/tt] uns [i]gehört[/i], können wir auch die Definition auf TeX-Ebene vornehmen:
[code]\begin{filecontents*}{\jobname-test.tex}
\setFileName
\end{filecontents*}
\documentclass{scrartcl}
\usepackage{currfile}
\newcommand{\test}{Kein Speicherpunkt gesetzt.}
\newcommand\setFileName{%
\edef\test{\currfilename}%
}
\begin{document}
\input{\jobname-test.tex}
\test
\end{document}[/code]
[tt]\edef[/tt] führt bei der Definition eine vollständiges Expansion durch. Da hier das Argument der Definition nur aus einem einzigen Makro besteht, kann alternativ auch [tt]\let[/tt] verwendet werden:
[code]\begin{filecontents*}{\jobname-test.tex}
\setFileName
\end{filecontents*}
\documentclass{scrartcl}
\usepackage{currfile}
\newcommand{\test}{Kein Speicherpunkt gesetzt.}
\newcommand\setFileName{%
\let\test\currfilename
}
\begin{document}
\input{\jobname-test.tex}
\test
\end{document}[/code]
[tt]\let[/tt] weist einem Argument den [i]Wert[/i] eines Tokens zu. Daher darf man an der Stelle auch auf keinen Fall [tt]\currfilename[/tt] in geschweifte Klammern setzen. [tt]\test[/tt] würde sonst zu [tt]{[/tt] und [tt]\test}[/tt] wäre dann quasi übrig.
Bezüglich der zusätzlich eingefügten [tt]%[/tt] beachte bitte: [url]https://komascript.de/signifikanteLeerzeichen[/url].