Das folgende Beispiel, in dem die Zahlen von 1 bis 5 einmal vorwärts und einmal rückwärts ausgegeben werden sollen, führt zu vielen Fehlermeldungen, obwohl ich mich m. E. an die Beschreibung des \int_step_function-Befehls in der expl3-Anleitung (interface3) gehalten habe. Was ist hier verkehrt?

Open in Online-Editor
\documentclass{article}
\usepackage{expl3}
\usepackage{xparse}

\ExplSyntaxOn

\cs_new:Npn \zahlen_vorwaerts:n #1
    {
        \cs_set:Npn \zahl_ausgeben:n #1 {#1}
        \int_step_function:nnnN {1} {1} {#1} \zahl_ausgeben:n
    }

\cs_new:Npn \zahlen_rueckwaerts:n #1
    {
        \cs_set:Npn \zahl_ausgeben:n #1 {#1}
        \int_step_function:nnnN {#1} {-1} {1} \zahl_ausgeben:n
    }

\NewDocumentCommand \Vorwaerts {m}
    {
        \zahlen_vorwaerts:n {#1}
    }

\NewDocumentCommand \Rueckwaerts {m}
    {
        \zahlen_rueckwaerts:n {#1}
    }

\ExplSyntaxOff

\begin{document}
\Vorwaerts{5}

\Rueckwaerts{5}
\end{document}

gefragt 21 Mai, 16:58

Cletus's gravatar image

Cletus
995126
Akzeptiert: 71%


Wenn Du eine Funktion in einer Funktion definierst, musst Du die # verdoppeln:

Open in Online-Editor
\cs_new_protected:Npn \zahlen_vorwaerts:n #1
  {
    \cs_set:Npn \zahlen_ausgeben:n ##1 {##1}
    \int_step_function:nnnN {1} {1} {#1} \zahlen_ausgeben:n
  }

Was geschieht, wenn man das nicht macht? Mit Deiner Definition wird aus \Vorwaerts{5} im ersten Schritt durch ersetzen aller #1 mit 5:

Open in Online-Editor
\cs_set:Npn \zahl_ausgeben:n 5 {5}
\int_step_function:nnnN {1} {1} {5} \zahl_ausgeben:n

Das bedeutet, \zahl_ausgeben:n wird bei Dir ohne Parameter definiert! Kein Wunder, dass es dann Fehler gibt! Mit der neuen Definition passiert durch Austauschen aller #1 mit 5 und aller ## mit #:

Open in Online-Editor
\cs_set:Npn \zahlen_ausgeben:n #1 {#1}
\int_step_function:nnnN {1} {1} {5} \zahlen_ausgeben:n

Beachte, dass ich hier \cs_new_protected:Npn für \zahlen_vorwaerts:n verwendet habe, da die innere Definition von \zahlen_ausgeben:n eh dafür sorgt, dass \zahlen_vorwaerts:n nicht expandierbar ist.

Auf der anderen Seite: wenn die Zahlen ein einheitliches Format haben sollen, dann wäre sowieso zu empfehlen, die Ausgabefunktion separat zu definieren:

Open in Online-Editor
\documentclass{article}
\usepackage{expl3}
\usepackage{xparse}

\ExplSyntaxOn
\cs_new:Npn \zahlen_ausgeben:n #1 {#1}

\cs_new:Npn \zahlen_vorwaerts:n #1
  { \int_step_function:nnnN {1} {1} {#1} \zahlen_ausgeben:n }

\cs_new:Npn \zahlen_rueckwaerts:n #1
  { \int_step_function:nnnN {#1} {-1} {1} \zahlen_ausgeben:n }

\NewDocumentCommand \Vorwaerts {m}
  { \zahlen_vorwaerts:n {#1} }

\NewDocumentCommand \Rueckwaerts {m}
  { \zahlen_rueckwaerts:n {#1} }
\ExplSyntaxOff

\begin{document}

\Vorwaerts{5} \par
\Rueckwaerts{5}

\end{document}
Permanenter link

beantwortet 22 Mai, 04:39

Clemens's gravatar image

Clemens
19.0k112960

bearbeitet 23 Mai, 06:32

Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×15
×8

Frage gestellt: 21 Mai, 16:58

Frage wurde angeschaut: 461 Mal

Zuletzt aktualisiert: 23 Mai, 06:32