
Я пытаюсь масштабировать всю картинку, но ничего не получается.
\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}
И когда я заменяюпреобразовать формудлямасштаб=0,5, фитинг не срабатывает.
решение1
Я думаю, проблема в матрице. Как только я переключился на обычные узлы, все стало работать лучше. Я также не думаю, что матрица — подходящий инструмент здесь, поскольку она работает немного по-другому. В качестве альтернативы я бы предложил использовать библиотеку, chains
которая также избавит от дополнительных команд строк ниже. Наконец, вы можете удалить библиотеку fit
и использовать ее calc
для рисования подходящего прямоугольника вокруг узлов (кстати, для их подгонки вам понадобилось всего два).
Конечно, теперь он лучше масштабируется!
Выход
Код
\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}
решение2
Из руководства TikZ:
Трансформировать узлы можно, но по умолчанию преобразования не применяются к узлам. Причина в том, что обычно вы не хотите, чтобы ваш текст масштабировался или поворачивался, даже если основная графика трансформируется. Масштабирование текста — зло, вращение — немного меньше. Однако иногда вы хотите трансформировать узел, например, иногда имеет смысл повернуть узел на 90 градусов. Есть два способа добиться этого:
Вы можете использовать следующий вариант:
/tikz/преобразовать форму (нет значения)
Вызывает применение текущей «внешней» матрицы преобразования к форме. Например, если вы сказали \tikz[scale=3], а затем сказали node[transform shape] {X}, вы получите «огромный» X в своей графике.
- Вы можете задать параметры преобразования в списке параметров узла. Эти преобразования всегда применяются к узлу.
Так что, если возможно, избегайте масштабирования! Если вы все еще упорствуете, то сделайте это своим 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}
Основные изменения в вашем коде обозначены <---
. Другие изменения лишь немного оптимизируют ваш код и (по моему вкусу) улучшают внешний вид. Конечно, лучший внешний вид получается без масштабирования.
Как вы видите, узел, который соответствует синим узлам, масштабируется с обратной величиной масштабирования узла. Это необходимо, так как для подгонки узлов его не нужно масштабировать.
Результат:
решение3
Не совсем понятно, хотите ли вы масштабировать текст. Но здесь много постов на эту тему. Для вашего примера transform canvas={scale=.5}
должно сработать. Это то, что вы хотите?
Обратите внимание, что мне пришлось удалить стиль line
из вашего файла scope
, так как я не знал, откуда он взялся.
% 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}