Die folgende Quelle funktioniert wie gezeigt.
Gibt es eine Möglichkeit, den auskommentierten \foreach
Codeblock so zu ändern, dass er dasselbe tut wie die beiden separaten Zeilen darüber?
Wenn er auskommentiert ist, \foreach
erzeugt der Block (wie korrigiert) zwar die zwei Punkte, aber die Beschriftung unter dem ersten Punkt ist falsch: Sie wird wörtlich als (1/pi, 0) angezeigt, während ich das Ergebnis von (1/\pi, 0) anzeigen möchte, nämlich (1/π,0).
(Dies ist ein Spielzeugbeispiel. In der Praxis wird es mehr Punkte geben, daher der Wunsch, eine Schleifenkonstruktion zu verwenden.)
\documentclass[tikz,border=0pt]{standalone}
\begin{document}
\begin{tikzpicture}[domain=0:1,x=7cm,y=2cm]
% axis:
\draw[->,gray,thick] (-0.2,0) -- (1.15,0) node[right,black] {$x$};
% points:
\fill (1/pi, 0) circle[radius=2pt] node[below] {$(1/\pi, 0)$};
\fill (1, 0) circle[radius=2pt] node[below] {$(1, 0)$};
% The following does NOT work!
% \foreach \Point in {(1/pi,0), (1,0)} {
% \fill \Point circle[radius=2pt] node[below] {$\Point$};
% };
\end{tikzpicture}
\end{document}
Antwort1
Ich würde vorschlagen, die \foreach
Schleife einfach mit einer zweiten Variable anzupassen, in der Sie das zu setzende Zeichen angeben. Wenn die zweite Variable nicht in der Liste angegeben ist, wird stattdessen die vorherige Variable verwendet.
Dies ermöglicht Ihnen
\foreach \Point/\Label in {{(1/pi, 0)}/{(1/\pi, 0)}, (1, 0)}
\fill \Point circle[radius=2pt] node[below] {$\Label$};
und beide \Point
werden in der zweiten Iteration \Label
enthalten sein .(1, 0)
Sie können jedoch l3regex
das Paket von LaTeX3 verwenden, um Text wie pi
durch die Steuersequenz zu ersetzen \pi
. Wenn es nur pi
/ ist \pi
, sollte dies ausreichen, aber bei komplexeren Beispielen wird es nicht so einfach sein. Der zweite Eintrag sollte eigentlich 11° und nicht nur 11 lauten, oder nicht?
Das xstring
Paket enthält \StrSubstitute
zwar welche, aber die Verwendung mit mehr als einem Ersatz wird mühsamer.
Code
\documentclass[tikz]{standalone}
\ExplSyntaxOn
\DeclareDocumentCommand{\tikzmathreplacer}{m}{
\tl_set:Nx \l_tmpa_tl { #1 }
\regex_replace_case_all:nN {
{ pi }{ \c{pi} }
{ sin }{ \c{sin} }
{ * }{ }
} \l_tmpa_tl
\tl_use:N \l_tmpa_tl
}
\ExplSyntaxOff
\begin{document}
\begin{tikzpicture}[domain=0:1,x=7cm,y=2cm]
\draw[->,gray,thick] (-0.2,0) -- (1.15,0) node[right,black] {$x$};
\foreach \Point/\Label in {{(1/pi, 0)}/{(1/\pi, 0)}, (1, 0)}
\fill \Point circle[radius=2pt] node[below] {$\Label$};
\end{tikzpicture}
\begin{tikzpicture}[domain=0:1,x=7cm,y=2cm]
\draw[->,gray,thick] (-0.2,0) -- (1.15,0) node[right,black] {$x$};
\foreach \Point in {(1/pi, 0), ({pi * sin(11)}, 0), (1, 0)}
\fill \Point circle[radius=2pt] node[below] {$\tikzmathreplacer{\Point}$};
\end{tikzpicture}
\end{document}