
Я хотел бы создать только графику, а не окружающую страницу. По сути, я хотел бы рамку белого цвета вокруг графики, но не на всю страницу.
я нашелэтот ответ, и я могу скомпилировать 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 или в том, что предоставляет ваша система, запустите полученный pdf через pdfcrop
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}
.