tikzpicture を拡大縮小してからスケールを変更すると、すべてが台無しになります

tikzpicture を拡大縮小してからスケールを変更すると、すべてが台無しになります
\begin{tikzpicture}[scale=x]
\node[scale=y] (a,b)

複雑な画像を設定し、すべてを手動で配置する場合(すべての (a,b) を指定)、x を変更して大きくしたり小さくしたりすると、すべてが台無しになります。

サイズ変更ボックスを使用することもできますが、スケール x が全体のスケールになり、その値を任意の値に設定すると、その中のすべてのスケールもスケーリングされると思いますが、実際はそうではありません。

もっと簡単な方法があるかもしれませんか?

答え1

このような簡潔な質問では問題を理解するのは非常に困難ですが、おそらく OP が探しているのは次のことですtransform shape。見てください:

\documentclass[]{article}
\usepackage{tikz}
\begin{document}
{\Huge X}
\begin{tikzpicture}[
    ]
    \node[draw] at (0,0) {A};
    \node[draw, scale=2] at (1,0) {B};
\end{tikzpicture}

\bigskip

{\Huge X}
\begin{tikzpicture}[
    scale=0.5]
    \node[draw] at (0,0) {A};
    \node[draw, scale=2] at (1,0) {B};
\end{tikzpicture}

\bigskip

{\Huge X}
\begin{tikzpicture}[
    scale=0.5, every node/.style={transform shape}]
    \node[draw] at (0,0) {A};
    \node[draw, scale=2] at (1,0) {B};
\end{tikzpicture}
\end{document}

次のように生成されます (大きな X は参照用であり、ベースラインの変化に注意してください)。

ここに画像の説明を入力してください

答え2

scaleは、 でサポートされているオプションではありませんtikzpicture。これは、画像の範囲内でグローバルに設定されるだけなので、画像内でこの種のオプションを持つものすべてに影響します。すべてが対象になる場合もあれば、何も対象にならない場合もありますが、通常は一部のものだけが対象になります。

\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
  \draw [ultra thick, ->] (0,0) -- (1,1) node [right] {A};
  \begin{scope}[scale=2, xshift=10mm]
    \draw [ultra thick, ->] (0,0) -- (1,1) node [right] {A};
  \end{scope}
\end{tikzpicture}
\end{document}  

スケーリング効果

一般的に、これが望ましい結果です。フォント、線の幅、矢印の先端はスケーリングの影響を受けませんが、座標は影響を受けません。

を使用することが悪である理由\resizeboxは、ボックス内のすべて、つまり線、フォント、その他すべてに影響を与えるからです。これは、文書のフォントと線に一貫性がなくなるため、最適とは言えません。光学サイズが使用可能なフォントを使用すると、コンテキストに適したグリフ形状ではなく、より大きいサイズまたはより小さいサイズ用に設計されたグリフ形状がレンダリングされるため、歪みはさらに大きくなります。

サイズ変更が避けられない場合は、tikzscaleよりも が適しています。\resizeboxでは、 をサポートする画像の要素だけを拡大縮小するよりも、線幅とフォント サイズを維持しながら、残りの部分を拡大縮小する処理をより包括的かつ一貫して実行できるからですscale

関連情報