Innerhalb eines Befehls, der eine ganze Beamer-Folie definiert, benötige ich eine Schleife. Doch führt das bei Verwendung des momentanen Zählerwerts der Schleife zu einer Fehlermeldung:

! Illegal parameter number in definition of \iterate.
<to be read again> 
                   1
l.18 \MeinBefehl{Argument}

Die Ausgabe ist zwar erwartungsgemäß, aber wie vermeide ich diese Meldung?

\documentclass{beamer}
\usepackage{xparse}

\ExplSyntaxOn

\NewDocumentCommand \MeinBefehl {m}
  {
    \begin {frame}
    \frametitle {Titel}
    #1
    \int_step_inline:nnnn {1} {1} {5} {##1}
    \end {frame}
  }

\ExplSyntaxOff

\begin{document}
\MeinBefehl{Argument}
\end{document}

gefragt 23 Jan '20, 16:42

Cletus's gravatar image

Cletus
1.6k45566
Akzeptiert-Rate: 75%


frame ist eine ziemlich eigenartige Umgebung und man sollte keinesfalls erwarten, dass Argumentexpansion und ähnliche Dinge darin ganz normal funktioniert. So ginge beispielsweise bereits:

\documentclass{beamer}
\usepackage{xparse}

\begin{document}
  \ExplSyntaxOn
  \begin {frame}
    \frametitle {Titel}
    Argument
    \int_step_inline:nnnn {1} {1} {5} {#1}
  \end {frame}
  \ExplSyntaxOff
\end{document}

genauso schief. Vermeidet man jedoch das #1 bzw. in Deinem Beispiel das ##1 innerhalb des frames, indem man eine passende Benutzeranweisung definiert, dann funktioniert es:

\documentclass{beamer}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand \OneToX {m}
  {
    \int_step_inline:nn {#1} {##1}
  }

\ExplSyntaxOff

\NewDocumentCommand \MeinBefehl {m}
  {
    \begin {frame}
    \frametitle {Titel}
    #1
    \OneToX{5}
    \end {frame}
  }

\begin{document}
  \MeinBefehl{Argument}
\end{document}
Permanenter link

beantwortet 23 Jan '20, 17:45

saputello's gravatar image

saputello
11.1k154365
Akzeptiert-Rate: 51%

bearbeitet 23 Jan '20, 17:46

Deine Antwort
Vorschau umschalten

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

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ügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×138
×21
×13
×7

gestellte Frage: 23 Jan '20, 16:42

Frage wurde gesehen: 3,210 Mal

zuletzt geändert: 23 Jan '20, 17:46