如何适应钻石形状

如何适应钻石形状

我正在写一个流程图。使用菱形 ( test/.style={base, diamond, aspect=2, text width=5em}),我的菱形会过度放大。我怎样才能将文本分布在整个形状上(以减小其尺寸)?

这是我使用的代码:

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

答案1

和:

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

并在节点中手动中断文本:

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

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

我获得了这些节点的以下外观:

在此处输入图片描述

在此处输入图片描述

我需要你的帮助才能获得完整的代码和流程图。你的 MWE 在文本和行连接方面有一些错误。从你的大量注释中也很难找到代码。先试着清理一下你的代码,然后我再看看我能为你做些什么。

编辑:同时,cfr 在他的回答中也做到了我问您的问题。我将冒昧地根据他的 MWE 升级我的回答,在此基础上,根据我的一些猜测和品味,建议进行以下更改:

  • 改用菱形signal。通过这种改变,在测试节点中格式化文本变得更加容易。
  • 将箭头标签移至其开头
  • 使所有节点更宽
  • 对于字体,使用更小的字体大小,如 cfr:\footnotesize
  • 使\linespread{0.8}节点中的文本行更加简洁
  • 引入新的节点形状(流程图中的最后一个节点)
  • 改变一个节点形状(我猜,它应该是“测试”类型)
  • 稍微重新排列节点的位置

完整代码为:

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

并得到的流程图为:

在此处输入图片描述

答案2

以下 MWE 使用inner sep距离创建具有相同文本大小的较小的菱形。

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

输出如下: 在此处输入图片描述

答案3

这是整理的开始。如果空间不足,您可以稍微减小字体大小并使用无文本,这在图表中往往更清晰。但是,您还应该考虑减少节点之间的距离并增加实际包含内容的节点/文本的大小。

在没有这样做的情况下,我尝试调整样式,删除未使用的 faff 并更新语法以使用arrows.metashapes.geometric

流程图

对距离进行更多的调整,并在菱形节点中使用手动换行,使用负数inner ysep,它看起来像这样:

进一步调整

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

相关内容