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

cis's gravatar image

cis
7.5k14159253
Akzeptiert: 72%


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, 09:20

Ijon%20Tichy's gravatar image

Ijon Tichy
7.6k11019

bearbeitet 14 Feb, 09:27

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:

×236
×21
×14
×2

Frage gestellt: 13 Feb, 14:00

Frage wurde angeschaut: 718 Mal

Zuletzt aktualisiert: 14 Feb, 09:27