答案1
這是一種使用 來做到這一點的方法Tikz
。
基本思路:
- 畫一些線
\node
為下面的標籤添加一些s\draw
上面的一些裝飾路徑- 記住
coordinate
支持這些行動的相關內容 - 定義
/.style
s 來簡化程式碼並僅在一處更改參數 - 嘗試一種平衡的方法,作為新手來說這並不太難遵循,並且使用一些路徑特性來獲得更好的程式碼
線路:
讓我們消化一下第一個。
\draw[bar] (0,0) coordinate (A) -- (1.5,0) coordinate (B) node[a]{$a$};
考慮畫一條簡單的線,首先在絕對座標:
\draw (0,0) -- (1.5,0);
因為Tikz
是關於路徑,以分號結束,所以我們可以新增一個節點,同時在路徑結束之前;
刪除。\
所以這個在到達(1.5,0)後放置一個帶有文字(標籤)的節點;它接受某種樣式的文本a
,即數學模式$a$
:
\draw (0,0) -- (1.5,0) node[a]{$a$};
將線條的樣式資訊放在前面,並將其保留在開頭的樣式部分,以詳細指定此處要繪製的內容:
\draw[bar] (0,0) -- (1.5,0) node[a]{$a$};
最後將\coordinate
語句新增到路徑中,以記住某些位置,並刪除它,\
因為它仍然在要繪製的相同路徑中。你在這:
\draw[bar] (0,0) coordinate (A) -- (1.5,0) coordinate (B) node[a]{$a$};
其他路徑也類似,使用相對運動--++(1.5,0)
、絕對座標的混合,並使用有關此處定義為 5mm 的節點的最小寬度的知識。當然,這可以更有系統地完成。
標籤如下:
% ~~~ labels below ~~~~~~~~~~
\node[mth] at (A) {$1$};
\node[mth] at ([xshift=-2.5mm]C) {$f(i) + 1$};
這非常簡單。第一行使用 style將文字放置$1$
在記住的位置,這恰好使該文字在 y 方向向下移動了一點。(A)
mth
$a$
第二個非常相似,除了按照我的方式放置節點而引入的一些複雜性之外。因此,糾正位置的一種方法是使用(C)
並將其向後移動一點(最小寬度的一半):
([xshift=-2.5mm]C)
。
上支撐:
% ~~~ labels above ~~~~
\draw[decorate,blue] ([ys]A) -- ([ys]B) node[alf]{$\alpha$};
\draw[decorate,blue] ([ys]D) -- ([ys]E) node[alf]{$\alpha$};
它結合了上面的概念,同時使用decorate
tikz-library 提供的decorations.pathreplacing
:
- 它繪製了一條從上方 (A) 到上方 (B) 的路徑
- 用大括號代替它
- 穿藍色衣服
- 在 $\alpha$ 的中間稍微放置一個節點。
樣式塊:
\begin{tikzpicture}[
a/.style={anchor=west,minimum width=5mm}, % for the node containing "a"
bar/.style={{Bar[]}-{Bar[]}}, % start- and end-tipps as Bars
bar2/.style={-{Bar[]}}, % only end-tipp as bar
mth/.style={yshift=-5mm}, % for placing the math-labels
decoration=brace, % the overbrace
alf/.style={midway,yshift=3mm}, % placing \alpha there
ys/.style={yshift=5mm}, % shortcut for these yshifts
]
至少對我來說,這部分是隨著我的發展而發展的,例如這樣:
- 回想一下上面描述的線條部分
- 直接為
draw
and添加有用的樣式選項node
- 它們太長了嗎?或者我至少需要它們兩次?
- 然後將它們移到這裡,並進行一些有用的命名
- 所以稍後我可以在這裡輕鬆調整所有這些標籤移位等
代碼:
\documentclass[10pt,border=3mm,tikz]{standalone}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{decorations.pathreplacing}
\begin{document}
\begin{tikzpicture}[
a/.style={anchor=west,minimum width=5mm}, % for the node containing "a"
bar/.style={{Bar[]}-{Bar[]}}, % start- and end-tipps as Bars
bar2/.style={-{Bar[]}}, % only end-tipp as bar
mth/.style={yshift=-5mm}, % for placing the math-labels
decoration=brace, % the overbrace
alf/.style={midway,yshift=3mm}, % placing \alpha there
ys/.style={yshift=5mm}, % shortcut for these yshifts
]
% ~~~ lines ~~~~~~~~~~~~
\draw[bar] (0,0) coordinate (A) -- (1.5,0) coordinate (B) node[a]{$a$};
\draw[bar] (2,0) coordinate (C) -- (3.5,0) coordinate (D);
\draw[bar2](3.5,0) --++(1.5,0) coordinate (E) node[a]{$a$};
\draw[bar] (5.5,0) --++(1.5,0) node[a]{$P$};
% ~~~ labels below ~~~~~~~~~~
\node[mth] at (A) {$1$};
\node[mth] at ([xshift=-2.5mm]C) {$f(i) + 1$};
\node[mth] at (D) {$i - f(i) + 1$};
\node[mth] at ([xshift=+2.5mm]E) {$i + 1$};
% ~~~ labels above ~~~~
\draw[decorate,blue] ([ys]A) -- ([ys]B) node[alf]{$\alpha$};
\draw[decorate,blue] ([ys]D) -- ([ys]E) node[alf]{$\alpha$};
\end{tikzpicture}
\end{document}