如何在 TikZ 绘图周围获得轮廓/轮廓线/“光环”?

如何在 TikZ 绘图周围获得轮廓/轮廓线/“光环”?

我必须在地图上放置符号和文字,并且为了与背景形成良好的对比,我希望所有东西周围都有白色轮廓。

这是我要找的一个示例。我使用 Photoshop 中的“描边选择”工具制作了它。

图1

我四处寻找,但没能找到在 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}

带白色轮廓的蓝色符号

相关内容