![仅生成 tikz 图片的图形而不是整个页面](https://linux22.com/image/348141/%E4%BB%85%E7%94%9F%E6%88%90%20tikz%20%E5%9B%BE%E7%89%87%E7%9A%84%E5%9B%BE%E5%BD%A2%E8%80%8C%E4%B8%8D%E6%98%AF%E6%95%B4%E4%B8%AA%E9%A1%B5%E9%9D%A2.png)
我想只制作图形,而不是周围的页面。本质上,我想在图形周围留出一个白色框,而不是整个页面。
我发现这个答案,我能够从 Peter Grill 的答案中编译 MWE。我知道我应该将 \documentclass 更改为 standalone;但是,我无法让答案适用于我的示例。它生成一个空白的 pdf(不是白页,什么都没有)。这是修改后的版本这是 MLP 的示例,拥有两个隐藏层,而不只是一个:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\def\layersep{2.5cm}
\begin{tikzpicture}[shorten >=1pt,->,draw=black!50, node distance=\layersep,transform canvas={scale=1.5}]
\tikzstyle{every pin edge}=[<-,shorten <=1pt]
\tikzstyle{neuron}=[circle,fill=black!25,minimum size=17pt,inner sep=0pt]
\tikzstyle{input neuron}=[neuron, fill=green!50];
\tikzstyle{output neuron}=[neuron, fill=red!50];
\tikzstyle{hidden neuron}=[neuron, fill=blue!50];
\tikzstyle{hidden2 neuron}=[neuron, fill=blue!50];
\tikzstyle{annot} = [text width=4em, text centered]
% Draw the input layer nodes
\foreach \name / \y in {1,...,4}
% This is the same as writing \foreach \name / \y in {1/1,2/2,3/3,4/4}
\node[input neuron, pin=left:Input \#\y] (I-\name) at (0,-\y) {};
% Draw the hidden layer nodes
\foreach \name / \y in {1,...,5}
\path[yshift=0.5cm]
node[hidden neuron] (H-\name) at (\layersep,-\y cm) {};
% Draw the hidden layer nodes
\foreach \name / \y in {1,...,5}
\path[yshift=0.5cm]
node[hidden2 neuron] (H2-\name) at (\layersep*2,-\y cm) {};
% Draw the output layer nodes
\foreach \name / \y in {1,...,3}
\path[yshift=0.5cm]
node[output neuron,pin=right:Class \#\y] (O-\name) at (\layersep*3,-\y cm) {};
% Connect every node in the input layer with every node in the
% hidden layer.
\foreach \source in {1,...,4}
\foreach \dest in {1,...,5}
\path (I-\source) edge (H-\dest);
% Connect every node in the first hidden layer with every node in the
% second hidden layer.
\foreach \source in {1,...,5}
\foreach \dest in {1,...,5}
\path (H-\source) edge (H2-\dest);
% Connect every node in the hidden layer with the output layer
\foreach \source in {1,...,5}
\foreach \dest in {1,...,3}
\path (H2-\source) edge (O-\dest);
% Annotate the layers
\node[annot,above of=H-1, node distance=1cm] (hl) {Hidden layer 1};
\node[annot,above of=H2-1, node distance=1cm] (hl) {Hidden layer 2};
\node[annot,right of=hl] {Output layer};
\end{tikzpicture}
\end{document}
这样会生成一个带有图片的页面。我想要一个与图片大小相同的页面。我该怎么做?
答案1
这里有两种可能,要么切换到独立类,但由于某种原因,它不起作用,明天再测试。或者确保没有页眉或页脚,也就是添加
\pagestyle{empty}
回到前言部分并重新编译。然后在终端、DOS 提示符或系统提供的任何提示符中,通过 pdfcrop 运行生成的 PDF
pdfcrop file.pdf
这将创建一个名为的文件的裁剪版本file-crop.pdf
编辑:使用该类测试代码后standalone
,如果删除以下内容,代码就可以正常工作
transform canvas={scale=1.5}
答案2
来自25.4 Canvas Transformations
文档TikZ
:
画布变换应谨慎使用。在大多数情况下,您不希望图片中的线宽发生变化,因为这会造成视觉不一致。
同样重要的是,当您使用画布变换时,pgf 会丢失节点位置和图片大小的轨迹,因为它在计算节点坐标时没有考虑画布变换的影响(但是,不要依赖于此;它可能会在未来发生变化)。
最后,请注意画布变换始终适用于整个路径,不可能(对于坐标变换)在路径的不同部分使用不同的变换。
简而言之,除非您真正知道自己在做什么,否则不应该使用画布转换。
你读过吗?这是将 更改为pgf loses track ... of picture sizes
时出现的问题。正如已应用于(不仅仅是应用于特定的),无法计算正确的图形大小,因为不知道它。article
standalone
transform canvas={scale=1.5}
tikzpicture
path
standalone
pgf
一旦transform canvas={scale=1.5}
注释掉,standalone
就会再次裁剪图形:
\documentclass[border=2mm]{standalone} %<--- standalone
\usepackage{tikz}
\begin{document}
\def\layersep{2.5cm}
\begin{tikzpicture}[shorten >=1pt,->,draw=black!50, node distance=\layersep,
%transform canvas={scale=1.5} <----- Comment out
]
\tikzstyle{every pin edge}=[<-,shorten <=1pt]
\tikzstyle{neuron}=[circle,fill=black!25,minimum size=17pt,inner sep=0pt]
\tikzstyle{input neuron}=[neuron, fill=green!50];
\tikzstyle{output neuron}=[neuron, fill=red!50];
\tikzstyle{hidden neuron}=[neuron, fill=blue!50];
\tikzstyle{hidden2 neuron}=[neuron, fill=blue!50];
\tikzstyle{annot} = [text width=4em, text centered]
% Draw the input layer nodes
\foreach \name / \y in {1,...,4}
% This is the same as writing \foreach \name / \y in {1/1,2/2,3/3,4/4}
\node[input neuron, pin=left:Input \#\y] (I-\name) at (0,-\y) {};
% Draw the hidden layer nodes
\foreach \name / \y in {1,...,5}
\path[yshift=0.5cm]
node[hidden neuron] (H-\name) at (\layersep,-\y cm) {};
% Draw the hidden layer nodes
\foreach \name / \y in {1,...,5}
\path[yshift=0.5cm]
node[hidden2 neuron] (H2-\name) at (\layersep*2,-\y cm) {};
% Draw the output layer nodes
\foreach \name / \y in {1,...,3}
\path[yshift=0.5cm]
node[output neuron,pin=right:Class \#\y] (O-\name) at (\layersep*3,-\y cm) {};
% Connect every node in the input layer with every node in the
% hidden layer.
\foreach \source in {1,...,4}
\foreach \dest in {1,...,5}
\path (I-\source) edge (H-\dest);
% Connect every node in the first hidden layer with every node in the
% second hidden layer.
\foreach \source in {1,...,5}
\foreach \dest in {1,...,5}
\path (H-\source) edge (H2-\dest);
% Connect every node in the hidden layer with the output layer
\foreach \source in {1,...,5}
\foreach \dest in {1,...,3}
\path (H2-\source) edge (O-\dest);
% Annotate the layers
\node[annot,above of=H-1, node distance=1cm] (hl) {Hidden layer 1};
\node[annot,above of=H2-1, node distance=1cm] (hl) {Hidden layer 2};
\node[annot,right of=hl] {Output layer};
\end{tikzpicture}
\end{document}
虽然结果不是scaled
,但我知道可以做类似的事情
\includegraphics[scale=1.5]{...}
获得与 等效的结果transform canvas={scale=1.5}
。