我想添加一些不透明度来绘制几个角度,但箭头(-latex
和-stealth
)是用fill opacity
选项修改的。目前,我正在重新绘制所有角度两次,使用填充选项和不使用填充选项,以保持箭头平坦。
首先:如何才能保持箭头不透明?
第二:-latex
箭头的填充区域和绘制的线条不再匹配。它们之间有一个小空白。
这些问题仍然存在于图书馆arrow
中arrows.meta
。
这里是 MWE:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{angles, quotes, positioning, calc}
\begin{document}
\begin{tikzpicture}[line width=0.8pt]
\pgfmathsetmacro{\r}{4}
\pgfmathsetmacro{\A}{80}
\pgfmathsetmacro{\B}{150}
\draw[-stealth, line width=0.4pt] (-\r-0.6,0) -- (\r+0.65,0) coordinate[label=above left:x] (X) ;
\draw[-stealth, line width=0.4pt] (0,-\r-0.6) -- (0,\r+0.65) coordinate[label=below right:y] (Y) ;
\draw (\r,-1.85*\r) -- (\r,1.85*\r);
\draw (0,0) coordinate (O) circle(\r);
%% Valeurs d'angles
\coordinate (A) at (\A:\r);
\coordinate (B) at (\B:\r);
%% Représentation des angles
\pic["$\beta$", draw, blue, fill=blue!30, angle eccentricity=1.7, angle radius=0.4cm, -stealth, pic text options={xshift=-13pt}] {angle=X--O--B};
\pic["$\alpha$", draw, teal!70!black, fill=black!30, fill opacity=0.6, angle eccentricity=1.5, angle radius=0.7cm, -latex, pic text options={text opacity=1}] {angle=X--O--A};
\draw (O) -- (A.center);
\draw (O) -- (B.center);
\draw[-stealth, line width=0.4pt] (0,0) -- (X);
\end{tikzpicture}
\end{document}
答案1
仅加载arrows.meta
库不会改变任何箭头提示(特殊的除外),它在这种情况下>
提供自己的大写单词:Stealth
和Latex
/ 。LaTeX
如果你想使用功能arrows.meta
或定义快捷方式,请使用它们
\tikzset{
stealth/.tip = Stealth,
latex/.tip = LaTeX,
}
覆盖预定义的提示。
你的第二个问题很容易通过加载来解决bending
图书馆设置flex
箭头键。(默认值是quick
,可以通过执行 来设置\tikzset{arrows={[quick]}}
。)
(背景:该angle
库将填充和绘图分成两个独立的路径(并在两个不同的层上),从而使这两个操作不同步。箭头尖端在直线上将曲线偏移了尖端长度,从而导致了这种畸形的曲线。)
为您第一个问题我提供了一个新的箭头键: 。由于不透明度和填充的箭头尖端从来都不能很好地放在一起,所以我在序言中将fill opacity
其设置为。1
我还text opacity=1
为图片添加了序言angle
。似乎是一个不错的默认设置。
顺便说一句,如果括号中不包含逗号,那么"<label>", pic text options={<options>}
您可以写成"<label>" {<options>}
“其中括号是可选的”。
代码
\documentclass[tikz]{standalone}
\usetikzlibrary{arrows.meta, angles, bending, quotes, positioning, calc}
\pgfset{arrow keys/fill opacity/.code=
\pgfarrowsaddtooptions{\pgfsetfillopacity{#1}}}
\tikzset{arrows={[fill opacity=1]}} % seems right to declare this globally
\tikzset{pics/angle/.append style={/tikz/text opacity=1}}% this, too
\begin{document}
\begin{tikzpicture}[line width=0.8pt]
\pgfmathsetmacro{\r}{4}
\pgfmathsetmacro{\A}{80}
\pgfmathsetmacro{\B}{150}
\draw[-Stealth, line width=0.4pt] (-\r-0.6,0) -- (\r+0.65,0)
coordinate[label=above left:x] (X) ;
\draw[-Stealth, line width=0.4pt] (0,-\r-0.6) -- (0,\r+0.65)
coordinate[label=below right:y] (Y) ;
\draw (\r,-1.85*\r) -- (\r,1.85*\r);
\draw (0,0) coordinate (O) circle(\r);
%% Valeurs d'angles
\coordinate (A) at (\A:\r);
\coordinate (B) at (\B:\r);
%% Représentation des angles
\pic["$\beta$", draw, blue, fill=blue!30,
angle eccentricity=1.7, angle radius=0.4cm, -Stealth,
pic text options={xshift=-13pt}] {angle=X--O--B};
\pic["$\alpha$", draw, teal!70!black, fill=black!30, fill opacity=0.6,
angle eccentricity=1.5, angle radius=0.7cm, -Latex] {angle=X--O--A};
\draw (O) -- (A.center);
\draw (O) -- (B.center);
\draw[-Stealth, line width=0.4pt] (0,0) -- (X);
\end{tikzpicture}
\end{document}
输出
答案2
@Qrrbrbirbel 的回答 (+1) 有一点小改动,但基本与主题无关,它已经解决了您的主要问题。在我的 MWE 中进行了更改:
- 箭头的定义
- 风格的定义
pic
很常见 - 代码稍微短一点
一切为了锻炼和快乐......
\documentclass[tikz,
margin=3mm]{standalone}
\usetikzlibrary{angles, arrows.meta,
backgrounds, bending,
quotes}
\pgfset{arrow keys/fill opacity/.code=
\pgfarrowsaddtooptions{\pgfsetfillopacity{#1}} % <--- new arrow option!
}
\tikzset{
arr/.style = {-{#1[fill opacity=1]}, thin},
arr/.default = Stealth,
my angle/.style args = {#1/#2/#3/#4}{draw=#1, arr=#2,
fill=#1!30, fill opacity=#3,
angle radius = #4,
angle eccentricity=1.3},
my angle/.default = {blue/Triangle/1/5mm},
}
\begin{document}
\begin{tikzpicture}[line width=0.8pt]
\pgfmathsetmacro{\r}{4}
\pgfmathsetmacro{\R}{\r+0.7}
\pgfmathsetmacro{\A}{80}
\pgfmathsetmacro{\B}{150}
% coordonnés
\draw[arr] (-\R,0) -- (\R,0) coordinate[label=below left:$x$] (X);
\draw[arr] (0,-\R) -- (0,\R) coordinate[label=below right:$y$] (Y);
% cercle
\draw (0,0) coordinate (O) circle(\r);
%% Valeurs d'angles
\coordinate (A) at (\A:\r);
\coordinate (B) at (\B:\r);
%% Représentation des angles
\scoped[on background layer]
{
\pic[my angle, "$\beta$",
pic text options={xshift=-11pt}] {angle=X--O--B};
\pic[my angle=red/Stealth/0.6/7mm,
"$\alpha$"] {angle=X--O--A};
}
\draw[line join=bevel] (A) -- (O) -- (B);
\end{tikzpicture}
\end{document}