我需要将文本环绕在我的 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}