
Ich versuche, das gesamte Bild zu skalieren, aber es funktioniert nicht.
\begin{tikzpicture} [scale=0.5, every node/.style={transform shape}]
\tikzstyle{startstop} = [ellipse, draw=orange, thick, fill=orange!20, text width=5em, minimum height=4em, text centered, dashed]
\tikzstyle{block} = [rectangle, draw=blue, thick, fill=blue!20, text width=8em, minimum height=4em, shape aspect=2, text centered, rounded corners]
% Define nodes in a matrix
\matrix [column sep=10mm, row sep=7mm]
{
\node [startstop] (Signal) {Trama de la señal};
&\node [block] (DFT) {Transformada Discreta de Fourier};
&\node [block] (Module) {Módulo};
&\node [block] (MelFilt) {Filtros Mel}; \\
\node [startstop] (MFCC) {MFCC};
&\node [block] (Lifter) {Lifter};
&\node [block] (IDCT) {Transformada Discreta Inversa de Coseno};
&\node [block] (Log) {Logaritmo}; \\
};
\node [draw, scale=1, rectangle, dashed, thick, fit=(DFT) (Module) (Log) (Lifter) (IDCT)] {};
% connect all nodes DFT above
\begin{scope} [every path/.style={line, line width=1.3pt} ]
%Down Lines
\path (Signal) -- (DFT);
\path (DFT) -- (Module);
\path (Module) -- (MelFilt);
\path (MelFilt.south) -- (Log.north);
\path (Log) -- (IDCT);
\path (IDCT) -- (Lifter);
\path (Lifter) -- (MFCC);
\end{scope}
\end{tikzpicture}
Und wenn ich ersetzeForm transformierenfürMaßstab = 0,5, die Armatur schlägt fehl.
Antwort1
Ich denke, das Problem ist die Matrix. Sobald ich zu regulären Knoten gewechselt bin, funktionierte es besser. Ich denke auch nicht, dass eine Matrix hier das geeignete Werkzeug ist, da sie etwas anders funktioniert. Alternativ würde ich vorschlagen, die chains
Bibliothek zu verwenden, wodurch auch die zusätzlichen Zeilenbefehle unten entfallen. Schließlich können Sie die fit
Bibliothek entfernen und verwenden calc
, um ein passendes Rechteck um die Knoten zu zeichnen (zum Anpassen brauchten Sie übrigens nur zwei).
Natürlich ist es jetzt besser skalierbar!
Ausgabe
Code
\documentclass[margin=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric, chains, calc}
\tikzset{
startstop/.style={ellipse, draw=orange, thick, fill=orange!20, text width=5em, minimum height=4em, text centered, dashed},
block/.style={rectangle, draw=blue, thick, fill=blue!20, text width=8em, minimum height=4em, shape aspect=2, text centered, rounded corners},
links/.style={line width=1.3pt}
}
\begin{document}
\begin{tikzpicture}[scale=.5,transform shape,
start chain=going right, node distance=1cm, auto,
every join={line width=1.3pt},
every node/.style={on chain, join}
]
% Define nodes in a matrix
\node[startstop] (Signal) {Trama de la señal};
\node[block] (DFT) {Transformada Discreta de Fourier};
\node[block] (Module) {Módulo};
\node[block] (MelFilt) {Filtros Mel};
\node[continue chain=going below,block] (Log) {Logaritmo};
\node[continue chain=going left, block] (IDCT) {Transformada Discreta Inversa de Coseno};
\node[continue chain=going left, block] (Lifter) {Lifter};
\node[continue chain=going left, startstop] (MFCC) {MFCC};
% connect all nodes DFT above
\draw[dashed, thick, rounded corners] ($(Lifter.south west)+(-.2,-.2)$) rectangle ($(MelFilt.north east)+(.2,.2)$);
\end{tikzpicture}
\end{document}
Antwort2
Aus dem TikZ-Handbuch:
Es ist möglich, Knoten zu transformieren, aber standardmäßig werden Transformationen nicht auf Knoten angewendet. Der Grund dafür ist, dass Sie normalerweise nicht möchten, dass Ihr Text skaliert oder gedreht wird, selbst wenn die Hauptgrafik transformiert wird. Das Skalieren von Text ist schlecht, das Drehen etwas weniger. Manchmal möchten Sie jedoch einen Knoten transformieren. Beispielsweise ist es manchmal durchaus sinnvoll, einen Knoten um 90 Grad zu drehen. Dies können Sie auf zwei Arten erreichen:
Sie können folgende Möglichkeit nutzen:
/tikz/transform shape (kein Wert)
Bewirkt, dass die aktuelle „externe“ Transformationsmatrix auf die Form angewendet wird. Wenn Sie beispielsweise \tikz[scale=3] sagen und dann node[transform shape] {X} sagen, erhalten Sie ein „riesiges“ X in Ihrer Grafik.
- Sie können Transformationsoptionen innerhalb der Optionsliste des Knotens angeben. Diese Transformationen gelten immer für den Knoten.
Vermeiden Sie also, wenn möglich, die Skalierung! Wenn Sie trotzdem darauf bestehen, machen Sie es auf folgende Weise zu Ihrem MWe:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{fit,matrix,shapes.geometric}
\begin{document}
\begin{tikzpicture} [
every node/.style = {scale=0.5, transform shape, % <-----
align=center, minimum height=4em},
startstop/.style = {ellipse, draw=orange, thick, dashed,
fill=orange!20, text width=5em},
block/.style = {rectangle, draw=blue, thick, rounded corners,
fill=blue!20, text width=8em}
]
% Define nodes in a matrix
\matrix [column sep=10mm, row sep=7mm]
{
\node[startstop] (Signal) {Trama de la señal};
& \node [block] (DFT) {Transformada Discreta de Fourier};
& \node [block] (Module) {Módulo};
& \node [block] (MelFilt) {Filtros Mel}; \\
\node [startstop] (MFCC) {MFCC};
& \node [block] (Lifter) {Lifter};
& \node [block] (IDCT) {Transformada Discreta Inversa de Coseno};
& \node [block] (Log) {Logaritmo}; \\
};
\node[draw, dashed, thick,
scale=2, % <-----
fit=(DFT) (Log)] {};
% connect all nodes DFT above
\draw[line width=1.3pt,->]
(Signal) edge (DFT)
(DFT) edge (Module)
(Module) edge (MelFilt)
(MelFilt) edge (Log)
(Log) edge (IDCT)
(IDCT) edge (Lifter)
(Lifter) edge (MFCC);
\end{tikzpicture}
\end{document}
Die wichtigsten Änderungen in Ihrem Code sind durch gekennzeichnet <---
. Andere Änderungen optimieren Ihren Code nur geringfügig und verbessern (nach meinem Geschmack) das Erscheinungsbild. Ein besseres Erscheinungsbild erhält man natürlich auch ohne Skalierung.
Wie Sie sehen, wird der Knoten, der den blauen Knoten entspricht, mit dem inversen Wert der Knotenskalierung neu skaliert. Dies ist notwendig, da er zum Anpassen der Knoten nicht skaliert werden musste.
Ergebnis ist:
Antwort3
Es ist nicht ganz klar, ob Sie den Text auch skalieren möchten. Aber es gibt hier viele Beiträge zu diesem Thema. Für Ihr Beispiel transform canvas={scale=.5}
sollte es funktionieren. Ist es das, was Sie möchten?
line
Bitte beachten Sie, dass ich den Stil aus Ihrem entfernen musste scope
, da ich nicht wusste, woher dieser kommt.
% arara: pdflatex
\documentclass{article}
\usepackage[spanish]{babel}
\usepackage{tikz}
\usetikzlibrary{shapes, fit}
\begin{document}
\begin{tikzpicture}[%
,transform canvas={scale=.5}
,startstop/.style={%
,ellipse
,draw=orange
,thick
,fill=orange!20
,text width=5em
,minimum height=4em
,text centered
,dashed
}
,block/.style={%
,rectangle
,draw=blue
,thick
,fill=blue!20
,text width=8em
,minimum height=4em
,shape aspect=2
,text centered
,rounded corners
}
]
% Define nodes in a matrix
\matrix[column sep=10mm, row sep=7mm]
{%
\node [startstop] (Signal) {Trama de la señal};
&\node [block] (DFT) {Transformada Discreta de Fourier};
&\node [block] (Module) {Módulo};
&\node [block] (MelFilt) {Filtros Mel}; \\
\node [startstop] (MFCC) {MFCC};
&\node [block] (Lifter) {Lifter};
&\node [block] (IDCT) {Transformada Discreta Inversa de Coseno};
&\node [block] (Log) {Logaritmo}; \\
};
\node[draw, rectangle, dashed, thick, fit=(DFT) (Module) (Log) (Lifter) (IDCT)] {};
% connect all nodes DFT above
\begin{scope}[every path/.style={draw,line width=1.3pt}]
\path (Signal) -- (DFT);
\path (DFT) -- (Module);
\path (Module) -- (MelFilt);
\path (MelFilt.south) -- (Log.north);
\path (Log) -- (IDCT);
\path (IDCT) -- (Lifter);
\path (Lifter) -- (MFCC);
\end{scope}
\end{tikzpicture}
\end{document}