%EC%97%90%20%ED%95%B4%EB%8B%B9%ED%95%98%EB%8A%94%20PGF.png)
PostScript(및 rmoveto
) 와 마찬가지로 rlineto
TikZ는 현재 지점의 상대적 이동을 생성하는 것을 간단하게 만듭니다. PGF에서 동등한 것을 볼 수 없습니다. 누락되었나요? 그렇다면 그 이유를 쉽게 말할 수 있습니까? (그리고 PFG에서 대체할 의도는 무엇입니까?) 상대 이동이 시스템 계층에 대해 충분히 낮은 수준이 아니더라도(믿기 어렵습니까?) 기본 계층에 대해서는 충분히 낮은 수준으로 보입니다.
편집(관련 검색어):더 이상 사용 되지 \pgfrelative
않습니까(현재 매뉴얼에는 없음)? 그리고 현재 지점을 생성하는 PGF 명령은 무엇입니까?
답변1
다음 예에서는 두 개의 새로운 매크로 \pgfpathrlineto{<coord>}
및가 \pgfpathrmoveto{<coord>}
제공됩니다. 완전히 테스트되지 않았으므로 주의하세요.
실제로 마지막 지점의 원래(변환되지 않은) 좌표를 추적해야 하지만 여기서는 변환된 좌표를 \pgf@x
저장 \pgf@y
합니다.
요점은 에서 (x, y) -- ++(2, 3)
변환 전 예상되는 라인은 이고 (x, y) -- (x+2, y+3)
, 다음 예에서 구현한 것은 이며 (x, y) -- ($ (x, y) + T'(2, 3) $)
, T'
변환의 반전은 어디에 있습니까?
\documentclass{article}
\usepackage{pgf}
\makeatletter
\def\pgf@path@last@point{%
\pgfpoint{\pgf@path@lastx}{\pgf@path@lasty}}
% rlineto
\def\pgfpathrlineto#1{%
\pgf@process{#1}%
\global\advance\pgf@x\pgf@path@lastx
\global\advance\pgf@y\pgf@path@lasty
% similar to \pgfpathlineto, but without applying transformation
\pgf@nlt@lineto{\pgf@x}{\pgf@y}%
\global\pgf@path@lastx=\pgf@x
\global\pgf@path@lasty=\pgf@y
}
% rmoveto
\def\pgfpathrmoveto#1{%
\pgf@process{#1}%
\global\advance\pgf@x\pgf@path@lastx
\global\advance\pgf@y\pgf@path@lasty
% similar to \pgfpathlineto, but without applying transformation
\pgf@nlt@moveto{\pgf@x}{\pgf@y}%
\global\pgf@path@lastx=\pgf@x
\global\pgf@path@lasty=\pgf@y
}
\makeatother
\begin{document}
\begin{pgfpicture}
\pgfpathmoveto{\pgfpointorigin}
\pgfpathlineto{\pgfpoint{20pt}{0pt}}
\pgfpathmoveto{\pgfpoint{40pt}{0pt}}
\pgfpathlineto{\pgfpoint{60pt}{0pt}}
\pgfusepath{draw}
\pgftransformshift{\pgfpoint{10pt}{10pt}}
\pgfsetcolor{red}
\pgfpathmoveto{\pgfpointorigin}
\pgfpathlineto{\pgfpoint{20pt}{0pt}}
\pgfpathmoveto{\pgfpoint{40pt}{0pt}}
\pgfpathlineto{\pgfpoint{60pt}{0pt}}
\pgfusepath{draw}
\end{pgfpicture}
\qquad
% use r(line|move)to
\begin{pgfpicture}
\pgfpathmoveto{\pgfpointorigin}
\pgfpathrlineto{\pgfpoint{20pt}{0pt}}
\pgfpathrmoveto{\pgfpoint{20pt}{0pt}}
\pgfpathrlineto{\pgfpoint{20pt}{0pt}}
\pgfusepath{draw}
\pgftransformshift{\pgfpoint{10pt}{10pt}}
\pgfsetcolor{red}
\pgfpathmoveto{\pgfpointorigin}
\pgfpathrlineto{\pgfpoint{20pt}{0pt}}
\pgfpathrmoveto{\pgfpoint{20pt}{0pt}}
\pgfpathrlineto{\pgfpoint{20pt}{0pt}}
\pgfusepath{draw}
\end{pgfpicture}
\end{document}