循環點並用 TikZ 標記它們

循環點並用 TikZ 標記它們

以下原始碼有效,如圖所示。

有沒有辦法改變註解掉的\foreach程式碼區塊,使其與上面的兩行單獨的行執行相同的操作?

如果註解掉,該\foreach區塊(已修正)確實會產生兩個點,但第一個點下面的標籤是錯誤的:它按字面顯示為 (1/pi, 0) 而我希望它顯示 $(1/ \pi, 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用第二個變數調整循環,您在其中指定要排版的 tet。如果清單中未指定第二個變量,則會使用前一個變數。

這可以讓你做

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

輸出

在此輸入影像描述

在此輸入影像描述

相關內容