3

I'm writing a flow-chart. Using diamond (test/.style={base, diamond, aspect=2, text width=5em}), my diamond shape enlarges itself too much. How can I spread the text on the entire shape (to reduce the size of it)?

This is the code I use:

\documentclass[x11names]{article}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows,chains} 
%%%<
\usepackage{verbatim}
\usepackage[active,tightpage]{preview}
\usetikzlibrary{positioning} %----permette il posizionamento relativo dei nodi
\usepackage[latin1]{inputenc} %----permette l' uso dei caratteri accentati
\usepackage[italian]{babel} %-----permette la sillabazione secondo le regole italiane
\PreviewEnvironment{tikzpicture}
\setlength\PreviewBorder{5mm}%
%%%>
\begin{document}
% =================================================
% Set up a few colours questi sono i colori poi usati per le linee i connettori e il riempimento di alcune forme, variando il numero del colore, varia il coloreetc. tipo: riga di colore lcfree
\colorlet{lcfree}{Green3} 
\colorlet{lcnorm}{Blue3}
\colorlet{lccong}{Red3}
\providecommand{\cmark}[2][]{\relax} %------crea il comando \cmark utilizzato in seguito
% ----------------QUESTO PEZZO INDICA COME FARE LA CATENA ---!!!!!!!---
% Start the picture
\begin{tikzpicture}[%
    >=triangle 60,              % Nice arrows;variando i simboli > e =, cambia la forma della freccia
    start chain=going below,    % General flow is top-to-bottom unisce i blocchi andando da sopra a sotto
    node distance=16mm and 60mm, % Global setup of box spacing 16mm verticale 60 orizzontale
    every join/.style={norm},   % Default linetype for connecting boxes utilizzando lo stile norm/free/cong definiti a riga 87
    ]
