goLaTeX - Mein LaTeX-Forum

Mein LaTeX-Forum


Login  | Registrieren
Forum
      Option
[Erweitert]
  • Diese Seite weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Expandieren eines Befehls direkt bei Definition.

 

mathe42
Forum-Anfänger
Forum-Anfänger


Beiträge: 13
Anmeldedatum: 08.01.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2017, 05:22     Titel: Expandieren eines Befehls direkt bei Definition.
  Antworten mit Zitat      
Hallo,
Ich versuche den Dateinamen der benutzten Datei in einem Befehl zu speichern. Dabei muss der \currfilename Befehl aber direkt expandiert werden, da ich den Dateinamen in einer Anderen Datei verwenden möchte.

Wie ist das möglich?


main.tex:
Code • Öffne in Overleaf

\documentclass{scrartcl}
\usepackage{currfile}

\newcommand{\test}{Kein Speicherpunkt gesetzt.}
\newcommand\setFileName{
   \expanafter\renewcommand{\test
}{\currfilename}
}

\begin{document}
   \input{test.tex}
   \test
\end{document}
 


test.tex:
Code • Öffne in Overleaf

\setFileName
 


Gruß
Sebastian
Private Nachricht senden Benutzer-Profile anzeigen

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2017, 08:10     Titel:
  Antworten mit Zitat      
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:
Code • Öffne in Overleaf
\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:
Code • Öffne in Overleaf
\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:
Code • Öffne in Overleaf
\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.

mathe42
Forum-Anfänger
Forum-Anfänger


Beiträge: 13
Anmeldedatum: 08.01.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2017, 11:54     Titel: Danke
  Antworten mit Zitat      
Danke, damit hast du mir sehr geholfen...

Gruß
Sebastian
Private Nachricht senden Benutzer-Profile anzeigen

Neues Thema eröffnen Neue Antwort erstellen



Options and Permissions
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen
.

goLaTeX ist Teil der goForen
goForen.de goMATLAB.de goLaTeX.de goPCB.de


  Impressum | FAQ | goLaTeX RSS Button RSS-Feed

Copyright © 2008 - 2018 goLaTeX.de