tikz 图片的 Keepaspectratio 选项

tikz 图片的 Keepaspectratio 选项

在我当前的文档中,我既有来自文件的图片,也有 tikz 图片。对于输出,我同时使用横向(用于屏幕阅读)和纵向(用于打印)。

对于从文件加载的图片,我使用代码来确保它们始终具有可接受的大小。

\begin{figure}
\centering
\includegraphics[keepaspectratio,  width=1\textwidth, height=1\textheight]{Filename}
\caption{Figure}
\end{figure}

问题是我无法将其应用于我的 tikx 图片,因为它本身没有尺寸。我使用的是 $width=1\textwidth, height=1\textheight$,但这只意味着图片在纵向和横向模式下的纵横比会有所不同。

有没有简单的方法来定义 tikx 图片的纵横比(例如 4:3)?

编辑1

我以为我找到了一个简单的解决方案。

除了在我的示例中高度受文本高度限制、宽度受文本宽度限制外,我对 tikx 图片的高度和宽度使用相同的尺寸。唯一的区别是我使用了不同的因子。下面是一个简短的示例。

\begin{tikzpicture}
\begin{axis}[
        width=0.80\textwidth,
        height=0.60\textwidth,
        ...

使用此设置,图像的长宽比将始终为 4:3,宽度为文本的 80%。但问题是,如果使用其他值,图像的高度可能会超过一页(例如,长宽比为 1:1)。

有什么建议么?

答案1

adjustbox包可用于改变任何类型的内容的大小,包括TiKZ图形。

\documentclass{article}
\usepackage{adjustbox}
\usepackage{tikz}

\begin{document}
  \def\test{\tikz\draw[thick, green] (0,0) rectangle (2cm,1cm) node[midway,red] {Test};}

  % the original 2cm x 1cm
  \test

  % resized to 4cm x 2cm
  \minsizebox{4cm}{2cm}{\test}

  % keeps aspectratio
  \minsizebox{1cm}{5cm}{\test}

  \minsizebox{4cm}{1cm}{\test}

\end{document}

在此处输入图片描述

答案2

这是一个解决方案,使用某种方式缩放图像scalebox以使其适合所需的尺寸(并保持纵横比)。

\documentclass[varwidth,border=50]{standalone}
\usepackage{environ}
\usepackage{tikz}
\usetikzlibrary{math}

% --------------------- begin macro definition
\newsavebox{\tikzbox}
% fitin environment
\NewEnviron{fitin}[2]{
\savebox{\tikzbox}{\BODY}
\tikzmath{\scale = min(#1/\wd\tikzbox, #2/(\ht\tikzbox+\dp\tikzbox));}
\scalebox{\scale}{\usebox{\tikzbox}}
}
% --------------------- end macro definition
\begin{document}

  % the original 2cm x 1cm
  \tikz \fill[green] (0,0) rectangle (2cm,1cm);

  % fit in  8cm x 2cm => 4cm x 2cm
  \begin{fitin}{8cm}{2cm}
    \tikz \fill[green] (0,0) rectangle (2cm,1cm);
  \end{fitin}

  % fit in  8cm x 8cm => 8cm x 4cm
  \begin{fitin}{8cm}{8cm}
    \tikz \fill[green] (0,0) rectangle (2cm,1cm);
  \end{fitin}

\end{document}

在此处输入图片描述

编辑:第一个解决方案不是特定于 tikz 的,并且这里有更好的解决方案,而无需scalebox使用标准 tikz scale

\documentclass[varwidth,border=50]{standalone}
\usepackage{environ}
\usepackage{tikz}

% --------------------- begin macro definition
\newsavebox{\tikzbox}
% tikzfitin environment
\NewEnviron{tikzfitin}[2]{
\savebox{\tikzbox}{\BODY}
\tikzset{every picture/.style={scale = {min(#1/\wd\tikzbox, #2/(\ht\tikzbox+\dp\tikzbox))}}}
\BODY
}
% --------------------- end macro definition
\begin{document}
  \def\test{\tikz\draw[thick, green] (0,0) rectangle (2cm,1cm) node[midway,red] {Test};}

  % the original 2cm x 1cm
  \test

  % fit in  8cm x 2cm => 4cm x 2cm
  \begin{tikzfitin}{8cm}{2cm}
    \test
  \end{tikzfitin}

  % fit in  8cm x 8cm => 8cm x 4cm
  \begin{tikzfitin}{8cm}{8cm}
    \test
  \end{tikzfitin}

\end{document}

在此处输入图片描述

相关内容