Anschlussfrage zu: tikz-foreach-fehler-bei-listenerstellung-illegal-parameter-number-in-definition


alt text

Ich habe wie im Verlinkten Thread Listen mit x-Werten erstellt und möchte diese in einem pgfplot platzieren; das tut soweit. Aber die Platzierung der Labels scheitert:

xtick/.expanded = {\xticklist}, % tut %xticklabels/.expanded = {\xticklabelslist}, % tut nicht

Es scheint, wie im verlinkten Thread, an dem underbrace zu liegen, wenngleich dieses protected ist. Kann/muss man das irgendwie noch mehr protecten?

BTW: Ich wollte hier noch das Zahlenformat einstellen, das geht normalerweise mit '\pgfmathprintnumber[fixed zerofill,precision=2]' vor '\pgfmathresult'. Das tut hier schonmal gar nicht bzw. führt zu seltsamen Darstellungen.

Öffne in Overleaf
%\documentclass[]{article}
\documentclass[border=5mm, varwidth]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.13}
\usetikzlibrary{math}

\begin{document}

% Reichweite der Ticks festlegen
\def\Range{0,...,6}

% ticklist erstellen
\newcommand{\xticklist}{}% Name reservieren
\let\xticklist=\empty% Liste erstellen
\makeatletter
\foreach \n  in \Range
{
\pgfmathparse{\n*pi}%
  \ifx\empty\xticklist{} \protected@xdef\xticklist{\pgfmathresult}%
  \else \protected@xdef\xticklist{\xticklist,\pgfmathresult}%
  \fi
}
\makeatother
Tut: \xticklist

% ticklabelist erstellen
\newcommand\Ausgabe{
  \ifnum\n=0 {$\protect\underbrace{\pgfmathresult}_{\n\pi}$}%
  \else 
     \ifnum\n=1 {$\protect\underbrace{\pgfmathresult}_{\approx \pi}$}
     \else {$\protect\underbrace{\pgfmathresult}_{\approx \n\pi}$}
     \fi
  \fi
}

\newcommand{\xticklabelslist}{}% Name reservieren
\let\xticklabelslist=\empty% Liste erstellen
\makeatletter
\foreach \n  in \Range
{
\pgfmathparse{\n*pi}% 
  \ifx\empty\xticklabelslist{} \protected@xdef\xticklabelslist{\Ausgabe}%
  \else \protected@xdef\xticklabelslist{\xticklabelslist,\Ausgabe}%
  \fi
}
\makeatother
Tut auch: \xticklabelslist

Tut hierin aber nur teilweise: \\
\begin{tikzpicture}[]
\begin{axis}[
axis lines=middle, 
xlabel=$x$,xlabel style={anchor=north},
ylabel=$y$,ylabel style={anchor=east},
x axis line style = {-latex}, y axis line style = {-latex},
%
xtick/.expanded = {\xticklist},                        % tut 
%
%xticklabels/.expanded = {\xticklabelslist},    % tut nicht
%
]
\addplot[domain=0:20, samples=300] {sin(deg(x))}; 
\end{axis}
\end{tikzpicture}

\end{document}

gefragt 13 Feb '18, 20:00

cis's gravatar image

cis
9.5k95459491
Akzeptiert-Rate: 29%


Ich würde die Berechnung einfach pgfplots überlassen und dafür die Tick-Nummer \ticknum verwenden:

Öffne in Overleaf
\documentclass[border=5mm, varwidth]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usetikzlibrary{math}

\begin{document}

% Reichweite der Ticks festlegen
\def\Range{0,...,6}

% ticklist erstellen
\newcommand{\xticklist}{}% Name reservieren
\let\xticklist=\empty% Liste erstellen
\makeatletter
\foreach \n  in \Range
{
\pgfmathparse{\n*pi}%
  \ifx\empty\xticklist{} \protected@xdef\xticklist{\pgfmathresult}%
  \else \protected@xdef\xticklist{\xticklist,\pgfmathresult}%
  \fi
}
\makeatother

\begin{tikzpicture}[]
\begin{axis}[
axis lines=middle, 
xlabel=$x$,xlabel style={anchor=north},
ylabel=$y$,ylabel style={anchor=east},
x axis line style = {-latex}, y axis line style = {-latex},
%
xtick/.expanded = {\xticklist},                        % tut 
%
xticklabel = {
  \pgfmathparse{\ticknum*pi}
  $\underbrace{\pgfmathprintnumber{\pgfmathresult}}_{\approx \ticknum\pi}$
},    % tut
%
]
\addplot[domain=0:20, samples=300] {sin(deg(x))}; 
\end{axis}
\end{tikzpicture}

\end{document}

alt text

Prinzipiell kann man aber auch \tick, also den Wert des Ticks verwenden:

Öffne in Overleaf
xticklabel = {
  $\underbrace{\pgfmathprintnumber{\tick}}_{\approx \ticknum\pi}$
},    % tut

oder daraus sogar wieder den Faktor berechnen:

Öffne in Overleaf
xticklabel = {
  \pgfmathparse{\tick/pi}
  $\underbrace{\pgfmathprintnumber{\tick}}_{\approx \pgfmathprintnumber{\pgfmathresult}\pi}$
},    % tut

Siehe auch: http://texwelt.de/wissen/fragen/21551/wie-erstelle-ich-listen-zur-achsenbeschriftung-fur-pgfplots-tikz/21554

Permanenter link

beantwortet 14 Feb '18, 15:20

gast3's gravatar image

gast3
(ausgesetzt)
Akzeptiert-Rate: 53%

bearbeitet 14 Feb '18, 15:27

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
×24
×21
×6

gestellte Frage: 13 Feb '18, 20:00

Frage wurde gesehen: 6,967 Mal

zuletzt geändert: 14 Feb '18, 15:27