Überarbeitungsverlauf[Zurück]
Klicke auf Einblenden/Ausblenden von Überarbeitungen 2

14 Feb '18, 19:02

gast3's gravatar image

gast3
(ausgesetzt)

`pgf` bietet selbst Vergleiche innerhalb von Ausdrücken. Man findet entsprechendes in Kapitel 89 der `pgf`-Anleitung. Im Beispiel genügt: xticklabel={% $\pgfmathparse{abs(\tick) == pi ? ( \tick < 0 ? "-" : "" ) : int(\tick / pi) }% \pgfmathresult\pi$% } Man kann den Ausdruck auch als xticklabel={% $\pgfmathparse{ \tick == -pi ? "-" : ( \tick == pi ? "" : int(\tick / pi) ) }% \pgfmathresult\pi$% } schreiben. Vorn steht jeweils die Bedingung, nach dem Fragezeichen kommt der Fall, dass die Bedingung zutrifft, nach dem Doppelpunkt der Fall, dass die Bedingung nicht zutrifft. Wenn also `\tick` = -pi ist (der Vergleichsoperator verwendet `==` nicht `=`!) dann wird `\pgfmathresult` zu dem String `-`. `-` (Minuszeichen). Bei `\tick` = pi dagegen ein Leerstring. In allen anderen Fällen wird der Integerwert von `\tick / pi` verwendet. Insgesamt führt dann beispielsweise: \documentclass[border=5mm, varwidth]{standalone} \usepackage{pgfplots} \pgfplotsset{compat=newest} \begin{document} % Reichweite der Ticks festlegen \def\Range{-6,...,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 Anzeigen: \xticklist \begin{tikzpicture}[] \begin{axis}[enlarge y limits={0.5,upper}, % kein Effekt 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}, xticklabel={% $\pgfmathparse{ \tick == -pi ? "-" : ( \tick == pi ? "" : int(\tick / pi) ) }% \pgfmathresult\pi$% }, ] \addplot[domain=-10:10, samples=300] {sin(deg(x))}; \end{axis} \end{tikzpicture} \end{document} zu: [![-1 und 1 ersetzt][1]][1] Manchmal werden scharfe Vergleiche mit `==` allerdings knapp daneben liegen. Dann muss man ggf. entweder zuerst runden oder *unschafte* *unscharfe* Vergleiche der Art `(\tick > (0.999 * pi)) && (\tick < (1.001 * pi))) ? … : …` verwenden – oder auf Lua-Code ausweichen. [1]: http://texwelt.de/wissen/upfiles/test_20180214_171403.png
Klicke auf Einblenden/Ausblenden von Überarbeitungen 1

14 Feb '18, 17:34

gast3's gravatar image

gast3
(ausgesetzt)

`pgf` bietet selbst Vergleiche innerhalb von Ausdrücken. Man findet entsprechendes in Kapitel 89 der `pgf`-Anleitung. Im Beispiel genügt: xticklabel={% $\pgfmathparse{abs(\tick) == pi ? ( \tick < 0 ? "-" : "" ) : int(\tick / pi) }% \pgfmathresult\pi$% } Man kann den Ausdruck auch als xticklabel={% $\pgfmathparse{ \tick == -pi ? "-" : ( \tick == pi ? "" : int(\tick / pi) ) }% \pgfmathresult\pi$% } schreiben. Vorn steht jeweils die Bedingung, nach dem Fragezeichen kommt der Fall, dass die Bedingung zutrifft, nach dem Doppelpunkt der Fall, dass die Bedingung nicht zutrifft. Wenn also `\tick` = -pi ist (der Vergleichsoperator verwendet `==` nicht `=`!) dann wird `\pgfmathresult` zu dem String `-`. Bei `\tick` = pi dagegen ein Leerstring. In allen anderen Fällen wird der Integerwert von `\tick / pi` verwendet. Insgesamt führt dann beispielsweise: \documentclass[border=5mm, varwidth]{standalone} \usepackage{pgfplots} \pgfplotsset{compat=newest} \begin{document} % Reichweite der Ticks festlegen \def\Range{-6,...,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 Anzeigen: \xticklist \begin{tikzpicture}[] \begin{axis}[enlarge y limits={0.5,upper}, % kein Effekt 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}, xticklabel={% $\pgfmathparse{ \tick == -pi ? "-" : ( \tick == pi ? "" : int(\tick / pi) ) }% \pgfmathresult\pi$% }, ] \addplot[domain=-10:10, samples=300] {sin(deg(x))}; \end{axis} \end{tikzpicture} \end{document} [![-1 und 1 ersetzt][1]][1] Manchmal werden scharfe Vergleiche mit `==` allerdings knapp daneben liegen. Dann muss man ggf. entweder zuerst runden oder *unschafte* Vergleiche der Art `(\tick > (0.999 * pi)) && (\tick < (1.001 * pi))) ? … : …` verwenden – oder auf Lua-Code ausweichen. [1]: http://texwelt.de/wissen/upfiles/test_20180214_171403.png