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, 14:35

Cletus's gravatar image

Cletus
1.2k1340
Akzeptiert: 70%

bearbeitet 30 Okt, 15:31

Ijon%20Tichy's gravatar image

Ijon Tichy
5.8k1919

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

(31 Okt, 06:22) Clemens

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, 13:20) Cletus

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

(31 Okt, 13:23) Clemens

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, 15:16

Ijon%20Tichy's gravatar image

Ijon Tichy
5.8k1919

bearbeitet 30 Okt, 15: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

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:

×200
×10
×4
×4

Frage gestellt: 30 Okt, 14:35

Frage wurde angeschaut: 219 Mal

Zuletzt aktualisiert: 31 Okt, 13:23