在 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,
},
}
这会修复所有未放大的图像部分,但放大部分的线条仍会以重置的属性绘制。
将该属性直接设置为绘制路径可以将其保留在图片的两个部分。
\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} }
这将重置几乎所有内容。
这背后的逻辑是,这个库想要控制这些变量,使得放大镜中的图像看起来连贯。(例如,黑线仍然是黑色的)。
控制它们的最便宜的方法是重置它们,除非用户在当前范围内明确分配某些内容。在这种情况下,图像仍将保持连贯,因为分配将执行两次。