Следующий источник работает, как показано.
Есть ли способ изменить закомментированный \foreach
блок кода так, чтобы он делал то же самое, что и две отдельные строки над ним?
Если его закомментировать, \foreach
блок (исправленный) действительно выдает две точки, но метка под первой точкой неверна: она отображается буквально как (1/пи, 0), тогда как я хочу, чтобы она отображала результат $(1/\пи, 0)$, а именно, (1/π, 0).
(Это игрушечный пример. На практике точек будет больше, отсюда и желание использовать циклическую конструкцию.)
\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}
решение1
Я бы предложил просто настроить \foreach
цикл со второй переменной, где вы указали бы текст, который нужно набрать. Если вторая переменная не указана в списке, вместо нее будет использоваться предыдущая переменная.
Это позволяет вам делать
\foreach \Point/\Label in {{(1/pi, 0)}/{(1/\pi, 0)}, (1, 0)}
\fill \Point circle[radius=2pt] node[below] {$\Label$};
\Point
и оба \Label
будут (1, 0)
во второй итерации.
Однако вы можете использовать пакет LaTeX3 l3regex
для замены текста, например, pi
с помощью управляющей последовательности \pi
. Если это просто pi
/, \pi
то это должно сработать, но с более сложными примерами это будет не так просто. Вторая запись должна действительно читаться как 11°, а не просто 11, не так ли?
В комплекте xstring
есть \StrSubstitute
, но использовать его с более чем одной заменой будет более утомительно.
Код
\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}