% ------------------------------------------------------------------
%in questa area vengono definiti gli stili delle forme da inserire nelle griglie.Questi stili vengono poi usati per dare forma ai vari nodi, usando il nome dello stile come primo parametro del nodo. es. \node [proc, join...]
% A few box styles 
% <on chain> *and* <on grid> reduce the need for manual relative
% positioning of nodes
\tikzset{
%--il parametro align= allinea il testo all interno della forma (left, center, right)
    base/.style={draw, on chain, on grid, align=center, minimum height=4ex},
    proc/.style={base, rectangle, text width=8em},
    test/.style={base, diamond, aspect=2, text width=5em, inner sep=-15pt},
    term/.style={proc, rounded corners},
% coord node style is used for placing corners of connecting lines
  coord/.style={coordinate, on chain, on grid, node distance=6mm and 25mm},
% nmark node style is used for coordinate debugging marks
  nmark/.style={draw, cyan, circle, font={\sffamily\bfseries}},
%======================fine definizione stili delle forme
% Connector line styles for different parts of the diagram. qui si definiscono gli stili dei connettori. Il colore del connettore (lcnorm, lcfree, lccong) sono a loro volta definiti ella sezione (set up a few color alcune righe sopra)
  norm/.style={->, draw, lcnorm},
  free/.style={->, draw, lcfree},
  cong/.style={->, draw, lccong},
  it/.style={font={\small\itshape}} %questo DOVREBBE configurafre un font
}
% ----------------------------------inizio posizionamento forme--------
% Start by placing the nodes il parametro join serve a collegare il nodo con il precedente. per i collegamenti specifici (tipo nodo sssc0003 a nodo sssc0004, vedere il codice che inizia con: "All the other connections... alle righe succesive
%------*********inizio posizionamento delle forme I colonna******--------------------
% Use join to connect a node to the previous one ------uso di join per connettere i nodi ai blocchi precedenti--------------
\node [proc, densely dotted, it] (sscom001) {Ricevimento comunicazione};
\node [test, join] (sscom002) {La documentazione formale della  comunicazione \'e completa?};
\node [proc, join] (sscom003) { Comunicazione di irricevibilità al richiedente)};
\node [proc, join] (sscom999) {Chiusura procedimento};
%-----------------------------fine I colonna---------------
%---------------inizio II  e III colonna------------------------------
\node [proc ] (ssri-cap) [left=of sscom001] {Comunicazione apertura pratica al registro imprese};
\node [proc, join] (ssri-cep) [left=of ssri-cap]  {comunicazione esito pratica al registro delle imrese};
%----- seconda colonna ----------------------------
\node [proc, ] (sscom004)[right=of sscom003] {Trasmissione al richiedente ricevuta di protocollo};
\node [proc, ] (sscom005) [left=of sscom003]{Trasmissione della Comunicazione al B.O. ente/ufficio destinatario};
\node [test, join] (sscom006) {Il B.O. ENTE/Ufficio destinatario trasmette al BO SUAP richiesta documentazione/provvedimento-nulla osta)};
\node [proc, join] (sscom007) {Il B.O. Suap trasmette provvedimento-nulla osta al richiedente};
\node [proc, ] (sscom008)[right=of sscom007] {Il B.O. SUAP trasmette la richiesta di documentazione integrativa al richiedente};
\node [proc, join] (sscom009) {Ricevimento documentazione integrativa da parte del richiedente};
\node [proc, join] (sscom011) { Il B.O. Suap trasmette documentazione integrativa al B.O. Ente/ufficio};
Presentazione osservazioni (10gg)
\node [proc, join] (sscom012) { Il B.O. ENTE/ufficio trasmette provvedimento/nulla osta al B.O. SUAP};
\node [proc, join] (sscom013) { Il B.O. SUAP trasmette provvedimento/nulla osta al richiedente};
\node [proc, ] (sscom012) [left=of sscom012]{Mancata integrazione da parte del richiedente};
\node [proc, join] (sspo014) {Il B.O. ENTE/Ufficio destinatario trasmette al BO SUAP provvedimento/comunicazione negativa};
\node [proc, join] (sscom014) {Il B.O. SUAP trasmette provvedimento/comunicazione negativa al richiedente};
%\node [proc, ] (sspo0023) [right=of sspo0020]{Mancata presentazione osservazioni entro 10gg};
%-------------------fine posizionamento nodi-----------------------------------https://preview.overleaf.com/public/rtkznwdyqxfw/images/909eaf975d88a4b576808e04852f55af05dd11cd.jpeg
%============disegno delle linee e scrittura esito=======
\draw [->,lcnorm] (sscom001.west) -- (ssri-cap);
\draw[->](sscom002.east) -| (sscom004) node[midway,above] {SI};
\draw[->](sscom002.west) -| (sscom005) node[midway,above] {SI};
\path (sscom002) -- (sscom003) node[midway,left] {NO};
\draw [] (sscom006) -- node {SI} (sscom007);
\draw [->] (sscom006.south) -| node {NO} (sscom008.north);
\draw [*->] (sscom008.south west) -| node {NO} (sscom012.mid east);
\draw [*->] (sscom013.east) -| node {NO} (sscom999.south east);
\draw [->] (sscom014.east) -| node {NO} (sscom999.mid east);
 \end{tikzpicture}
