좌표 목록과 함께 tikz foreach의 사소하지 않은 사용법

좌표 목록과 함께 tikz foreach의 사소하지 않은 사용법

다음 코드를 작동시키는 데 어려움을 겪고 있습니다.

\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}

\foreach \point in {(0,0),(0,2),(2,0),(2,2)} {
    \begin{scope}[shift={\point}]
        \fill (0,0) circle (0.1) ;
    \end{scope}
}

\end{tikzpicture}

\end{document}

로그에는 다음이 포함됩니다.

패키지 tikz 오류: 이 좌표를 구문 분석할 수 없습니다.

설명은 tikz 패키지 설명서를 참조하세요. 즉각적인 도움을 받으려면 H를 입력하세요. ...
l.11 } 이 오류 메시지는 \errmessage 명령에 의해 생성되었으므로 명시적인 도움을 드릴 수 없습니다. 당신이 에르큘 포와로인 척: 모든 단서를 조사하고 순서와 방법에 따라 진실을 추론하세요.

누락된 문자: ( 글꼴에 nullfont!

누락된 문자: 글꼴 nullfont에 0이 없습니다!

누락된 문자: nullfont 글꼴에 가 없습니다!

누락된 문자: 글꼴 nullfont에 0이 없습니다!

누락된 문자: nullfont 글꼴에 )가 없습니다!

이러한 좌표를 직접 사용할 수 있는 방법이 있습니까? 아니면 X/Y 스타일을 사용해야 합니까?

업데이트: (()가 문제를 해결한다는 주장을 해결하기 위해). 콘솔을 통해 Miktex 설치를 완전히 업데이트했습니다. 그러나 다음 줄(shift + () 사용과 직접 연결됨)은 여전히 ​​나타납니다.

파일: epstopdf-sys.cfg 2021/03/18 v2.0 MiKTeX용 Eptopdf 구성 ))

누락된 문자: nullfont 글꼴에 )가 없습니다!

누락된 문자: nullfont 글꼴에 )가 없습니다!

누락된 문자: nullfont 글꼴에 )가 없습니다!

누락된 문자: nullfont 글꼴에 )가 없습니다!

[1]

목록의 각 좌표에 대해 정확히 하나의 버팀대(다른 수의 포인트로 확인됨)

답변1

TikZ 파서(좌표를 구문 분석하는 데에도 사용됨 shift)가 이해하지 못하는 것을 발견하면 일반적으로 그 앞에 있는 것을 확장하려고 시도합니다.

이는 이유

\fill \point circle (0.1);

문제없이 작동합니다.

사용자가 잘못된 구문을 작성하는 경우 TikZ는 내부 카운터를 감소시키고 이 카운터가 0에 도달할 때까지만 확장 전술을 시도하므로 안전 장치를 갖추고 있습니다. 이 카운터는 일반적으로 100에서 시작하고 경우에 따라 1 또는 10씩 감소합니다.

특정 장소에서는 이 카운터가 100으로 재설정됩니다(예: 경로 시작 부분).

\fill[shift=\point] (0,0) circle (0.1) ;

작동) 또는 파서가 유효한 경로 사양을 성공적으로 찾은 경우. 그것재설정되지 않습니다그림의 시작 부분이나 범위의 시작 부분에. 그리고 이는 여전히 기본값이고 해당 시점에서 0으로 초기화되므로 구문 분석 시 오류가 발생합니다.

shift=(\point)일어나는 모든 일이 또 다른 확장이 있기 때문에 works를 사용하면 다음과 같은 경고가 발생합니다.

Missing character: There is no ) in font nullfont!

이제 구문 분석을 시도하기 때문입니다.

((0,0))
그리고 무슨 일이 일어나는지는 파서가 인식한다는 것입니다(0그러면 파서가 다음과 같이엑스좌표 값과 두 번째 값0와이값. 그러나 TeX 입력 스트림의 마지막 부분은 )마치 마치 했던 것과 비슷합니다.

\path;
Foo
\path;

이제 왜 (0오류가 발생하지 않습니까? PGF/TikZ의 많은 것들과 마찬가지로 이것은 PGFmath에 공급되어 평가될 것입니다. 그리고 PGFmath에는 문제가 없습니다. 노력하다

\pgfmathparse{(((((1}\pgfmathresult

또는

\pgfmathparse{1))))}\pgfmathresult

의견에서 제안한 대로 및를 사용 \expanded하는 대신\noexpand.expanded키 핸들러이는 키에 값을 제공하기 전에 PGFkeys에 값을 확장하도록 지시합니다.

scope(또는 환경이나 키를 패치하거나 shift카운터를 수동으로 재설정하지만 TikZ가 자체적으로 확장하지 않는 경우 키 핸들러를 사용하면 항상 다른 위치에서 매우 잘 작동합니다.)

암호

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\foreach \point in {(0,0),(0,2),(2,0),(2,2)} {
  \begin{scope}[shift/.expanded=\point]
    \fill (0,0) circle[radius=.1];
  \end{scope}
}
\end{tikzpicture}
\end{document}

관련 정보