Recorre los puntos y etiquétalos con TikZ.

Recorre los puntos y etiquétalos con TikZ.

La siguiente fuente funciona, como se muestra.

¿Hay alguna manera de modificar el bloque de código comentado \foreachpara que haga lo mismo que las dos líneas separadas que se encuentran arriba?

Si se comenta, el \foreachbloque (corregido) produce los dos puntos, pero la etiqueta debajo del primer punto es incorrecta: se muestra literalmente como (1/pi, 0) mientras que quiero que muestre el resultado de $(1/ \pi, 0)$, es decir, (1/π,0).

(Este es un ejemplo de juguete. En la práctica, habrá más puntos, de ahí el deseo de utilizar una construcción en bucle).

\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}

¿Cómo utilizar bucles en lugar de declaraciones separadas para cada punto aquí?

Respuesta1

Sugeriría simplemente ajustar el \foreachbucle con una segunda variable donde especificarías el tet que se va a componer. Si la segunda variable no se especifica en la lista, se utilizará la variable anterior.

Esto le permite hacer

\foreach \Point/\Label in {{(1/pi, 0)}/{(1/\pi, 0)}, (1, 0)}
  \fill \Point circle[radius=2pt] node[below] {$\Label$};

y ambos \Pointy \Labelestarán (1, 0)en la segunda iteración.


Sin embargo, puede utilizar l3regexel paquete LaTeX3 para reemplazar texto como picon la secuencia de control \pi. Si es solo pi/ \piesto debería funcionar, pero con ejemplos más complejos no será tan fácil. La segunda entrada realmente debería decir 11° y no sólo 11, ¿no es así?

El xstringpaquete tiene \StrSubstitutepero usarlo con más de un reemplazo será más tedioso.

Código

\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}

Producción

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

información relacionada