tikz 그림의 전체 페이지가 아닌 그림만 생성

tikz 그림의 전체 페이지가 아닌 그림만 생성

주변 페이지가 아닌 그래픽만 제품에 담고 싶습니다. 본질적으로 나는 그래픽 주위에 흰색 상자를 원하지만 전체 페이지의 가치는 아닙니다.

나는 찾았다이 답변, Peter Grill의 답변에서 MWE를 컴파일할 수 있습니다. 나는 \documentclass를 독립 실행형으로 변경해야 한다는 것을 이해합니다. 그러나 나는 내 예에 대한 답을 만들 수 없습니다. 빈 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}에 적용된 것처럼 은 ( 는) 모르기 때문에 올바른 그림 크기를 계산할 수 없습니다 .tikzpicturepathstandalonepgf

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}.

관련 정보