Tikz 的图片缩放和包装

Tikz 的图片缩放和包装

我需要将文本环绕在我的 tikz 图片周围。但正如您所看到的,缩放图片会给我带来有关“pompa”和“turbina”之间阴影轴位置的问题。我该如何解决这个问题?

\documentclass[a4paper,12pt]{report} \usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc} \usepackage[italian]{babel}

\usepackage{wrapfig} \usepackage{bm}

\usepackage{tikz}
 \usetikzlibrary{positioning,intersections,shapes.geometric,decorations.pathmorphing,decorations.pathreplacing,decorations.shapes,decorations.markings,patterns,calc,fit,arrows,backgrounds}

 \begin{document}

 \begin{wrapfigure}{r}{0.5\textwidth} \vspace{-1cm}

 \centering \begin{tikzpicture}[>=latex',auto,inner sep=2mm,node
 distance=2cm and 3cm,transform canvas={scale=0.85}]

 %setting styles

 \tikzset{box1/.style={draw,minimum width=2cm,rectangle,thick}}
 \tikzset{deco/.style={decoration={markings, mark=at position #1 with
 {\arrow{>} }},postaction={decorate}}}
 \tikzset{turb/.style={draw,trapezium,shape border rotate=90,inner
 sep=1pt,minimum width=2.5cm,trapezium stretches=true,trapezium
 angle=80,on grid,below right= of evaporatore}}                       
 \tikzset{every pin edge/.style={<-,shorten
 >=-0.2cm,decorate,decoration={bent,amplitude=-2,aspect=0.3}}}

 %define nodes and labels 
 \node[box1] (setA)   [label=right:$T_A$]     
 {\textit{SET A}}; \node[box1,below=1cm of setA] (evaporatore)         
 {\textit{Evaporatore}}; \node[turb,fill=white] (turbina)              
 {\textit{Turbina}}; \node[box1,right=1cm of turbina] (sem)            
 {\textit{SEM}}; \node[box1,on grid,below left=of turbina]
 (condensatore)                               {\textit{Condensatore}};
 \node[draw,circle,fill=white,on grid,below left= of evaporatore,inner
 sep=1mm] (pompa) {\textit{Pompa}}; \node[box1] (setB)  [below=1 cm of
 condensatore] [label=right:$T_B$]                   {\textit{SET B}};

 %the "IMT" dashed box and label 
 \node (imt) [draw,dashed,inner
 sep=3pt,fit = (evaporatore) (turbina) (condensatore)(pompa),pin={[pin
 distance=10mm] 30:\textit{IMT}}]  {};


 %drawing connections between components 
 \begin{scope}[>=triangle 60] 
 \draw [deco=0.6]  (evaporatore)                -| node[pos=0.6]{2}
 (turbina.top right corner);  \draw [deco=0.6]  (turbina.bottom left
 corner) |- node[above=1mm,pos=0.71]{3} (condensatore);  \draw
 [deco=0.4]  (condensatore)               -|
 node[above=1mm,pos=0.31]{4} (pompa);  \draw [deco=0.6]  (pompa)       
 |- node[below=1mm,pos=0.63]{1} (evaporatore); \end{scope}

 %drawing the arrows

 \begin{scope}[>=stealth', shorten >=-0.0cm,shorten <=-0.0cm,->] 
 \path[thick] (setA)         edge node[] {$\bm{q_A}$} (evaporatore)
                   (turbina)      edge node[] {$\bm{l}$}   (sem)
                   (condensatore) edge node[] {$\bm{q_B}$} (setB); \end{scope}

 % drawing the shaded axis between "pompa" and "turbina"

 \begin{scope}[on background layer] \draw[shading=axis]
 ($(pompa.center)+(0,-3pt)$) rectangle ($(turbina.center)+(0,3pt)$);
 \end{scope} \end{tikzpicture}

 \vspace{6cm} \end{wrapfigure}

 Il funzionamento di tutti gli impianti motori termici si basa sul
 ciclo diretto di Carnot: chiaramente l'impianto motore dovrà essere
 formato da più macchine, o componenti, in grado di realizzare tali
 trasformazioni sul fluido di lavoro. Tipicamente gli scambi di energia
 termica \textit{1-2} e \textit{3-4}  si ottengono mediante scambiatori
 di calore ; l’espansione \textit{2-3} è ottenuta mediante una turbina
 (a gas o a vapore); la compressione \textit{4-1} è ottenuta mediante
 un compressore (se il fluido di lavoro si trova in fase gassosa) o una
 pompa (liquido).

 In figura riportiamo lo schema di funzionamento di un impianto motore
 termico con turbina a vapore.

 \end{document}

这是原图:

\documentclass{article}  \usepackage{tikz}
 \usetikzlibrary{positioning,
                intersections,
                shapes.geometric,
                decorations.pathmorphing,
                decorations.pathreplacing,
                decorations.shapes,
                decorations.markings,
                patterns,
                calc,
                fit,
                arrows,
                backgrounds}
                 \usepackage{bm}

 \begin{document}

 \begin{tikzpicture}[>=latex',auto,inner sep=2mm,node distance=2cm and
 3cm]

 %setting styles

 \tikzset{box1/.style={draw,minimum width=2cm,rectangle,thick}}
 \tikzset{deco/.style={decoration={markings, mark=at position #1 with
 {\arrow{>} }},postaction={decorate}}}
 \tikzset{turb/.style={draw,trapezium,shape border rotate=90,inner
 sep=1pt,minimum width=2.5cm,trapezium stretches=true,trapezium
 angle=80,on grid,below right= of evaporatore}}                       
 \tikzset{every pin edge/.style={<-,shorten
 >=-0.2cm,decorate,decoration={bent,amplitude=-2,aspect=0.3}}}

 %define nodes and labels 
 \node[box1] (setA)   [label=right:$T_A$]     
 {\textit{SET A}}; \node[box1,below=1cm of setA] (evaporatore)         
 {\textit{Evaporatore}}; \node[turb,fill=white] (turbina)              
 {\textit{Turbina}}; \node[box1,right=1cm of turbina] (sem)            
 {\textit{SEM}}; \node[box1,on grid,below left=of turbina]
 (condensatore)                               {\textit{Condensatore}};
 \node[draw,circle,fill=white,on grid,below left= of evaporatore,inner
 sep=1mm] (pompa) {\textit{Pompa}}; \node[box1] (setB)  [below=1 cm of
 condensatore] [label=right:$T_B$]                   {\textit{SET B}};

 %the "IMT" dashed box and label 
 \node (imt) [draw,dashed,inner
 sep=3pt,fit = (evaporatore) (turbina) (condensatore)(pompa),pin={[pin
 distance=10mm] 30:\textit{IMT}}]  {};


 %drawing connections between components 
\begin{scope}[>=triangle 60] 
 \draw [deco=0.6]  (evaporatore)                -| node[pos=0.6]{2}
 (turbina.top right corner);  \draw [deco=0.6]  (turbina.bottom left
 corner) |- node[above=1mm,pos=0.71]{3} (condensatore);  \draw
 [deco=0.4]  (condensatore)               -|
 node[above=1mm,pos=0.31]{4} (pompa);  \draw [deco=0.6]  (pompa)       
 |- node[below=1mm,pos=0.63]{1} (evaporatore); \end{scope}

 %drawing the arrows

 \begin{scope}[>=stealth', shorten >=-0.0cm,shorten <=-0.0cm,->] 
 \path[thick] (setA)         edge node[] {$\bm{q_A}$} (evaporatore)
                   (turbina)      edge node[] {$\bm{l}$}   (sem)
                   (condensatore) edge node[] {$\bm{q_B}$} (setB); \end{scope}

 % drawing the shaded axis between "pompa" and "turbina"

 \begin{scope}[on background layer] \draw[shading=axis]
 ($(pompa.center)+(0,-3pt)$) rectangle ($(turbina.center)+(0,3pt)$);
 \end{scope}

 \end{tikzpicture} 
\end{document}

答案1

小工作或手工,我不知道如何设计我的作品。

transform canvas={scale=0.8}首先,我尝试给出一个解决方案。您的问题来自with的使用 [on background layer]。如果您不使用图层,则需要将阴影轴放置在涡轮和 pompa 之前。我删除了这些对象的一些选项,例如draw和以获得精确的尺寸,我过去常常\hphantom避免写文本。

然后,在图片的末尾,我在阴影轴上方画出庞帕和涡轮。

现在谈谈一般方法。在编写像这样的复杂图形之前,您需要知道要做什么:缩放还是不缩放是一个问题。如果您想缩放图形,则需要小心使用一些工具,如节点、定位。您需要正确写入尺寸(绝对有单位或无单位)。在这种情况下,您可以使用节点,但在此之前我认为最好定义坐标来放置 pompa、turbina、evaporatore 等。这样可以更轻松地缩放对象。关于其他解决方案,如果您使用resizebox或类似的东西,问题是字体的大小、线条的宽度等。最好避免缩放(T. Tantau 的想法和以好的尺寸绘制),我个人更喜欢使用好的工具来轻松缩放。

\documentclass[a4paper,12pt]{report} 
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc} 
\usepackage[italian]{babel}
\usepackage{wrapfig} 
\usepackage{bm}
\usepackage{tikz}
 \usetikzlibrary{positioning,intersections,shapes.geometric,decorations.pathmorphing,decorations.pathreplacing,decorations.shapes,decorations.markings,patterns,calc,fit,arrows,backgrounds}

 \begin{document}

\begin{wrapfigure}{r}{0.5\textwidth} \vspace{-1cm}
 \centering 

 \begin{tikzpicture}[>=latex',auto,
                     inner sep=2mm,
                     node distance=2cm and 3cm,
                     transform canvas={scale=0.8}]

 %setting styles

 \tikzset{box1/.style={draw,minimum width=2cm,rectangle,thick}}
 \tikzset{deco/.style={decoration={markings, mark=at position #1 with
 {\arrow{>} }},postaction={decorate}}}
 \tikzset{turb/.style={draw,trapezium,shape border rotate=90,
                       inner sep=1pt,minimum width=2.5cm,
                       trapezium stretches=true,
                       trapezium angle=80,on grid,
                       below right= of evaporatore}}                       
 \tikzset{every pin edge/.style={<-,shorten >=-0.2cm,
                        decorate,
                        decoration={bent,amplitude=-2,aspect=0.3}}}

 %define nodes and labels 
 \node[box1] (setA)   [label=right:$T_A$]     {\textit{SET A}}; 
 \node[box1,below=1cm of setA] (evaporatore)  {\textit{Evaporatore}}; 
 \node[turb,fill=white] (turbina)             {\hphantom{\textit{Turbina}}}; 
 \node[box1,right=1cm of turbina] (sem)       {\textit{SEM}}; 
 \node[box1,on grid,below left=of turbina] (condensatore)  {\textit{Condensatore}};
 \node[circle,on grid, below left= of evaporatore,inner sep=1mm] (pompa) {\hphantom{\textit{Pompa}}}; 
 \node[box1] (setB)  [below=1 cm of condensatore] [label=right:$T_B$]  {\textit{SET B}};

 %the "IMT" dashed box and label 
 \node (imt) [draw,dashed,inner sep=3pt,
             fit = (evaporatore) (turbina) (condensatore)(pompa),
             pin={[pin distance=10mm] 30:\textit{IMT}}]  {};

 %drawing connections between components 
 \begin{scope}[>=triangle 60] 
     \draw [deco=0.6] (evaporatore)  -| node[pos=0.6]{2} (turbina.top right corner);  
     \draw [deco=0.6] (turbina.bottom left corner) |- node[above=1mm,pos=0.71]{3} (condensatore);  
     \draw[deco=0.4]  (condensatore)    -| node[above=1mm,pos=0.31]{4} (pompa);  
     \draw [deco=0.6] (pompa)  |- node[below=1mm,pos=0.63]{1} (evaporatore); 
 \end{scope}

 %drawing the arrows

 \begin{scope}[>=stealth', shorten >=-0.0cm,shorten <=-0.0cm,->] 
   \path[thick] (setA)         edge node[] {$\bm{q_A}$} (evaporatore)
                (turbina)      edge node[] {$\bm{l}$}   (sem)
                (condensatore) edge node[] {$\bm{q_B}$} (setB); 
 \end{scope}

 % drawing the shaded axis between "pompa" and "turbina"

 \begin{scope}%[on background layer] 
   \draw[shading=axis] ($(pompa.east)+(0,-3pt)$) rectangle ($(turbina.west)+(0,3pt)$);
 \end{scope} 

\node[turb,fill=white] (turbina)    {\textit{Turbina}}; 
 \node[draw,circle,
       fill=white,on grid,
       below left= of evaporatore,
       inner sep=1mm] (pompa) {\textit{Pompa}};  
\end{tikzpicture}

 \vspace{6cm} \end{wrapfigure}

 Il funzionamento di tutti gli impianti motori termici si basa sul
 ciclo diretto di Carnot: chiaramente l'impianto motore dovrà essere
 formato da più macchine, o componenti, in grado di realizzare tali
 trasformazioni sul fluido di lavoro. Tipicamente gli scambi di energia
 termica \textit{1-2} e \textit{3-4}  si ottengono mediante scambiatori
 di calore ; l’espansione \textit{2-3} è ottenuta mediante una turbina
 (a gas o a vapore); la compressione \textit{4-1} è ottenuta mediante
 un compressore (se il fluido di lavoro si trova in fase gassosa) o una
 pompa (liquido).

 In figura riportiamo lo schema di funzionamento di un impianto motore
 termico con turbina a vapore.

 \end{document}

在此处输入图片描述

相关内容