从外部文件缩放 TikZ 图形

从外部文件缩放 TikZ 图形

我想将用 TikZ 创建的图形插入到我的 LaTeX 文档中。

我想如果我在文档中创建 TikZ 图形,那就没有问题了——我只需要使用scale紧随其后的值\begin{tikzpicture}即可。但是,有时图形太复杂,无法在 LaTeX 文档中明确写入,因此我会在另一个文件中创建图形并使用\input{foo.tikz}。问题是我不知道如何缩放它以适合文档的其余部分。

答案1

您可以在输入文件周围的组中本地设置every picture,以设置该文件中应该使用的任何选项tikzpicture

\begingroup
\tikzset{every picture/.style={scale=0.3}}%
\input{sometikzpic}%
\endgroup

但是,如果主图片的节点内还有其他tikzpicture节点,它们也会受到影响(我的意思是两次)。在这种情况下,\tikzset{every picture/.style={scale=0.3,every picture/.style={}}}可能会更好。


请注意scale仅缩放坐标。文本不受影响。您可能希望一起缩放整个图片。为此使用\scalebox{<factor>}{\input{<file>}}
\resizebox{<width>}{!}{\input{<file>}}。这两个宏都来自 ,graphics已由 加载tikz

还要看一下standalone类,特别是来自 v1.0beta 的新类\includestandalone[<options>]{<file>},它将包含子文件并根据需要缩放它们,就像\includegraphics对图像所做的那样。

答案2

如果在里面foo.tex您将比例设置为\tkzscl或其他用户宏,那么您可以像这样设置它:

\def\tkzscl{0.3}
\input{foo}

这样,您就可以在主文件中设置图片的比例。

foo.tex看起来应该是这样的:

\begin{tikzpicture}[scale=\tkzscl]
\draw (0,0) -- (1,0);
\end{tikzpicture}

管他呢…

答案3

我知道这个问题已经得到解答了,所以这里有一些使用这些答案的小技巧。

-1- 把这个放在你的之后\usepackages和你的之前\begin{document}

\newcommand{\inputTikZ}[2]{%  
     \scalebox{#1}{\input{#2}}  
}

-2- 像这样使用它来创建一个图形:

\begin{figure}  
\begin{centering}  
    \inputTikZ{0.5}{mytikzfile.tkz}  
\end{centering}  
\label{fig:myFig}  
\caption{some caption for the figure}  
\end{figure}  

这样,语法类似于\includegraphics[scale=...]{filename}

答案4

遵循 fiacobelli 的回答所呈现的风格。

在序言中插入软件包

\usepackage{tikz}
\usepackage{adjustbox}

我的建议是创建一个新命令

\newcommand{\figTikzAdjustShortCap}[4]
{   
    \centering
    \adjustbox{#1}{\input{#2}}
    \caption[#4]{#3}
}

您可以通过将“adjustbox”行更改为以下变体:

\resizebox{#1\linewidth}{#2\linewidth}{\input{#3}}

或者

\scalebox{#1}{\input{#2}}

记得纠正 \newcommand 的输入次数。

这遵循我对 includegraphics 使用的相同标准:

\newcommand{\figIncLongCap}[3]
{   
    \centering
    \includegraphics[#1]{#2}
    \caption{#3}
}

我喜欢它,因为它让我可以一次性改变所有图形的标题位置。

您可以在 Figure 环境中使用它,其中“Fig_Tikz”是一个 .tex 文件。

\begin{figure}[h]
    \figTikzAdjustLongCap
    {width = 0.8\linewidth, keepaspectratio, trim = 1.5cm 2cm 3cm 0cm, clip = true}
    {Fig_Tikz}
    {Tikz with \textit{AdjustBox} and \textit{Trim} Caption}
    \label{Fig_Tikz}
\end{figure}

此结果为您提供了与 includegraphic 命令相同的结构:

\begin{figure}[h]
    \figIncLongCap
    {width = 0.5\linewidth, trim = 0cm 1cm 0cm 0cm, clip = true}
    {Fig_not_tikz}
    {Fig not Tikz Caption.}
    \label{Fig_not_tikz}
\end{figure}

这个选项让我们能够像 \includegraphic 一样工作和格式化 \input。

我更喜欢使用图形环境,因为 TexStudio 和其他 LaTeX 编辑器具有标签突出显示和“单击并找到”功能。

相关内容