
저는 tikz를 처음 접했습니다. 이 코드를 오프라인에서 찾았지만 코딩 경험이 거의 없습니다. 플라스크를 향해 같은 방향을 가리키는 화살표가 있는 연속된 5개의 플라스크를 갖고 싶습니다. 또한 볼륨 측정을 추가하고 싶습니다.
\documentclass[margin=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc, shadings, arrows.meta}
\definecolor{tappo}{RGB}{148,154,110}
\definecolor{lightblue}{RGB}{155,210,220}
\tikzset{
arrR/.style={-Latex},
arrL/.style={Latex-}
}
\newcommand\flask[4][arrR]{%
\begin{scope}[shift={(#2)}]
\draw[gray] (-1.8,0) arc (180:0:1.8cm and 6mm);
\begin{scope}
\clip[rounded corners=5mm] (-.5,5) -- (-.5,3.5) -- (-1.8,.5) [sharp corners]-- (-1.8,0) arc (180:360:1.8cm and 6mm) [rounded corners=5mm]-- (1.8,.5) -- (.5,3.5) [sharp corners]-- (.5,5) -- cycle;
\end{scope}
\draw[right color=tappo, left color=tappo, middle color=tappo!40] (.4,4.5) -- (.6,5.5) arc (0:180:6mm and 2mm) -- (-.4,4.5) arc (180:360:4mm and 2mm);
\draw[fill=tappo!60] (0,5.5) ellipse (6mm and 2mm);
\draw[fill=lightblue,rounded corners=5mm, fill opacity=.7] (-.5,5) -- (-.5,3.5) -- (-1.8,.5) [sharp corners]-- (-1.8,0) arc (180:360:1.8cm and 6mm) [rounded corners=5mm]-- (1.8,.5) -- (.5,3.5) [sharp corners]-- (.5,5) arc (360:180:5mm and 2mm);
\draw[fill=lightblue, opacity=.5] (.5,5) to[out=-50,in=230, looseness=2] (-.5,5) arc (180:360:5mm and 2mm);
\begin{scope}[remember picture,overlay,shift={(0,7.5)},rotate=210-(#3*.16)]
\filldraw[black] (-.2,.03) --++ (1,-.01) --++ (0,-.04) --++ (-1,-.01) --++ (0,-.08) --++ (-.05,0) --++ (0,.22) --++ (.05,0) -- cycle;
\end{scope}
\begin{scope}
\draw[#1, line width=.2mm] (1.5,3.9) -- (2.5,3.9) node[right, font=\scriptsize] {#4};
\end{scope}
\begin{scope}[xshift=4mm]
\end{scope}
\end{scope}
}
\begin{document}
\begin{tikzpicture}
\flask{0,0}{0}{1 Molar};
\flask[arrL]{5,0}{130}{0.5 Molar};
\flask[arrL]{10,0}{590}{0.125 Molar};
\end{tikzpicture}
\end{document}
답변1
TeX:SE에 오신 것을 환영합니다!
MWE(최소 작업 예제)에는 세 개의 플라스크가 그려진 다음 코드 조각이 있습니다.
\flask{0,0}{0}{1 Molar};
\flask[arrL]{5,0}{130}{0.5 Molar};
\flask[arrL]{10,0}{590}{0.125 Molar};
더 많은 것을 갖고 싶다면 중심 사이에 원하는 수평 거리를 두고 더 많은 코드 줄을 추가하면 됩니다. 예를 들어:
\flask{0,0}{0}{1 Molar};
\flask[arrL]{5,0}{130}{0.5 Molar};
\flask[arrL]{10,0}{590}{0.125 Molar};
\flask[arrL]{15,0}{590}{0.125 Molar};
\flask[arrL]{20,0}{590}{0.125 Molar};
이 거리만큼 이미지가 페이지 밖으로 쏟아져 나올 것입니다. 이를 방지하려면 그에 따라 거리를 줄여야 합니다. 예를 들어 다음 WME에서 수행되는 작업은 다음과 같습니다.
\documentclass[margin=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,
calc,
shadings}
\definecolor{tappo}{RGB}{148,154,110}
\definecolor{lightblue}{RGB}{155,210,220}
\tikzset{
arrR/.style={-Latex},
arrL/.style={Latex-}
}
\newcommand\flask[4][arrR]{%
\begin{scope}[shift={(#2)}]
\draw[gray] (-1.8,0) arc (180:0:1.8cm and 6mm);
\begin{scope}
\clip[rounded corners=5mm] (-.5,5) -- (-.5,3.5) -- (-1.8,.5) [sharp corners] -- (-1.8,0) arc (180:360:1.8cm and 6mm) [rounded corners=5mm]-- (1.8,.5) -- (.5,3.5) [sharp corners]-- (.5,5) -- cycle;
\end{scope}
\draw[right color=tappo, left color=tappo, middle color=tappo!40] (.4,4.5) -- (.6,5.5) arc (0:180:6mm and 2mm) -- (-.4,4.5) arc (180:360:4mm and 2mm);
\draw[fill=tappo!60] (0,5.5) ellipse (6mm and 2mm);
\draw[fill=lightblue,rounded corners=5mm, fill opacity=.7] (-.5,5) -- (-.5,3.5) -- (-1.8,.5) [sharp corners]-- (-1.8,0) arc (180:360:1.8cm and 6mm) [rounded corners=5mm]-- (1.8,.5) -- (.5,3.5) [sharp corners]-- (.5,5) arc (360:180:5mm and 2mm);
\draw[fill=lightblue, opacity=.5] (.5,5) to[out=-50,in=230, looseness=2] (-.5,5) arc (180:360:5mm and 2mm);
\begin{scope}[remember picture,overlay,shift={(0,7.5)},rotate=210-(#3*.16)]
\filldraw[black] (-.2,.03) --++ (1,-.01) --++ (0,-.04) --++ (-1,-.01) --++ (0,-.08) --++ (-.05,0) --++ (0,.22) --++ (.05,0) -- cycle;
\end{scope}
\begin{scope}
\draw[#1, line width=.2mm] (1,3.9) -- (2,3.9) node[right, font=\scriptsize] {#4};
\end{scope}
\end{scope}
}
\begin{document}
\begin{tikzpicture}
\flask{0,0}{0}{1 Molar};
\flask[arrL]{4.2,0}{130}{0.5 Molar}; % <--- changed
\flask[arrL]{8.4,0}{590}{0.125 Molar}; % <--- changed
\flask[arrR]{12.6,0}{590}{0.125 Molar}; % <--- added
\flask[arrL]{16.8,0}{590}{0.125 Molar}; % <--- added
\end{tikzpicture}
\end{document}
답변2
정말 좋은 플라스크네요! 문제는 rounded corners
. 그 중 5개는 한 페이지에 다 들어가지 않습니다. 따라서 \scalebox
일반적인 명령을 사용하여 화살표를 사용하고 그립니다 LaTeX
. 참고: 플라스크에 몇 가지 부피 측정값을 추가했습니다.
\scaleflask
하나의 선택적 인수를 취하는 새 명령을 만들었습니다 .
\scaleflask[.3]
.3
(선택적) 배율 인수입니다(기본값=1).
코드
\[
\scaleflask[.3]\xleftarrow{\textstyle1.0\Molar}
\scaleflask[.3]\xleftarrow{\textstyle0.5\Molar}
\scaleflask[.3]\xleftarrow{\textstyle0.25\Molar}
\scaleflask[.3]\xleftarrow{\textstyle0.13\Molar}
\scaleflask[.3]\xleftarrow{\textstyle0.06\Molar}
\]
위의 이미지를 만듭니다. 전체 코드는 다음과 같습니다.
\documentclass{article}
\usepackage{tikz, amsmath}
\usetikzlibrary{shadings}
\definecolor{tappo}{RGB}{148,154,110}
\definecolor{lightblue}{RGB}{155,210,220}
\newcommand\flask[1][1]{\begin{tikzpicture}
\draw[gray] (-1.8,0) arc (180:0:1.8cm and 6mm);
\begin{scope}
\clip[rounded corners=5mm] (-.5,5) -- (-.5,3.5) -- (-1.8,.5) [sharp corners]--
(-1.8,0) arc (180:360:1.8cm and 6mm) [rounded corners=5mm]-- (1.8,.5) --
(.5,3.5) [sharp corners]-- (.5,5) -- cycle;
\end{scope}
\draw[right color=tappo, left color=tappo, middle color=tappo!40] (.4,4.5) --
(.6,5.5) arc (0:180:6mm and 2mm) -- (-.4,4.5) arc (180:360:4mm and 2mm);
\draw[fill=tappo!60] (0,5.5) ellipse (6mm and 2mm);
\draw[fill=lightblue,rounded corners=5mm, fill opacity=.7] (-.5,5) -- (-.5,3.5) --
(-1.8,.5) [sharp corners]-- (-1.8,0) arc (180:360:1.8cm and 6mm) [rounded corners=5mm]--
(1.8,.5) -- (.5,3.5) [sharp corners]-- (.5,5) arc (360:180:5mm and 2mm);
\draw[fill=lightblue, opacity=.5] (.5,5) to[out=-50,in=230, looseness=2] (-.5,5) arc (180:360:5mm and 2mm);
\foreach \y[count=\n, evaluate=\n as \m using int(50*\n), evaluate=\y as \k using 18-\y^(3/2)/14] in {4,10,17,25}{
\draw[white, thick, yshift=\y mm]([xscale=3]250:.333*\k mm) arc(250:280:\k mm and .333*\k mm)node[rotate=4, right]{\sffamily \m};}
\end{tikzpicture}}
\newcommand{\scaleflask}[1][1]{\vcenter{\hbox{\scalebox{#1}{\flask}}}}
\newcommand{\Molar}{\textup{ Molar}}
\begin{document}
\[
\scaleflask[.3]\xleftarrow{\textstyle1.0\Molar}
\scaleflask[.3]\xleftarrow{\textstyle0.5\Molar}
\scaleflask[.3]\xleftarrow{\textstyle0.25\Molar}
\scaleflask[.3]\xleftarrow{\textstyle0.13\Molar}
\scaleflask[.3]\xleftarrow{\textstyle0.06\Molar}
\]
\end{document}