TikZ 间谍库重置线条属性,例如“线条连接”、“线条宽度”等

TikZ 间谍库重置线条属性,例如“线条连接”、“线条宽度”等

在 tikzpicture 中使用 TikZ 间谍库时,它会“忘记”线条属性,例如line join之前设置的。

我研究了间谍库代码(位于 pgf/pgf/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryspy.code.tex)并注意到以下几行:

\tikzset{
  tikz@lib@reset@gs/.style={black,thin,solid,opaque,line cap=butt,line join=miter}
}

第一个快速解决方法是使用

\tikzset{
    spy scope/.append style={
        line width=5pt,
        line join=round,
    },
}

这会修复所有未放大的图像部分,但放大部分的线条仍会以重置的属性绘制。

将该属性直接设置为绘制路径可以将其保留在图片的两个部分。

enter image description here

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{spy}

\tikzset{
    thick round path/.append style={
        line width=5pt,
        line join=round,
    },
    every picture/.append style={
        thick round path
    },
}

\begin{document}

\section{No \texttt{spy} library}
\begin{tikzpicture}
    \draw (0,.2) -- (1,0) -- (0,-.2);
\end{tikzpicture}

\section{\texttt{spy scope} set}
\begin{tikzpicture}[spy scope]
    \draw (0,.2) -- (1,0) -- (0,-.2);
\end{tikzpicture}

\tikzset{
    spy scope/.append style={
        thick round path
    },
}

\section{\texttt{spy scope} set but \texttt{spy scope/.append style} used}
\begin{tikzpicture}[spy scope]
    \draw (0,.2) -- (1,0) -- (0,-.2);
\end{tikzpicture}

\section{Actually magnifying}
\begin{tikzpicture}[spy using outlines={circle, size=1cm, magnification=2}]
    \draw (0,.2) -- (1,0) -- (0,-.2);
    \spy on (1,0) in node at (2,0);
\end{tikzpicture}

\section{Setting property directly on drawn line}
\begin{tikzpicture}[spy using outlines={circle, size=1cm, magnification=2}]
    \draw[thick round path] (0,.2) -- (1,0) -- (0,-.2);
    \spy on (1,0) in node at (2,0);
\end{tikzpicture}

\end{document}

我想避免必须为绘制的每条线指定属性,因为线可能很多。有没有其他方法可以实现我想要的效果?

答案1

该库定义如下

\tikzset{
  tikz@lib@reset@gs/.style={black,thin,solid,opaque,line cap=butt,line join=miter}
}

这将重置几乎所有内容。

这背后的逻辑是,这个库想要控制这些变量,使得放大镜中的图像看起来连贯。(例如,黑线仍然是黑色的)。

控制它们的最便宜的方法是重置它们,除非用户在当前范围内明确分配某些内容。在这种情况下,图像仍将保持连贯,因为分配将执行两次。

相关内容