`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