以下原始碼有效,如圖所示。
有沒有辦法改變註解掉的\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}