如何实现一个点(这里只是画成一个圆圈),无论我如何缩放图像,它都保持相同的大小。
这是示例。
\begin{tikzpicture}[scale=1]
\draw[thick] (0,0)--(1,0);
\fill (0,0) circle (1pt);
\end{tikzpicture}
\begin{tikzpicture}[scale=3]
\draw[thick] (0,0)--(1,0);
\fill (0,0) circle (1pt);
\end{tikzpicture}
也许我应该使用节点而不是画另一个圆圈。
我曾经使用带有 ${\bullet}$ 的节点,但是它不是精确居中的,而且我无法控制大小。
编辑 以下操作可部分完成,但不适用于非中心点:
\begin{tikzpicture}[scale=1]
\draw[thick] (0,0)--(1,0);
\fill[shift only] (0,0) circle (1pt);
\fill[shift only] (1,0) circle (1pt);
\end{tikzpicture}
\begin{tikzpicture}[scale=3]
\draw[thick] (0,0)--(1,0);
\fill[shift only] (0,0) circle (1pt);
\fill[shift only] (1,0) circle (1pt);
\end{tikzpicture}
\begin{tikzpicture}[scale=3]
\draw[thick] (0,0)--(1,0);
\fill[shift only] (0,0) circle (1pt);
\fill(1,0) {[shift only] circle (1pt)};
\end{tikzpicture}
或者,如何在特定点绘制一个相对于线条粗细具有固定大小的点,例如thick
线条粗细的 1.5 倍。
答案1
您可以通过按键重置非平移缩放shift only
。这将保留变换的平移部分,但会将矩阵设置为恒等矩阵。如果您还想取消当前变换,可以使用reset cm
按键。
\begin{tikzpicture}[scale=3]
\draw[thick] (0,0)--(1,0);
\fill[shift only] (0,0) circle (1pt);
\end{tikzpicture}
对于编辑
\begin{tikzpicture}[xscale=-1,yscale=-0.3]
\draw[thick] (0.5,0.5)--(-0.2,-1);
\fill (0.5,0.5) circle[shift only,radius=1pt];
\fill (-0.2,-1) circle[shift only,radius=1pt];
\end{tikzpicture}
答案2
解决方法很简单,将比例代码移到路径内。不要将其应用于整个 tikz 代码:
前:
后:
\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows,positioning,shapes.geometric}
\begin{document}
\begin{tikzpicture}[scale=1]
\draw[thick] (0,0)--(1,0);
\fill (0,0) circle (1pt);
\end{tikzpicture}
\begin{tikzpicture}
\draw[thick, scale=3] (0,0)--(1,0);
\fill (0,0) circle (1pt);
\end{tikzpicture}
\end{document}
答案3
另一种方法是在设置点的大小时做一些数学计算:
\documentclass[tikz, border=5mm]{standalone}
\newcommand{\myscale}{1}
\begin{document}
\begin{tikzpicture}[scale=\myscale]
\draw[thick] (0,0)--(1,0);
\fill (0,0) circle (1pt/\myscale);
\end{tikzpicture}
\renewcommand{\myscale}{3}
\begin{tikzpicture}[scale=\myscale]
\draw[thick] (0,0)--(1,0);
\fill (0,0) circle (1pt/\myscale);
\end{tikzpicture}
\end{document}
这样,您就可以控制哪些元素应该(相对)缩放,哪些元素不应该。
为了更容易地重用已经编写的代码,您可以这样使用它:
\documentclass[tikz, border=5mm]{standalone}
\newcommand{\myimage}[2][1]{
\begin{scope}[shift={#2}, scale=#1]
\draw [thick] (0,0) -- (1,0);
\fill (0,0) circle (1pt/#1);
\end{scope}
}
\begin{document}
\begin{tikzpicture}
\myimage{(0,1)};
\myimage[3]{(0,0)};
\end{tikzpicture}
\end{document}
答案4
我想出了一个有点混乱的解决方案。仍然不认为它优雅。它是迄今为止其他解决方案的组合......
\documentclass[border=10]{standalone}
\usepackage{tikz}
\newcommand{\mydot}[1]{
\begin{scope}[shift={#1}]
\fill[shift only] (0,0) circle (1.3pt);
\end{scope}}
\begin{document}
\begin{tikzpicture}[scale=1]
\draw[thick] (0,0)--(1,0);
\mydot{(0,0)};
\mydot{(1,0)};
\end{tikzpicture}
\begin{tikzpicture}[scale=3]
\draw[thick] (0,0)--(1,0);
\mydot{(0,0)};
\mydot{(1,0)};
\end{tikzpicture}
\end{document}