Warum ergibt das folgende Beispiel die Fehlermeldung Paragraph ended before \pgfplots@domain@to@foreach was complete?

Öffne in Overleaf
\documentclass{article}
\usepackage{xparse}
\usepackage{pgfplots}
\pgfplotsset{compat=newest,axis lines=middle}
\ExplSyntaxOn

\NewDocumentCommand \Diagramm {}
  {
    \begin{tikzpicture}
    \begin{axis}[xmin=0,xmax=13.8,ymin=0,ymax=58]
    \addplot[domain=0:13] {4*x};
    \end{axis}
    \end{tikzpicture}
  }

\ExplSyntaxOff

\begin{document}

\Diagramm

\end{document}

gefragt 30 Okt '17, 19:35

Cletus's gravatar image

Cletus
1.6k75866
Akzeptiert-Rate: 75%

bearbeitet 30 Okt '17, 20:31

gast3's gravatar image

gast3
(ausgesetzt)

Wozu denn \ExplSyntaxOn wenn Du dann expl3 gar nicht einsetzt?

(31 Okt '17, 11:22) cgnieder

Das kann gelegentlich nützlich sein, um unbeabsichtigte Wirkungen von Weißraum in der Befehlsdefinition zu vermeiden. Hier ist es aber wohl unnötig (bzw. sogar schädlich).

(31 Okt '17, 18:20) Cletus

o.O auf die Idee bin ich auch noch nie gekommen. Dafür sind die aber auch sicher nicht gedacht.

(31 Okt '17, 18:23) cgnieder

Hier macht sich wieder einmal bemerkbar, dass TeX nicht mit Zeichen, sondern mit Token arbeitet und ein Token aus einem Zeichen und einer Kategorie besteht. Die Festlegung der Token erfolgt zu einem frühen Zeitpunkt im Tokenizer.

Das Problem hier ist nicht xparse, sondern die expl3. Die expl3-Anweisung \ExplSyntaxOn verändert die Kategorie-Codes diverser Zeichen. tikz ist jedoch in seinem eigenen Parser darauf angewiesen, dass diverse Zeichen bestimmte Kategorie-Codes haben. In Deinem Beispiel ist vor allem die Änderung beim Doppelpunkt von other auf letter problematisch:

Öffne in Overleaf
\documentclass{article}
\usepackage{xparse}
\usepackage{pgfplots}
\pgfplotsset{compat=newest,axis lines=middle}

\ExplSyntaxOn

\char_set_catcode_other:n {58}

\NewDocumentCommand \Diagramm {}
  {
    \begin{tikzpicture}
    \begin{axis}[xmin=0,xmax=13.8,ymin=0,ymax=58]
    \addplot[domain=0:13] {4*x};
    \end{axis}
    \end{tikzpicture}
  }

\ExplSyntaxOff

\begin{document}

\Diagramm

\end{document}

Würde funktionieren, ebenso

Öffne in Overleaf
\documentclass{article}
\usepackage{xparse}
\usepackage{pgfplots}
\pgfplotsset{compat=newest,axis lines=middle}

\NewDocumentCommand \Diagramm {}
  {
    \begin{tikzpicture}
    \begin{axis}[xmin=0,xmax=13.8,ymin=0,ymax=58]
    \addplot[domain=0:13] {4*x};
    \end{axis}
    \end{tikzpicture}
  }

\begin{document}

\Diagramm

\end{document}

weil für xparse selbst kein \ExplSyntaxOn benötigt wird, das benötigt man nur, wenn man tatsächlich expl3-Syntax verwendet, also Befehle wie beispielsweise obiges \char_set_catcode_other:n.

Folgendes würde übrigens aus denselben Gründen nicht funktionieren:

Öffne in Overleaf
\documentclass{article}
\usepackage{xparse}
\usepackage{pgfplots}
\pgfplotsset{compat=newest,axis lines=middle}

\catcode`:=11\relax
\NewDocumentCommand \Diagramm {}
  {
    \begin{tikzpicture}
    \begin{axis}[xmin=0,xmax=13.8,ymin=0,ymax=58]
    \addplot[domain=0:13] {4*x};
    \end{axis}
    \end{tikzpicture}
  }
\catcode`:=12\relax

\begin{document}

\Diagramm

\end{document}

Übrigens funktioniert auch das und zeigt ebenfalls, wie Token hier eine Rolle spielen:

Öffne in Overleaf
\documentclass{article}
\usepackage{xparse}
\usepackage{pgfplots}
\pgfplotsset{compat=newest,axis lines=middle}

\catcode`\%=\active
\def%{:}
\ExplSyntaxOn
\NewDocumentCommand \Diagramm {}
  {
    \begin{tikzpicture}
    \begin{axis}[xmin=0,xmax=13.8,ymin=0,ymax=58]
    \addplot[domain=0%13] {4*x};
    \end{axis}
    \end{tikzpicture}
  }
\ExplSyntaxOff
\catcode`\%=14\relax

\begin{document}

\Diagramm

\end{document}

Dabei wird das Prozentzeichen % vorrübergehend zu einem aktiven Zeichen gemacht, das zu einem :-Token der Kategorie other (das ist die Standardkategorie des Doppelpunkts) expandiert. Daher kann das % bei der domain-Angabe an Stelle des : verwendet werden. Solche Tricksereien sind bei TeX nichts wirklich ungewöhnliches, machen es aber umso schwerer, TeX-Code zu analysieren.

Permanenter link

beantwortet 30 Okt '17, 20:16

gast3's gravatar image

gast3
(ausgesetzt)
Akzeptiert-Rate: 53%

bearbeitet 30 Okt '17, 20:32

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:

×298
×13
×5
×4

gestellte Frage: 30 Okt '17, 19:35

Frage wurde gesehen: 5,446 Mal

zuletzt geändert: 31 Okt '17, 18:23