Scalare automaticamente con tikz

  • Creatore
    Topic
  • #103508
    Up
    0
    Down
    ::


    Buongiorno a tutti,
    oggi mi sono imbattuto in problema nuovo, il metodo per risolverlo in modo manuale esiste, ma lo trovo poco pratico e un po’ approssimativo. Allego il file sorgente minimo compilabile, ma faccio osservare che uso la libreria tikzlibrarymec.code (scritta da Francesco Clemente) che non è inclusa in TeXLive, quindi bisogna posizionarla direttamente nella cartella dove si trova il file sorgente.

    `\documentclass[a4paper,11pt,twoside,openright,final]{book}
    \usepackage[italian]{babel}
    \usepackage{pgfplots,relsize,pgfplotstable,lmodern,pgfkeys, pgfmath}
    \pgfplotsset{compat=1.3}
    \pgfkeys{
    /pgf/number format/.cd, %
    use comma
    }
    \usetikzlibrary{plotmarks,arrows.meta,calc,intersections,through,backgrounds}
    \usetikzlibrary{mec}
    \usetikzlibrary{positioning,patterns,decorations.markings}

    \begin{document}

    \begin{tikzpicture}
    \coordinate (a) at (0,0);
    \coordinate (b) at (2.75,0);
    \coordinate (c) at (8.25,0);
    \coordinate (d) at (13.75,0);
    \coordinate (e) at (19.25,0);
    \coordinate (f) at (24.75,0);
    \coordinate (g) at (27.5,0);
    %
    \node[hinge,draw,grounded] (A) at (a){};
    \node[support,draw,grounded] (B) at (b){};
    \node[support,draw,grounded] (C) at (c){};
    \node[support,draw,grounded] (D) at (d){};
    \node[support,draw,grounded] (E) at (e){};
    \node[support,draw,grounded] (F) at (f){};
    \node[support,draw,grounded] (G) at (g){};
    %
    \draw[very thick] (A.north)–(B.north)–(C.north)–(D.north)–(E.north)–(F.north)–(G.north);
    \path[draw straight load] (a) — (c) (d)–(e) (f)–(g);
    \end{tikzpicture}

    \end{document}`

    Come si vede dal file che ho allegato se si compila così risulta che la figura esca dai margini fisici del foglio. La domanda è la seguente: si può impostare un parametro opzionale della forma `width=0.9\columnwidth`
    invece che dover cercare manualmente il valore di scale?

    Nella guida di Tekz si fa riferimento a resized width, ma non credo sia quello che devo usare o toccare.
    Ringrazio fin da ora tutti coloro che vorranno rispondere.

    Attachments:
    You must be logged in to view attached files.
Visualizzazione 1 filone di risposte
  • Autore
    Risposte
    • #103509
      Up
      0
      Down
      ::

      schwarz89it” post=103539Buongiorno a tutti,
      oggi mi sono imbattuto in problema nuovo, il metodo per risolverlo in modo manuale esiste, ma lo trovo poco pratico e un po’ approssimativo. Allego il file sorgente minimo compilabile, ma faccio osservare che uso la libreria tikzlibrarymec.code (scritta da Francesco Clemente) che non è inclusa in TeXLive, quindi bisogna posizionarla direttamente nella cartella dove si trova il file sorgente.

      `\documentclass[a4paper,11pt,twoside,openright,final]{book}
      \usepackage[italian]{babel}
      \usepackage{pgfplots,relsize,pgfplotstable,lmodern,pgfkeys, pgfmath}
      \pgfplotsset{compat=1.3}
      \pgfkeys{
      /pgf/number format/.cd, %
      use comma
      }
      \usetikzlibrary{plotmarks,arrows.meta,calc,intersections,through,backgrounds}
      \usetikzlibrary{mec}
      \usetikzlibrary{positioning,patterns,decorations.markings}

      \begin{document}

      \begin{tikzpicture}
      \coordinate (a) at (0,0);
      \coordinate (b) at (2.75,0);
      \coordinate (c) at (8.25,0);
      \coordinate (d) at (13.75,0);
      \coordinate (e) at (19.25,0);
      \coordinate (f) at (24.75,0);
      \coordinate (g) at (27.5,0);
      %
      \node[hinge,draw,grounded] (A) at (a){};
      \node[support,draw,grounded] (B) at (b){};
      \node[support,draw,grounded] (C) at (c){};
      \node[support,draw,grounded] (D) at (d){};
      \node[support,draw,grounded] (E) at (e){};
      \node[support,draw,grounded] (F) at (f){};
      \node[support,draw,grounded] (G) at (g){};
      %
      \draw[very thick] (A.north)–(B.north)–(C.north)–(D.north)–(E.north)–(F.north)–(G.north);
      \path[draw straight load] (a) — (c) (d)–(e) (f)–(g);
      \end{tikzpicture}

      \end{document}`

      Come si vede dal file che ho allegato se si compila così risulta che la figura esca dai margini fisici del foglio. La domanda è la seguente: si può impostare un parametro opzionale della forma `width=0.9\columnwidth`
      invece che dover cercare manualmente il valore di scale?

      Nella guida di Tekz si fa riferimento a resized width, ma non credo sia quello che devo usare o toccare.
      Ringrazio fin da ora tutti coloro che vorranno rispondere.

      Una nota prima: la dimensione fisica del foglio (larghezza intendo) che si può usare di solito è attorno ai 12/13 cm. 24 sono quindi eccessivi. Questa è una regola a spanne valida per figure e schemi piccoli, poi ci sono le eccezioni.

      Per ridimensionare e scalare le immagini esistono un’infinità di metodi, sul forum se ne è già sicuramente parlato. C’è il pacchetto tikzscale, puoi usare le chiavi [tt]scale=, transform shape[/tt] da inserirsi nelle opzioni della figura e puoi usare i classici metodi forniti dal pacchetto graphicx, come \scalebox o \resizebox (visto che una figura “è un box”). Per l’ultimo: Correctly scaling a tikzpicture `\resizebox{\textwidth}{!}{
      \begin{tikzpicture}

      \end{tikzpicture}
      }
      }`

      Ciao
      Claudio

    • #103510
      Up
      0
      Down
      ::


      Grazie Claudio, giustamente tu mi fai osservare che 24cm sono eccessivi, ci tengo a precisare che sono conscio che la lunghezza fosse superiore alla larghezza della pagina, (la pigrizia mi porta a usare sempre la scala 1:100 per i disegni per comodità) in AutoCAD il problema non si pone proprio.
      La soluzione di \resizebox è perfetta inoltre è molto interessante anche il link che hai messo.

      Il caso è Clouseau!

Visualizzazione 1 filone di risposte
  • Devi essere connesso per rispondere a questo topic.

Go to top