
LaTeX 및 TikZ를 사용하면 거리 작업과 동일한 명령으로 Line-To 작업을 사용할 수 있습니까? 직사각형을 그린 다음 직사각형 위쪽 가장자리의 중간점에 명명된 노드를 만들고 싶습니다. 이를 위해 거리 작업을 사용하여 직사각형의 중심을 찾은 다음 Line-To 작업을 사용하여 위쪽 가장자리를 찾습니다. 작동해야 한다고 생각하지만 작동하지 않는 MWE 코드는 아래를 참조하세요.
\documentclass[11pt]{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\node (A) at (0,0) {};
\node (B) at (10,10) {};
\node [above right] at (A) {A};
\node [below left] at (B) {B};
\draw [draw=black] (B) rectangle (A);
\node at ($(A)!0.5!(B)$ |- B) {Top of Rect [incorrect]};
\node (ABMid) [below] at ($(A)!0.5!(B)$) {Midpoint AB};
\node (rectTop) [above] at (ABMid|-B) {Top of Rect [correct]};
\end{tikzpicture}
\end{document}
답변1
나는 맨 윗줄 중앙의 좌표를 얻기 위해 그러한 수학적 계산을 사용하지 않을 것입니다. 경로의 노드는 매우 지능적으로 배치될 수 있습니다.
여기서 문제는 원래 rectangle
경로의 노드 배치가 두 좌표 사이의 직선에만 있으므로 다음 두 경로의 노드가 동일한 위치에 있다는 것입니다 <pos>
.
\path (c1) -- node[pos=<pos>] {} (c2);
\path (c1) rectangle node[pos=<pos>] {} (c2);
세 가지 해결책을 알려드리겠습니다.
- 단순한 보조 좌표입니다.
- 경로를 두 개의 / 경로
rectangle
로 바꿉니다 .|-
-|
- 적절한 사용시간제 노동자내
rectangle
경로를 통한 경로 에 대한 함수ext.paths.timer
tikz-ext
패키지.
솔루션 1
보조 좌표를 사용하면 간단히 할 수 있습니다
\draw (B) rectangle coordinate (aux1) (A) node[above] at (aux1 |- B) {Top of the Rect};
암호
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\coordinate [label=above right:A] (A) at (0,0);
\coordinate [label=below left:B] (B) at (20,10);
\draw (B) rectangle coordinate (aux1) (A) node[above] at (aux1 |- B) {Top of the Rect};
\end{tikzpicture}
\end{document}
솔루션 2
|-
두 개의 결합된 or -|
및 위치 .75
또는 .25
(각각) 을 사용합니다 . 모서리의 위치는 .5
(→결합된 TikZ 경로의 노드).
암호
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\coordinate [label=above right:A] (A) at (0,0);
\coordinate [label=below left:B] (B) at (20,10);
\draw (B) -| node[pos=.25, above] {Top of the Rect} (A) -| (B);
\end{tikzpicture}
\end{document}
솔루션 3
라이브러리 를 로드한 다음 ( )를 사용하여 첫 번째(상단) 측면의 중간에 액세스할 ext.paths.timer
수 있습니다 .very near start
pos = 0.125
암호
\documentclass[tikz]{standalone}
\usetikzlibrary{ext.paths.timer}
\begin{document}
\begin{tikzpicture}
\coordinate [label=above right:A] (A) at ( 0, 0);
\coordinate [label=below left:B] (B) at (20,10);
\draw (B) rectangle node[very near start, above] {Top of the Rect} (A);
\end{tikzpicture}
\end{document}
산출
답변2
편집: 하단에 인라인 계산이 표시됩니다.
원칙적으로 그렇습니다. 아래 내용은 실제로 최적화하지 않았으므로 다소 줄일 수 있습니다.
let
연산자(라이브러리에서도 제공됨 ) 를 활용할 수 있습니다 calc
.
당신이 원하는 것은 최대값을 얻는 것입니다.와이좌표를 맞춘 다음 절반을 선택합니다.엑스동등 어구. 그래서 당신은엑스그리고와이각 지점의 좌표.
게다가 당신은해야절대node
! 를 사용하여 좌표를 지정합니다 . 이는 매우 예상치 못한 문제를 야기할 수 있습니다. 노드는 크기를 유지하지만 좌표는 유지하지 않는다는 점을 기억하세요.
나는 당신의 시스템을 다음과 같이 할 것입니다 :
\begin{tikzpicture}
\coordinate (A) at (0,0);
\node[above right] at (A) {A};
\coordinate (B) at (10,10);
\node[below left] at (B) {B};
\draw [draw=black] (A) rectangle (B);
\draw let \p1 = (A),
\p2 = (B),
\n{x} = {(\x1+\x2)/2},
\n{y} = {max(\y1,\y2)} in
(\n{x},\n{y}) node[above] {Top of Rect [incorrect]};
\coordinate (ABMid) at ($(A)!0.5!(B)$);
\node at (ABMid) {Midpoint AB};
\end{tikzpicture}
물론 좌표가 필요하지 않다면 ABMid
그냥 하세요.\node at ($(A)!.5!(B)$) {...};
위의 작업은 계산입니다.길에그만큼엑스그리고와이당신의 최고 지점의 좌표. \p<int> = (<coordinate>)
절약할 것이다엑스그리고와이\x<int>,\y<int>
라인 내에서 추가 계산을 위해 let
. 라인 \n{x}
은 다음을 계산합니다.엑스-최고점의 좌표 및 \n{y}
선은 최대값을 계산합니다.와이-동등 어구.
위 결과는 다음과 같습니다.
나는 당신이 정말로 뭔가 인라인을 원한다는 것을 깨달았습니다. (가능하지만못생긴). 따라서 당신이 할 수 있는 일은 B
에서 시작하는 수직선에 투영한 A
다음 이 와 사이의 중간점을 계산하는 것입니다 B
. 그러면 필요한 선의 중간 지점을 얻을 수 있습니다.
그래서 이것은 이것을 통해 이루어질 수 있습니다모호건설하다:
\coordinate (ABMidTop) at ($(A)!(B)!($(A)+(0,1)$)!.5!(B)$);
\node[above] at (ABMidTop) {Top of Rect [incorrect]};
다음과 같이 읽어야 합니다. 에
선을 그린 다음 이 선에 투영합니다. 그런 다음 이전에 계산된 지점과 의 중간 지점을 취합니다 .A
A+(0,1)
B
B