Сгенерировать только рисунок, а не всю страницу для изображения tikz

Сгенерировать только рисунок, а не всю страницу для изображения tikz

Я хотел бы создать только графику, а не окружающую страницу. По сути, я хотел бы рамку белого цвета вокруг графики, но не на всю страницу.

я нашелэтот ответ, и я могу скомпилировать 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}.

Связанный контент