像这样:
.------<------.
| |
v ^
| |
'------>------'
我目前正在使用
\begin{scope}[very thick,->]
\draw (-4,1)--(-4,0)--(0.1,0);
\draw (0,0)--(4,0)--(4,1.1);
\draw (4,1)--(4,2)--(-0.1,2);
\draw (0,2)--(-4,2)--(-4,0.9);
\end{scope}
但这不太优雅。我更喜欢
\begin{scope}[very thick,middle decoration=>]
% ^^^^^^^^^^^^^^^^^ a hypothetical option
\draw (-4,0)--(4,0);
\draw (4,0)--(4,2);
\draw (4,2)--(-4,2);
\draw (-4,2)--(-4,0);
\end{scope}
答案1
该decorations
库可用于各种此类用途。遗憾的是,它略显冗长。
\usetikzlibrary{decorations.markings}
\begin{scope}[very thick,decoration={
markings,
mark=at position 0.5 with {\arrow{>}}}
]
\draw[postaction={decorate}] (-4,0)--(4,0);
\draw[postaction={decorate}] (4,0)--(4,2);
\draw[postaction={decorate}] (4,2)--(-4,2);
\draw[postaction={decorate}] (-4,2)--(-4,0);
\end{scope}
答案2
编辑:一个通用的解决方案是将一些样式(比如在中间放置一个箭头)应用到任意路径的每个段。
有两种风格:
风格
on each segment
采用图书馆show path construction
装饰decorations.pathreplacing
在路径的每个部分上应用一些样式(其参数)。该风格使用 Caramdir 的答案(通过库)
mid arrow
的方法来decorations.markings
在路中间放一个箭头(其参数是箭头的颜色)。
首先,序言:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing,decorations.markings}
两种风格:
\tikzset{
% style to apply some styles to each segment of a path
on each segment/.style={
decorate,
decoration={
show path construction,
moveto code={},
lineto code={
\path [#1]
(\tikzinputsegmentfirst) -- (\tikzinputsegmentlast);
},
curveto code={
\path [#1] (\tikzinputsegmentfirst)
.. controls
(\tikzinputsegmentsupporta) and (\tikzinputsegmentsupportb)
..
(\tikzinputsegmentlast);
},
closepath code={
\path [#1]
(\tikzinputsegmentfirst) -- (\tikzinputsegmentlast);
},
},
},
% style to add an arrow in the middle of a path
mid arrow/.style={postaction={decorate,decoration={
markings,
mark=at position .5 with {\arrow[#1]{stealth}}
}}},
}
然后是结果和文档:
\begin{document}
\begin{tikzpicture}
\path [draw=blue,postaction={on each segment={mid arrow=red}}]
(.2,0) -- (3,1) arc (0:180:1.4 and 1) -- cycle
(4,1) circle(.8)
(6,1) ellipse(.5 and 1)
(0,3) to [bend left] (3,4)
(4,3) rectangle (6,4)
;
\end{tikzpicture}
\end{document}
答案3
更新日期:2020-02-22:此代码已被取代,不应再使用。它还嵌套了 tikzpictures,后来我意识到这不太好。Caramdir 的回答是最好的全方位解决方案,但如果你想要一个接近这个的解决方案,那么Kpym 的回答使用pic
s 具有与此相同的精神,但没有缺点。
鉴于您指定的精确语法是不可能的,这里有一些东西可以实现所需的效果,而不必指定中点的坐标。
\documentclass{article}
\thispagestyle{empty}
\usepackage{tikz}
\usetikzlibrary{arrows}
\newcommand{\midarrow}{\tikz \draw[-triangle 90] (0,0) -- +(.1,0);}
\begin{document}
\begin{tikzpicture}
\begin{scope}[very thick, every node/.style={sloped,allow upside down}]
\draw (-4,0)-- node {\midarrow} (4,0);
\draw (4,0)-- node {\midarrow} (4,2);
\draw (4,2)-- node {\midarrow} (-4,2);
\draw (-4,2)-- node {\midarrow} (-4,0);
\end{scope}
\end{tikzpicture}
\end{document}
(arrows
tikz 库只是为了获得更突出的箭头)
得出的结果为:
(不确定右侧的垂直线是什么。它不在原文中,所以一定是 pdf->png 过程中的产物)
答案4
没有任何修饰,只有“独特”的路径,新代码如下:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows}
\begin{document}
\tikzset{%
insert new path/.style={%
insert path={%
node[midway,sloped]{\tikz \draw[#1,thick] (-.2pt,0) -- ++(.2 pt,0);}
}
}
}
\begin{tikzpicture}
\begin{scope}[a/.style = {insert new path = {-triangle 90}}]
\draw[red] (-4,0) -- (4,0) -- (4,2) -- (-4,2) -- (-4,0);
\draw[red] (0,-4pt)--(0,+4pt); % it's a test
\draw (-4,0)-- (4,0)[a] -- (4,2)[a] -- (-4,2)[a] -- (-4,0)[a];
\end{scope}
\end{tikzpicture}
\end{document}
可以使用类似以下方法调整箭头的位置node[midway,sloped,right=-2pt]