포인트를 반복하고 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같은 텍스트를 바꿀 수 있습니다 . 단지 / 이것이 해야 한다면 더 복잡한 예에서는 그렇게 쉽지 않을 것입니다. 두 번째 항목은 실제로 11°가 아니라 11°로 읽어야 합니다. 그렇죠?pi\pipi\pi

패키지 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}

산출

여기에 이미지 설명을 입력하세요

여기에 이미지 설명을 입력하세요

관련 정보