Die Frage ist zum Archivieren gedacht, kein Support benötigt. Antworten sind jedoch gern gesehen und sehr willkommen! Ich beantworte die Frage auch selbst. Bei wikipedia findet man: Das wollte ich mit TikZ umsetzen, und zwar so, dass
Zum 2. Punkt: Das markierte Bild hat eine Gesamthöhe von ca. 7cm und ist gut lesbar. gefragt 17 Apr '18, 20:56 cis |
Neue, komplett überarbeite und stark vereinfachte Lösung. Bei den Teilen oberhalb und unterhalb der Skala handelt es sich eigentlich nur um Annotationen, für die man feste Maße verwenden kann (zumindest was ihre Höhe angeht, die Breite muss sich zur gewählten Breite anpassen). Wichtig ist, dass sich die Skala den gewählten Höhenmaßen anpasst. Im folgenden Code kann man mit den Werten etwas rumspielen Öffne in Overleaf
% Eingaben ====================== \pgfmathsetmacro{\HoeheSkala}{6.7} \pgfmathsetmacro{\Breite}{1.4} % 1.4 \pgfmathtruncatemacro{\TemperaturMin}{-274} \pgfmathtruncatemacro{\TemperaturMax}{107} \pgfmathsetmacro{\unterteilungstiefe}{5} % kleine Skala (minor ticks) \pgfmathsetmacro{\Unterteilungstiefe}{20}% große Skala (major ticks) % ============================ % Feste Werte anzeigen \def\List{% %-273.15/Absoluter\\ Temperatur-\\nullpunkt,% 0/Gefrierpunkt\\ von Wasser,% 37/K{\"o}rper-\\temperatur,%, 100/Siedepunkt\\ von Wasser% } % ============================ und dann Öffne in Overleaf
\thermo{22} um die Skalen für Insb. wenn die Kelvin-Skala verwendet wird muss ein geeigneter Temperaturbereich gewählt werden. Die automatische Anpassung von Mit entsprechendem Auskommentieren kann man auch nur zwei oder nur ein Thermometer anzeigen, z.B. Öffne in Overleaf
% thermo v1.2a \documentclass[]{article} %\documentclass[margin=5pt, tikz]{standalone} \usepackage{tikz} \usetikzlibrary{calc, math} \usepackage{amssymb, mwe} \begin{document} % Eingaben ====================== \pgfmathsetmacro{\HoeheSkala}{5.0} \pgfmathsetmacro{\Breite}{0.9} % 1.4 \pgfmathtruncatemacro{\TemperaturMin}{-274} \pgfmathtruncatemacro{\TemperaturMax}{105} \pgfmathsetmacro{\unterteilungstiefe}{5} % kleine Skala (minor ticks) \pgfmathsetmacro{\Unterteilungstiefe}{20}% große Skala (major ticks) % ============================ % Feste Werte anzeigen \def\List{% %-273.15/Absoluter\\ Temperatur-\\nullpunkt,% 0/Gefrierpunkt\\ von Wasser,% 37/K{\"o}rper-\\temperatur,%, 100/Siedepunkt\\ von Wasser% } % ============================ % Temperaturfunktionen \tikzmath{ function TemperaturStand(\t) {return (\t+abs(\Tmin))*\skalenteilung;}; function Fahrenheit(\t) {return \t*1.8+32;}; function Kelvin(\t) {return \t+273.15;}; } % Zeichenebenen \pgfdeclarelayer{foreground layer} \pgfsetlayers{main,foreground layer} \newcommand\Skala[1]{%%%%%%%%%%%%%%%%% \def\Skalentyp{#1} \if\Skalentyp C % Celsius ===================== \pgfmathtruncatemacro{\Tmin}{\TemperaturMin} \pgfmathtruncatemacro{\Tmax}{\TemperaturMax} \def\Titel{$^\circ$#1} \else % Kelvin =========================== \if\Skalentyp K \pgfmathtruncatemacro{\Tmin}{Kelvin(\TemperaturMin)} \pgfmathtruncatemacro{\Tmax}{Kelvin(\TemperaturMax)} \def\Titel{#1} \else % Fahrenheit ========================= \pgfmathtruncatemacro{\Tmin}{Fahrenheit(\TemperaturMin)} \pgfmathtruncatemacro{\Tmax}{Fahrenheit(\TemperaturMax)} \def\Titel{$^\circ$#1} \fi \fi % \pgfmathsetmacro{\skalenweite}{\Tmax-\Tmin} \pgfmathsetmacro{\skalenteilung}{\HoeheSkala/\skalenweite} }%%%%%%%%%%%%%%%%% % Allgemein \pgfmathsetmacro{\Null}{0.0} % als Vergleichsoperator %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand{\Thermometer}[1]{%%%%%%%%%%%%%%% % Vertikale Maße \coordinate[] (H) at (0,\HoeheSkala); % Horizontale Maße \pgfmathsetmacro{\a}{0} % 0 \pgfmathsetmacro{\b}{\Breite*1/7} % 0.2 \pgfmathsetmacro{\c}{\Breite*2/7} % 0.4 \pgfmathsetmacro{\d}{\Breite*3/7} % 0.6 \pgfmathsetmacro{\e}{\Breite*4/7} % 0.8 \pgfmathsetmacro{\f}{\Breite*5/7} % 1.0 \pgfmathsetmacro{\g}{\Breite*6/7} % 1.2 \pgfmathsetmacro{\h}{\Breite} % 1.4 % \coordinate[] (a) at (\a,0); \coordinate[] (b) at (\b,0); \coordinate[] (c) at (\c,0); \coordinate[] (d) at (\d,0); \coordinate[] (e) at (\e,0); \coordinate[] (f) at (\f,0); \coordinate[] (g) at (\g,0); \coordinate[] (h) at (\h,0); %\begingroup \Skala{#1} \foreach[ evaluate={\T = (\t+abs(\Tmin))*\skalenteilung}, evaluate={\u = mod(\t,\unterteilungstiefe)}, evaluate={\U = mod(\t,\Unterteilungstiefe)}, ] \t in {\Tmin,...,\Tmax}{ \ifx\U\Null \draw([shift={(0,\T)}]a) -- ([shift={(0,\T)}]d); % große Skala \node[shift={(\f,\T)}]{~~\t}; % Zahlen \else \ifx\u\Null \draw ([shift={(0,\T)}]a) -- ([shift={(0,\T)}]c) node[right]{};%\t % kleine Skala \else \fi \fi } % %\endgroup % Annotationen %%%%%%%%%%%%%%%%%% % Thermometerkörper der Skala zeichnen \foreach \x in {a,d,e,h} \draw[] (\x) -- ($(\x)+(H)$); % Unteren Thermometerkörper zeichnen \coordinate[] (A) at (0,-0.3); \coordinate[] (B) at (0,-0.6); \coordinate[] (C) at (0,-1); \coordinate[] (D) at (0,-1.2); \coordinate[] (E) at (0,-1.5); \coordinate[] (F) at (0,-2.5); \coordinate[] (G) at (0,-2.7); \pgfmathsetmacro{\m}{0.5*\Breite} \coordinate[] (m) at (\m,0); \draw[rounded corners=\Breite] (a) -- ($(A) + (a)$) -- ($(B) + (c)$) -- ($(C) + (c)$) -- ($(D) + (b)$) -- ($(E) + (b)$);; \draw[rounded corners=\Breite] ($(E) + (g)$) -- ($(D) + (g)$) -- ($(C) + (f)$) -- ($(B) + (f)$) -- ($(A) + (h)$) -- (h); % Bogen \draw[rounded corners=10*\Breite] ($(E) + (b)$) -- ($(G) + (b)$) -- ($(G) + (g)$) -- ($(E) + (g)$); % Quecksilbertank \fill[rounded corners=6*\Breite] ($(F) + (c)$) rectangle ($(C) + (f)$); \filldraw[] ($(D) + (d)$) rectangle (e); % Oberen Thermometerkörper zeichnen \coordinate[] (P) at (0,\HoeheSkala+0.8); \coordinate[] (Q) at (0,\HoeheSkala+0.4); \draw[rounded corners=14*\Breite] (H) -- (P) -- ($(P)+(h)$) -- ($(H)+(h)$); \draw[rounded corners=2*\Breite] ($(H)+(d)$) -- ($(Q)+(d)$) -- ($(Q)+(e)$) -- ($(H)+(e)$); %%%%%%%%%%%%%%%%%% % Titel \node at ($(Q)+(f)$) {\Titel}; }%%%%%%%%%%%%%%%%% % Anzuzeigende Werte \newcommand*\WertAnzeigen[2]{%%%%%%%%%%%%%%%%% \tikzset{/pgf/number format/.cd,fixed zerofill,precision=1, assume math mode=true} % \if\Skalentyp C % Celsius ==================== \pgfmathsetmacro{\Wert}{\temperatur+0} %\pgfmathsetmacro{\wert}{TemperaturStand(\Wert)} \path[]([shift={(0,#1)}]$(a)-(c)$) node[name=#2]{} -- ([shift={(0,#1)}]$(h)+(b)$); \begin{pgfonlayer}{foreground layer} \node[anchor=west, inner xsep=1pt, fill=white] at ([shift={(0,#1)}]$(h)+(b)$) {\pgfmathprintnumber\Wert}; \end{pgfonlayer} % \else \if\Skalentyp K % Kelvin ==================== \pgfmathsetmacro{\Wert}{Kelvin(\temperatur)} \path[]([shift={(0,#1)}]a) -- ([shift={(0,#1)}]$(h)+(b)$) node[anchor=west, fill=white, name=#2]{\pgfmathprintnumber\Wert}; % \else % Fahrenheit ==================== \pgfmathsetmacro{\Wert}{Fahrenheit(\temperatur)} \path[]([shift={(0,#1)}]a) -- ([shift={(0,#1)}]$(h)+(b)$) node[anchor=west, fill=white, name=#2]{\pgfmathprintnumber\Wert}; \fi \fi }%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand{\thermo}[1]{%%%%%%%%%%%%%%%% \noindent\begin{tikzpicture}[ %x=0.2cm, %y = 1cm, %xscale=0.5, %yscale=0.75, nodes={align=center, font=\sffamily\tiny, inner sep=0pt} ] \begin{scope}[name=Celsius] \Thermometer{C} % Festanzuzeigende Werte \foreach[count=\i] \t/\text in \List { \pgfmathsetmacro{\temperatur}{\t} \WertAnzeigen{TemperaturStand(\t)}{p\i} \node[anchor=east] at (p\i) {\text}; } % Variabler Wert \pgfmathsetmacro{\temperatur}{#1} \pgfmathsetmacro{\Stand}{TemperaturStand(\temperatur)} \WertAnzeigen{TemperaturStand(\temperatur)}{p} \filldraw []($(0,\Stand)+(e)$) rectangle (d); \end{scope} \begin{scope}[name=Fahrenheit, right of =Celsius, xshift = 2cm] \Thermometer{F} % Festanzuzeigende Werte \foreach[count=\i] \t/\Name in \List {%% \pgfmathsetmacro{\temperatur}{\t} \WertAnzeigen{TemperaturStand(Fahrenheit(\t))}{q\i} }%% % Variabler Wert \pgfmathsetmacro{\temperatur}{#1} \WertAnzeigen{TemperaturStand(Fahrenheit(\temperatur))}{q} \pgfmathsetmacro{\Stand}{TemperaturStand(Fahrenheit(\temperatur))} \filldraw []($(0,\Stand)+(e)$) rectangle (d); \end{scope} \begin{scope}[name=Kelvin, right of =Fahrenheit, xshift = 5cm] \Thermometer{K} % Festanzuzeigende Werte \foreach[count=\i] \t/\Name in \List {%% \pgfmathsetmacro{\temperatur}{\t} \WertAnzeigen{TemperaturStand(Kelvin(\t))}{r\i} }%% % Variabler Wert \pgfmathsetmacro{\temperatur}{#1} \WertAnzeigen{TemperaturStand(Kelvin(\temperatur))}{r} \pgfmathsetmacro{\Stand}{TemperaturStand(Kelvin(\temperatur))} \filldraw []($(0,\Stand)+(e)$) rectangle (d); \end{scope} % Verbindungslinien C-F-K % Festanzuzeigende Werte \foreach[count=\i] \t/\Name in \List {%% \draw[very thin] (p\i) -- (q\i) -- (r\i); }%% % Variabler Wert \newcommand\MitKelvin{\draw[thick] (p) -- (q) -- (r);} \MitKelvin % Verbindungslinien C-F % Festanzuzeigende Werte \foreach[count=\i] \t/\Name in \List {%% \draw[very thin] (p\i) -- (q\i); }%% % Variabler Wert \draw[thick] (p) -- (q); % Koordinaten anzeigen %\foreach \x in {a,...,h} %\fill[red] (\x) circle (1pt) node[below]{\x}; %% %\foreach \y in {A,...,G,P,Q} %\fill[red] (\y) circle (1pt) node[below]{\y}; %% %\draw[red, |<->|] (2,0) -- (2,\HoeheSkala) node[midway, above=1mm, sloped]{\HoeheSkala}; %\node[font=\normalsize] at (3,-3){\pgfmathparse{Fahrenheit(90)}\pgfmathresult}; \end{tikzpicture} }%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%% \lipsum[66] \thermo{22} \lipsum[66] %\thermo{-15} % %\thermo{100} %\lipsum[66] \end{document} beantwortet 17 Apr '18, 20:59 cis |