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

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

gefragt 30 Okt '17, 19:35

Cletus's gravatar image

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

Würde funktionieren, ebenso

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

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

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

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

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 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:

×298
×13
×5
×4

gestellte Frage: 30 Okt '17, 19:35

Frage wurde gesehen: 5,693 Mal

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