我必须在地图上放置符号和文字,并且为了与背景形成良好的对比,我希望所有东西周围都有白色轮廓。
这是我要找的一个示例。我使用 Photoshop 中的“描边选择”工具制作了它。
我四处寻找,但没能找到在 TikZ 中“自动”获得此效果的方法。对于文本部分,我发现轮廓包可以完美运行(下图中的 (c)),但对于 TikZ 绘图,我仍在寻找解决方案。我尝试过的一件事是叠加两个不同颜色和线宽的相同符号版本(下图中的 (b)),但这当然行不通,因为缩放不会与线平行发生,因此端点不会有白色轮廓。箭头发生了什么是不言而喻的。除此之外,我只能想到手动绘制轮廓,这在我的情况下是可行的,但仍然相当繁琐。
这是我用来生成图片的代码:
\documentclass[tikz, margin=5mm]{standalone}
\usepackage[outline]{contour}
\contourlength{1pt}
% symbol1
\tikzset{pics/.cd,
symbol1/.style,
code={
% triangle
\draw (0,0) -- (1,0) -- ({cos(60)}, {sin(60)}) -- (0,0);
% arrow with text
\draw[-latex] (-0.2, {sin(60)/3}) node[left]{\Large{1}} -- ({cos(60)},{sin(60)/3});
}}
\begin{document}
\begin{tikzpicture}
% background and labels
\draw[fill=black!10] (-1,-1) rectangle (5,1.5)
({cos(60)}, -0.2) node[below]{(a)}
({2 + cos(60)}, -0.2) node[below]{(b)}
(4, -0.2) node[below]{(c)};
% (a) normal instance of symbol1
\pic[blue,thick] at (0,0) {symbol1};
% (b) symbol1 superimposed on a white instance of the same symbol with larger line width
\pic[white,line width=3pt] at (2,0) {symbol1};
\pic[blue, thick] at (2,0) {symbol1};
% (c) text with white outline using contour package
\draw[blue] (4,{sin(60)/3}) node[]{\contour{white}{\Large{1}}};
\end{tikzpicture}
\end{document}
我不是 LaTeX 或 TikZ 专家,所以也许我忽略了一些非常明显的东西,或者也许这根本不可能,但我仍然希望有人能给我一些关于如何解决这个问题的提示。另外,我是 StackExchange 的新手,所以如果我的帖子有任何问题(格式、缺少信息、不够清楚等),请随时告诉我。
答案1
您可以通过使用 Shift 反复绘制符号来模拟轮廓。(方法相同contour
)
\documentclass[tikz, margin=5mm]{standalone}
% symbol1
\tikzset{pics/.cd,
symbol1/.style,
code={
% triangle
\draw (0,0) -- (1,0) -- (60:1) -- cycle;
% arrow with text
\draw[-latex] (-0.2, {sin(60)/3}) node[left]{\Large{1}} -- ({cos(60)},{sin(60)/3});
}}
\begin{document}
\begin{tikzpicture}
\draw[fill=black!10] (-1,-1) rectangle (1.5,1.5);
\foreach \ang in {0,10,...,360}
{ \pic[white, thick, shift={(\ang:1pt)}] at (0,0) {symbol1}; };
\pic[blue,thick] at (0,0) {symbol1};
\end{tikzpicture}
\end{document}