Transformar forma não funciona - TikZ

Transformar forma não funciona - TikZ

Estou tentando dimensionar a imagem inteira, mas não está funcionando.

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

E quando eu substituirtransformar formaparaescala=0,5, o ajuste falha.

Responder1

Acho que a questão é a matriz. Assim que mudei para nós regulares, ele começou a funcionar melhor. Também não acho que uma matriz seja a ferramenta apropriada aqui, pois funciona de maneira um pouco diferente. Alternativamente, sugiro usar a chainsbiblioteca que também eliminará os comandos de linha extras abaixo. Finalmente, você pode remover a fitbiblioteca e usá-la calcpara desenhar um retângulo de ajuste ao redor dos nós (a propósito, você só precisava de dois para ajustá-los).

Claro, agora ele escala melhor!

Saída

insira a descrição da imagem aqui

Código

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

Responder2

Do manual TikZ:

É possível transformar nós, mas, por padrão, as transformações não se aplicam aos nós. A razão é que normalmente você não deseja que seu texto seja dimensionado ou girado, mesmo que o gráfico principal seja transformado. Dimensionar o texto é ruim, girar um pouco menos. No entanto, às vezes você deseja transformar um nó, por exemplo, certamente faz sentido girar um nó em 90 graus. Existem duas maneiras de conseguir isso:

  1. Você pode usar a seguinte opção:

    /tikz/transform shape (sem valor)

Faz com que a matriz de transformação “externa” atual seja aplicada à forma. Por exemplo, se você disser \tikz[scale=3] e depois disser node[transform shape] {X}, você obterá um X “enorme” em seu gráfico.

  1. Você pode fornecer opções de transformação dentro da lista de opções do nó. Essas transformações sempre se aplicam ao nó.

Então, se possível, evite escalar! Se você ainda persistir, torne-o seu MWe da seguinte maneira:

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

As principais alterações no seu código são indicadas por <---. Outras mudanças otimizam apenas ligeiramente seu código e (de acordo com meu gosto) melhoram a aparência. É claro que uma melhor aparência é obtida sem descamação.

Como você pode ver, o nó, que é o nó azul, é redimensionado com o valor inverso do escalonamento do nó. Isto é necessário, pois para o ajuste dos nós não foi necessário dimensioná-lo.

O resultado é:

insira a descrição da imagem aqui

Responder3

Não está muito claro se você deseja dimensionar o texto também. Mas há muitos posts sobre esse assunto por aqui. Para o seu exemplo, transform canvas={scale=.5}deve funcionar. É isso que voce quer?

Observe que tive que remover o estilo linedo seu arquivo scope, pois não sabia de onde ele veio.

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

informação relacionada