tikz 画像のページ全体ではなく図のみを生成します

tikz 画像のページ全体ではなく図のみを生成します

グラフィックのみを制作し、周囲のページは制作しません。基本的には、グラフィックの周囲に白いボックスを置きたいのですが、ページ全体は作りたくありません。

私は見つけたこの答え、そして私はピーター・グリルの回答からMWEをコンパイルすることができます。\documentclassをスタンドアロンに変更する必要があることは理解していますが、私の例では回答が機能しません。空白のPDF(白いページではなく、何もない)が生成されます。これはMLPの例隠し層を 1 つではなく 2 つ持つようにします。

\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

ここでは2つの可能性があります。スタンドアロンクラスに切り替えるか、何らかの理由で機能しないので明日テストします。または、ヘッダーやフッターがないことを確認するか、つまり追加します。

\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ときに発生する問題です。 が(特定の だけでなく)に適用されているため、はそれを知らないため、正しい図のサイズを計算できません。articlestandalonetransform 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}

関連情報