如何将 Tikz 绘图和文本一起缩放?

如何将 Tikz 绘图和文本一起缩放?

我正在尝试构建一个图表(实际上是一个徽标),我可以通过一个参数轻松缩放它。我希望能够通过一个参数缩放绘图和字体。

这是我当前的 MWE,希望它能够说明我的困难:

\documentclass{standalone}
\usepackage{tikz}
\usepackage{fontspec}
\begin{document}
\begin{tikzpicture}[scale=1.0]
\node [draw=black] at (0,0)
{\fontspec[Scale=2.0]{Bookman Old Style Bold}B}; 
\node [draw=none] at (0,-0.5)
{\fontspec[Scale=1.0]{Bookman Old Style} This is a B}; 
\end{tikzpicture}
~
\begin{tikzpicture}[scale=2.0]
\node [draw=black] at (0,0)
{\fontspec[Scale=4.0]{Bookman Old Style Bold}B}; 
\node [draw=none] at (0,-0.5)
{\fontspec[Scale=2.0]{Bookman Old Style} This is a B}; 
\end{tikzpicture}
\end{document}

这给了我这个:

两种尺寸的徽标

我有两个问题:

  1. 如何从单个参数得出比例=1/2/4s?

  2. 为什么框和“is”中的“i”上的点之间的空间成比例地减少。


更新:

感谢大家迄今为止的回答和评论。

共识方法似乎是“改变一切”,我对此很满意,尽管在我看来,这(在某种程度上)是次优解决方案。为什么?

嗯,据我所知,字体缩放并不是严格按照线性方式逐点缩放的。换句话说,我认为 10pt 字体缩放 2 倍后不是与20pt的相同字体相同。

除此之外,全局缩放也会缩放线条粗细;这很可能会限制我可以放大或缩小的程度。

显然,我假设 fontspec scale= 可以正确“放大字体”。否则,我的代码就和其他人的代码一样“次等”。

我会将事情搁置一段时间,然后接受并对答案进行投票。

顺便说一句,对于那些没有安装字体系列的人来说,这不是问题的重要部分。“任何字体都可以,除了 Comic Sans”。

答案1

要将所有内容一起缩放,您可能需要将所有内容包装在\scalebox{<factor>}{...}graphic/x包中,已由 加载tikz)。scale的选项tikz工作方式不同:它仅缩放坐标。inner sep确定边框的值不会被它缩放,这会导致i远离边框。如果不使用 ,您还需要使用比例因子调整此值\scalebox

或者,您可以尝试使用相对于字体大小的绘图单位,以 或 为单位exem您目前使用的默认值是cm。更好的方法是使用锚点进行定位,即尝试以下方法:

\documentclass{standalone}
\usepackage{tikz}
\usepackage{fontspec}
\begin{document}
\begin{tikzpicture}[scale=1.0,inner sep=4pt]
\node [draw=black] (B)
{\fontspec[Scale=2.0]{Bookman Old Style Bold}B}; 
\node [draw=none,anchor=north] at (B.south)
{\fontspec[Scale=1.0]{Bookman Old Style} This is a B}; 
\end{tikzpicture}
~
\begin{tikzpicture}[scale=2.0,inner sep=8pt]
\node [draw=black] (B)
{\fontspec[Scale=4.0]{Bookman Old Style Bold}B}; 
\node [draw=none,anchor=north] at (B.south)
{\fontspec[Scale=2.0]{Bookman Old Style} This is a B}; 
\end{tikzpicture}
\end{document}

由于缺少字体,我无法自行编译。

答案2

您可以使用transform canvasTikz 中的转换。它可以转换所有内容。例如:

\documentclass{minimal}

\usepackage{tikz}

\begin{document}
\begin{tikzpicture}[]

\begin{scope}[]
\node [draw=black] at (0,0) {\textbf{B}}; 
\node [draw=none] at (0,-0.5) {This is a B}; 
\end{scope}

\begin{scope}[shift={(2,0)},transform canvas={scale=2.0}]
\node [draw=black] at (0,0) {\textbf{B}}; 
\node [draw=none] at (0,-0.5) {This is a B}; 
\end{scope}

\begin{scope}[shift={(8,0)},transform canvas={yscale=4.0}]
\node [draw=black] at (0,0) {\textbf{B}}; 
\node [draw=none] at (0,-0.5) {This is a B}; 
\end{scope}

\end{tikzpicture}
\end{document}

输出为

缩放图像

答案3

我可能遗漏了上面更复杂的答案的一些内容(因为我无法编译代码),但节点(及其内容)将忽略外部转换,除非您在节点或封闭范围上使用“转换形状”选项。请参阅手册第 16.7 节。一旦您这样做,外部缩放将适用于节点和文本。

相关内容