% =================================================
\end{document} 
  • Reduce inner xsep? Reduce text width? It can has negative value too. For more, please provide the MWE, which will show your problem. – Zarko Jan 19 '16 at 14:11
  • I use this code:"test/.style={base, diamond, aspect=2, text width=5em, inner sep=-15pt}, I've also used inner sep=-5em, but it does not work. I need to spread the text wide the shape. – RenatoP Jan 19 '16 at 14:55
  • pleas add your code to the question, not in comment. Just edit it. And, what you mean with spread text inside shape? SInce you determined text width, the text is not centered but left aligned. Maybe is `align=center˙ (in shape parameters) what you looking for. Clarify this, if possible with sketch! – Zarko Jan 19 '16 at 15:17
  • I'm assuming the image wasn't meant to be a URL typeset as a URL in the code? If it was, please roll back my last edit. – cfr Jan 19 '16 at 17:33
  • I don't know, how this URL went there. I erase it – RenatoP Jan 19 '16 at 17:38
3

With:

test/.style={base, diamond, aspect=2, align=center, inner sep=-1ex},

and manual breaking text in nodes:

\node [test, join] (sscom002) {La documentazione\\ 
                               formale della comunicazione\\
                               \'e completa?};

and

\node [test, join] (sscom006) {Il B.O. ENTE/Ufficio\\ 
                               destinatario trasmette al\\
                               BO SUAP richiesta documentazione/\\ 
                               provvedimento-nulla 
                               osta)};

I obtain the following looks of these nodes:

enter image description here

and

enter image description here

For complete code and flowchart I need your help. You MWE has some errors in text and line connections. From your forest of comment is also difficult to find code. Try to clean-up your code first, than I will see, what I can do for you.

Edit: Meanwhile cfr did in his answer what I ask you. I will take liberty to upgrade my answer on his MWE and on this base and some mine guessing and taste suggest the following changes:

  • instead diamond use shape signal. By this changes, in test nodes is far more easy to format text.
  • move labels of arrows to their beginning
  • made all node wider
  • for font use even smaller fonts size as cfr: \footnotesize
  • with \linespread{0.8} made text lines in nodes more condensed
  • introduce new node shape (for last nodes in flowchart)
  • change one node shape (I guess, that it should be type "test")
  • slightly rearranged nodes position

Complete code is:

\documentclass[border=5mm, tikz]{standalone}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usetikzlibrary{arrows.meta,
                chains,
                positioning,
                shapes.symbols}
\begin{document}
    \begin{tikzpicture}[
       font = \footnotesize,%\sffamily,
start chain = going below,
    node distance = 5mm and 7mm,
      base/.style = {draw, on chain, align=flush center,  
                     text width=34mm, minimum height=7ex, inner ysep=1mm},
     start/.style = {base, rectangle, densely dotted, fill=gray!10},
       end/.style = {base, rectangle, rounded corners, fill=gray!10},
      proc/.style = {base, rectangle},
      test/.style = {signal, base,
                     signal to=east and west,
                     text width=44mm, inner xsep=-1ex},
     arrow/.style = {-{Triangle[]}, draw, blue, thick},
every join/.style = {arrow},
                        ]
%---
\linespread{0.8}
%-------
\node (sscom001) [start]        {Ricevimento comunicazione};
\node (sscom002) [test,join]    {La\\ documentazione formale
                                 della comunicazione \'e completa?};
\node (sscom003) [proc, join]   {Comunicazione di irricevibilità al richiedente)};
%
\node (ssri-cap) [proc,
                  left=of sscom001] {Comunicazione apertura pratica al registro imprese};
\node (ssri-cep) [proc,join,
                  left=of ssri-cap] {Comunicazione esito pratica al registro delle imrese};
%
\node (sscom004) [end,right=of sscom003] 
                        {Trasmissione al richiedente ricevuta di protocollo};
\node (sscom999) [end]  {Chiusura procedimento};
%
\node (sscom005) [proc,
                  left =of sscom003] {Trasmissione della Comunicazione al B.O. ente / ufficio destinatario};
\node (sscom006) [test,join]{Il B.O. ENTE / Ufficio destinatario trasmette al BO SUAP
                                 (richiesta documentazione / provvedimento-nulla osta)};
\node (sscom007) [end,below left=of sscom006]    
                        {Il B.O. Suap trasmette provvedimento-nulla
                         osta al richiedente};
%
\node (sscom008) [test,below right=of sscom006] 
                        {Il B.O. SUAP trasmette la richiesta
                         di documentazione integrativa al richiedente};
%
\node (sscom009) [proc,join] {Ricevimento documentazione integrativa 
                              da parte del richiedente};
\node (sscom011) [proc,join] {Il B.O. Suap trasmette documentazione integrativa 
                              al B.O. Ente/ufficio}; 
%Presentazione osservazioni (10gg)
\node (sscom012) [proc,join] {Il B.O. ENTE/ufficio trasmette provvedimento / 
                              nulla osta al B.O. SUAP};
\node (sscom013) [proc,join] {Il B.O. SUAP trasmette provvedimento / 
                              nulla osta al richiedente};
\node (sscom012) [proc,
                  left=of sscom012] {Mancata integrazione da parte del richiedente};
\node (sspo014)  [proc,join] {Il B.O. ENTE/Ufficio destinatario trasmette 
                              al BO SUAP provvedimento/comunicazione negativa};
\node (sscom014) [proc,join] {Il B.O. SUAP trasmette provvedimento/comunicazione 
                              negativa al richiedente};
%
\draw[arrow,blue]    (sscom001) -- (ssri-cap);

\draw[arrow] (sscom003) |- (sscom999);
\draw[arrow] (sscom002.east) node[above right] {SI} -| (sscom004);
\draw[arrow] (sscom002.west) node[above  left] {SI} -| (sscom005);
\node[below right] at (sscom002.south) {NO};

\draw[arrow] (sscom006.west) node[above  left] {NO} -| (sscom007);

\draw [arrow] (sscom006.east) node [above right] {NO} -| (sscom008);
\draw [arrow] (sscom008.west) node [above  left] {NO} -| (sscom012);
\draw [arrow] (sscom013.east) node [above right] {NO} -| ([xshift=-3mm]sscom999.south);
\draw [arrow] (sscom014.east) node [above right] {NO} -| ([xshift=+3mm]sscom999.south);
    \end{tikzpicture}
\end{document}

And obtained flowchart is:

enter image description here

8

The following MWE uses the inner sep distance to create a smaller diamond shape with the same textsize.

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{shapes}

\tikzset{base/.style={draw, align=center, minimum height=4ex},
         test1/.style={base, diamond, aspect=2, text width=5em, inner sep=5pt},
         test2/.style={base, diamond, aspect=2, text width=5em, inner sep=-5pt}
        }

\begin{document}
    \begin{tikzpicture}
        \node[test1] (node name) at (0,0) {Text};
        \node[test2](node name) at (3,0) {Text};
    \end{tikzpicture}
\end{document}

The output look as follows: enter image description here

  • yes, it works...but maybe I need something else. With the inner option, I just stretch the shape, but the text, remail larger than the form (I've inserted inner sep=-15 pt). What I need is to spread the text inside the shape,horizontaly, I hope to explain my self. – RenatoP Jan 19 '16 at 14:44
  • @RenatoP T\hfill e\hfill x\hfill t and set text width=<whatever you like>? – cfr Jan 19 '16 at 17:24
  • where do I have to set this? – RenatoP Jan 19 '16 at 17:33
  • @RenatoP \node [diamond, draw, text centered, text width=25mm] {text\hfill text\hfill text}; ? – cfr Jan 20 '16 at 1:50
3

Here's a beginning at tidying it up a bit. If you are short of space, you can reduce the font size a bit and use sans text which tends to be clearer in diagrams. However, you should also consider decreasing the distance between nodes and increasing the size of nodes/text which actually contain content.

Without doing that, I tried adjusting the styles, deleting unused faff and updating the syntax to use arrows.meta and shapes.geometric.

flowchart

Doing a bit more fiddling with distances and using manual line breaking in the diamond nodes, with a negative inner ysep, it looks like this:

tweaked further

\documentclass[border=5pt, multi, tikz, italian]{standalone}
\usepackage{babel}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usetikzlibrary{shapes.geometric,arrows.meta,chains,positioning,quotes}

\begin{document}
\begin{tikzpicture}
  [%
    font=\sffamily\small,
    >={Triangle[]},
    */.tip={Circle[]},
    start chain=going below,
    node distance=8mm and 50mm,
    every join/.style={norm},
    base/.style={draw, on chain, on grid, align=center, minimum height=4ex, inner color=blue!50!gray!10, outer color=blue!50!gray!15},
    proc/.style={base, rectangle, text width=8em},
    test/.style={base, diamond, text centered, aspect=2, inner xsep=1pt, inner ysep=-2.5pt},
    norm/.style={->, draw, blue},
    it/.style={font={\sffamily\small\itshape}},
    every edge quotes/.append style={auto},
  ]

  \node [proc, densely dotted, it] (sscom001) {Ricevimento comunicazione};
  \node [test, join] (sscom002) {La documentazione\\formale della comunicazione\\\'e completa?};
  \node [proc, join] (sscom003) { Comunicazione di irricevibilità al richiedente)};
  \node [proc, join] (sscom999) {Chiusura procedimento};

  \node [proc ] (ssri-cap) [left=of sscom001] {Comunicazione apertura pratica al registro imprese};
  \node [proc, join] (ssri-cep) [left=of ssri-cap]  {comunicazione esito pratica al registro delle imrese};

  \node [proc, ] (sscom004)[right=of sscom003] {Trasmissione al richiedente ricevuta di protocollo};
  \node [proc, ] (sscom005) [left=of sscom003]{Trasmissione della Comunicazione al B.O. ente / ufficio destinatario};
  \node [test, join] (sscom006) {Il B.O. ENTE / Ufficio\\ destinatario trasmette al BO\\ SUAP richiesta documentazione\\ / provvedimento-nulla osta)};
  \node [proc, join] (sscom007) {Il B.O. Suap trasmette provvedimento-nulla osta al richiedente};
  \node [proc, ] (sscom008)[right=of sscom007] {Il B.O. SUAP trasmette la richiesta di documentazione integrativa al richiedente};
  \node [proc, join] (sscom009) {Ricevimento documentazione integrativa da parte del richiedente};
  \node [proc, join] (sscom011) { Il B.O. Suap trasmette documentazione integrativa al B.O. Ente/ufficio}; Presentazione osservazioni (10gg)
  \node [proc, join] (sscom012) { Il B.O. ENTE/ufficio trasmette provvedimento / nulla osta al B.O. SUAP};
  \node [proc, join] (sscom013) { Il B.O. SUAP trasmette provvedimento / nulla osta al richiedente};
  \node [proc, ] (sscom012) [left=of sscom012]{Mancata integrazione da parte del richiedente};
  \node [proc, join] (sspo014) {Il B.O. ENTE/Ufficio destinatario trasmette al BO SUAP provvedimento/comunicazione negativa};
  \node [proc, join] (sscom014) {Il B.O. SUAP trasmette provvedimento/comunicazione negativa al richiedente};

  \draw [->,blue] (sscom001.west) -- (ssri-cap);
  \draw[->](sscom002.east) -| (sscom004) node[midway,above] {SI};
  \draw[->](sscom002.west) -| (sscom005) node[midway,above] {SI};
  \path (sscom002) -- (sscom003) node[midway,left] {NO};
  \draw (sscom006) edge ["SI"] (sscom007);
  \draw [->] (sscom006.east) -| (sscom008.north) node [below right, midway] {NO};
  \draw [*->] (sscom008.west) -- +(-25pt,0) node [above]  {NO} |-(sscom012.east);
  \draw [<-*] (sscom999.south) |- ([xshift=25pt,yshift=-15pt]sscom999.south east) node [above] {NO} |- (sscom013.east);
  \draw [<-] (sscom999.east) -- +(50pt,0)  node [above] {NO} |- (sscom014.east);
\end{tikzpicture}
\end{document}

\documentclass[border=5pt, multi, tikz, italian]{standalone}
\usepackage{babel}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usetikzlibrary{shapes.geometric,arrows.meta,chains,positioning,quotes}

\begin{document}
\begin{tikzpicture}
  [%
    font=\sffamily\small,
    >={Triangle[]},
    */.tip={Circle[]},
    start chain=going below,
    node distance=16mm and 60mm,
    every join/.style={norm},
    base/.style={draw, on chain, on grid, align=center, minimum height=4ex},
    proc/.style={base, rectangle, text width=8em},
    test/.style={base, diamond, aspect=2, text width=8em, inner sep=1pt},
    norm/.style={->, draw, blue},
    it/.style={font={\sffamily\small\itshape}},
    every edge quotes/.append style={auto},
  ]

  \node [proc, densely dotted, it] (sscom001) {Ricevimento comunicazione};
  \node [test, join] (sscom002) {La documentazione formale della  comunicazione \'e completa?};
  \node [proc, join] (sscom003) { Comunicazione di irricevibilità al richiedente)};
  \node [proc, join] (sscom999) {Chiusura procedimento};

  \node [proc ] (ssri-cap) [left=of sscom001] {Comunicazione apertura pratica al registro imprese};
  \node [proc, join] (ssri-cep) [left=of ssri-cap]  {comunicazione esito pratica al registro delle imrese};

  \node [proc, ] (sscom004)[right=of sscom003] {Trasmissione al richiedente ricevuta di protocollo};
  \node [proc, ] (sscom005) [left=of sscom003]{Trasmissione della Comunicazione al B.O. ente / ufficio destinatario};
  \node [test, join] (sscom006) {Il B.O. ENTE / Ufficio destinatario trasmette al BO SUAP richiesta documentazione / provvedimento-nulla osta)};
  \node [proc, join] (sscom007) {Il B.O. Suap trasmette provvedimento-nulla osta al richiedente};
  \node [proc, ] (sscom008)[right=of sscom007] {Il B.O. SUAP trasmette la richiesta di documentazione integrativa al richiedente};
  \node [proc, join] (sscom009) {Ricevimento documentazione integrativa da parte del richiedente};
  \node [proc, join] (sscom011) { Il B.O. Suap trasmette documentazione integrativa al B.O. Ente/ufficio}; Presentazione osservazioni (10gg)
  \node [proc, join] (sscom012) { Il B.O. ENTE/ufficio trasmette provvedimento / nulla osta al B.O. SUAP};
  \node [proc, join] (sscom013) { Il B.O. SUAP trasmette provvedimento / nulla osta al richiedente};
  \node [proc, ] (sscom012) [left=of sscom012]{Mancata integrazione da parte del richiedente};
  \node [proc, join] (sspo014) {Il B.O. ENTE/Ufficio destinatario trasmette al BO SUAP provvedimento/comunicazione negativa};
  \node [proc, join] (sscom014) {Il B.O. SUAP trasmette provvedimento/comunicazione negativa al richiedente};

  \draw [->,blue] (sscom001.west) -- (ssri-cap);
  \draw[->](sscom002.east) -| (sscom004) node[midway,above] {SI};
  \draw[->](sscom002.west) -| (sscom005) node[midway,above] {SI};
  \path (sscom002) -- (sscom003) node[midway,left] {NO};
  \draw (sscom006) edge ["SI"] (sscom007);
  \draw [->] (sscom006.south) -| node [midway, above] {NO} (sscom008.north);
  \draw [*->] (sscom008.west) -- +(-25pt,0) node [above]  {NO} |-(sscom012.east);
  \draw [<-*] (sscom999.south) |- ([xshift=25pt,yshift=-25pt]sscom999.south east) node [above] {NO} |- (sscom013.east);
  \draw [<-] (sscom999.east) -- +(50pt,0)  node [above] {NO} |- (sscom014.east);
\end{tikzpicture}
\end{document}
  • great! It look really good! The final work, will be a self made .tex file. I mean: java, will read from a DB the way the flow goes, then it will build a .tex that will be compiled from a server environment to produce a graphic image. Do you know something like this? – RenatoP Jan 20 '16 at 18:20
  • No. I'm afraid not. Probably you are best off asking on a more appropriate site: java is off-topic here and I guess there will be more people with that kind of expertise elsewhere. – cfr Jan 20 '16 at 20:24

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.