
考慮下面的 LaTeX 手稿。
\documentclass[tikz,convert]{standalone}
\begin{document}
\begin{tikzpicture}
\draw (1,0) -- (0,1) node[midway,sloped] {$y$};
\end{tikzpicture}
\end{document}
結果影像是
如果我們添加allow upside down
到節點的選項清單中,結果圖像是
為什麼 TikZ 決定定位第二個y
為什麼 TikZ 決定以這種方式?為什麼它的方向不像第一個?畢竟,該選項僅被稱為允許顛倒過來,不必需的倒掛?事實上,如果座標的順序交換,第二個座標y
的方向與第一個座標的方向相同。
是什麼規則TikZ 使用它來確定如何定向y
,這樣,知道了它,我就可以提前預測結果會是什麼樣子?
答案1
\pgftransformlineattime
這與手冊版本 TikZ v3.0.1a 的第 103.2.2 節相關。粗略解釋一下直線情況(曲線情況類似):
第一部分與此行為無關,即計時器 0 為起點、1 為終點的概念。因此,在處理了一些黑魔法之後pos=0.5
(from midway
) 被處理,我們知道節點放置點在哪裡。如果sloped
啟用,則執行簡單的計算(x1-x0)
。(y1-y0)
如果allow upside down
啟用則(x1-x0)
檢查。如果 x 差為負,則翻轉終點的符號,否則不會發生任何情況,並使用指向終點的歸一化向量並設定座標變換。然後該節點服從該變換。
對於有興趣的人來說,這裡是上面粗略故事的程式碼版本。
\def\pgftransformlineattime#1#2#3{%
\pgf@process{#2}%
\pgf@xb=\pgf@x% xb/yb = start point
\pgf@yb=\pgf@y%
\pgf@process{#3}%
\pgf@xc=\pgf@x% xc/yc = end point
\pgf@yc=\pgf@y%
\pgftransformshift{\pgfpointlineattime{#1}{\pgfqpoint{\pgf@xb}{\pgf@yb}}{\pgfqpoint{\pgf@xc}{\pgf@yc}}}%
\ifpgfresetnontranslationattime%
\pgftransformresetnontranslations%
\fi%
\ifpgfslopedattime%
\advance\pgf@xc by-\pgf@xb%
\advance\pgf@yc by-\pgf@yb%
\ifpgfallowupsidedownattime%
\else%
\ifdim\pgf@xc<0pt%
\pgf@xc=-\pgf@xc%
\pgf@yc=-\pgf@yc%
\fi%
\fi%
\pgf@x=\pgf@xc%
\pgf@y=\pgf@yc%
\pgfpointnormalised{}% x/y = normalised vector
\pgf@ya=-\pgf@y%
\pgftransformcm%
{\pgf@sys@tonumber{\pgf@x}}{\pgf@sys@tonumber{\pgf@y}}%
{\pgf@sys@tonumber{\pgf@ya}}{\pgf@sys@tonumber{\pgf@x}}{\pgfpointorigin}%
\fi%
}
答案2
與通用矩形的邊緣不同,非空文本框的每個邊緣都可以唯一地分類為文本框的左邊緣、右邊緣、上邊緣或下邊緣,這是由文本中包含的文本流自然引起的。框(假設單一方向性文本,而不是包含英語和希伯來語的文本)。
TikZ 中的非簡併線段是有向的:它們具有唯一確定的起點和唯一確定的終點,因此具有唯一確定的方向,即從起點到終點。因此,TikZ線段自然決定了一個向量。
當線段末端的節點為 時sloped
,其文字與線段平行:此節點封裝的文字方塊的上下邊緣與線段平行。
如果另外allow upside down
指定了該選項,則文字方塊的方向使得文字自然從左到右的流動(假設從左到右的語言,如英語)在線段的方向上發生。換句話說,由從文字方塊的左邊緣到文字方塊的右邊緣的線段點所決定的向量。
如果allow upside down
未指定該選項,則文字方塊的方向使文字底部面向 TikZ 圖片的底部。假設沒有對 TikZ 圖片或節點套用明確旋轉,這意味著從文字方塊中心發出並以直角穿過文字方塊底部的假想射線最終也將穿過頁面的底部邊緣。