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
Code, hier editierbar zum Übersetzen:
\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}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

gefragt 21 Mai '16, 22:58

Cletus's gravatar image

Cletus
1.6k75867
Akzeptiert-Rate: 75%


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

Open in Online-Editor
Code, hier editierbar zum Übersetzen:
\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
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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
Code, hier editierbar zum Übersetzen:
\cs_set:Npn \zahl_ausgeben:n 5 {5}
\int_step_function:nnnN {1} {1} {5} \zahl_ausgeben:n
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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
Code, hier editierbar zum Übersetzen:
\cs_set:Npn \zahlen_ausgeben:n #1 {#1}
\int_step_function:nnnN {1} {1} {5} \zahlen_ausgeben:n
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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
Code, hier editierbar zum Übersetzen:
\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}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Permanenter link

beantwortet 22 Mai '16, 10:39

cgnieder's gravatar image

cgnieder
22.1k253463
Akzeptiert-Rate: 60%

bearbeitet 23 Mai '16, 12:32

Deine Antwort
[Vorschau ausblenden]

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Frage-Themen:

×21
×13

gestellte Frage: 21 Mai '16, 22:58

Frage wurde gesehen: 5,761 Mal

zuletzt geändert: 23 Mai '16, 12:32