diff options
Diffstat (limited to 'macros/latex/contrib/schulmathematik/schulma-physik.sty')
-rw-r--r-- | macros/latex/contrib/schulmathematik/schulma-physik.sty | 416 |
1 files changed, 304 insertions, 112 deletions
diff --git a/macros/latex/contrib/schulmathematik/schulma-physik.sty b/macros/latex/contrib/schulmathematik/schulma-physik.sty index b3996d6cc2..975093e906 100644 --- a/macros/latex/contrib/schulmathematik/schulma-physik.sty +++ b/macros/latex/contrib/schulmathematik/schulma-physik.sty @@ -1,7 +1,16 @@ % schulmathematik bundle: package schulma-physik -% Version 1.3 -% 12. August 2022 -\ProvidesExplPackage{schulma-physik}{2022-08-12}{1.3}{Befehle für die Schulphysik} +% Version 1.4 +% 13. März 2023 +\ProvidesExplPackage{schulma-physik}{2023-03-13}{1.4}{Befehle für die Schulphysik} + +\newif \ifschulma@physik@circuitikz % keine expl3-Syntax möglich, da von circuits.ee.IEC nicht unterstützt + +\DeclareOption {circuitikz} + { + \schulma@physik@circuitikztrue + } + +\ProcessOptions \relax \RequirePackage {siunitx} \RequirePackage {tikz} @@ -21,7 +30,7 @@ \NewDocumentCommand \tqty {m m} { \ensuremath - { + { \group_begin: \textstyle \qty [ per-mode = fraction ] {#1} {#2} @@ -34,7 +43,7 @@ \NewDocumentCommand \tunit {m} { \ensuremath - { + { \group_begin: \textstyle \unit [ per-mode = fraction ] {#1} @@ -108,57 +117,154 @@ \dim_const:Nn \c_schulma_physik_messschieber_b_schieber_dim {17mm} \dim_const:Nn \c_schulma_physik_messschieber_l_fenster_dim {25mm} \dim_const:Nn \c_schulma_physik_messschieber_b_fenster_dim {1cm} +\dim_const:Nn \c_schulma_physik_messschieber_randabstand_dim {1mm} -\NewDocumentCommand \Messschieber {m} +\bool_new:N \l_schulma_physik_messschieber_cm_bool +\bool_new:N \l_schulma_physik_messschieber_inch_bool + +\msg_new:nnn {schulma-physik} {falsche Option} + { + #1~ist~keine~gültige~Option~für~einen~Messschieber. + } + +\NewDocumentCommand \Messschieber {om} { + \IfValueTF {#1} + { + \str_case:nnF {#1} + { + {cm} { + \bool_set_true:N \l_schulma_physik_messschieber_cm_bool + \bool_set_false:N \l_schulma_physik_messschieber_inch_bool + } + {inch} { + \bool_set_false:N \l_schulma_physik_messschieber_cm_bool + \bool_set_true:N \l_schulma_physik_messschieber_inch_bool + } + {cm+inch} { + \bool_set_true:N \l_schulma_physik_messschieber_cm_bool + \bool_set_true:N \l_schulma_physik_messschieber_inch_bool + } + } + { + \msg_warning:nnn {schulma-physik} {falsche Option} {#1} + } + } + { + \bool_set_true:N \l_schulma_physik_messschieber_cm_bool + \bool_set_false:N \l_schulma_physik_messschieber_inch_bool + } + \begin {tikzpicture} [ font = \sffamily ] % Hauptskala - \draw ( -1.6cm , -0.5 * \c_schulma_physik_messschieber_b_skala_dim + 0.5 * \c_schulma_physik_messschieber_b_fenster_dim ) - -- ++ ( \c_schulma_physik_messschieber_l_skala_dim , 0 ) node [ above~left ] { \small cm } + \draw ( -1.6cm , 0 ) + -- ++ ( \c_schulma_physik_messschieber_l_skala_dim , 0 ) + \bool_if:NT \l_schulma_physik_messschieber_cm_bool { node [ above~left ] { \small cm } } -- ++ ( 0 , \c_schulma_physik_messschieber_b_skala_dim ) + \bool_if:NT \l_schulma_physik_messschieber_inch_bool { node [ below~left ] { \small inch } } -- ++ ( - \c_schulma_physik_messschieber_l_skala_dim , 0) -- cycle ; - \int_step_inline:nnn {0} {120} + \bool_if:NT \l_schulma_physik_messschieber_cm_bool { - \int_set:Nn \l_tmpa_int { \int_mod:nn {##1} {10} } - \int_compare:nNnTF {\l_tmpa_int} = {0} + \int_step_inline:nnn {0} {120} { - \draw (##1*1mm,-1mm)--(##1*1mm,6mm) node [ left , xshift=2pt , yshift = -2pt ] - { \footnotesize \int_eval:n {##1/10} } ; + \int_set:Nn \l_tmpa_int { \int_mod:nn {##1} {10} } + \int_compare:nNnTF {\l_tmpa_int} = {0} + { + \draw ( ##1*1mm , \c_schulma_physik_messschieber_randabstand_dim ) -- ++ ( 0, 6.5mm ) + node [ left = -2pt , yshift = -2.5pt ] { \footnotesize \int_eval:n {##1/10} } ; + } + { + \int_compare:nNnTF {\l_tmpa_int} = {5} + { + \draw ( ##1*1mm , \c_schulma_physik_messschieber_randabstand_dim ) -- ++ ( 0 , 5.25mm ); + } + { + \draw ( ##1*1mm , \c_schulma_physik_messschieber_randabstand_dim ) -- ++ ( 0 , 4mm ); + } + } } + } + \bool_if:NT \l_schulma_physik_messschieber_inch_bool + { + \int_step_inline:nnn {0} {80} { - \int_compare:nNnTF {\l_tmpa_int} = {5} + \int_set:Nn \l_tmpa_int { \int_mod:nn {##1} {16} } + \int_compare:nNnTF {\l_tmpa_int} = {0} { - \draw (##1*1mm,-1mm)--(##1*1mm,4.5mm); + \draw ( ##1*0.0625in , \c_schulma_physik_messschieber_b_skala_dim - \c_schulma_physik_messschieber_randabstand_dim ) -- ++ (0,-6mm) + node [ left = -2pt , yshift = 3pt ] { \footnotesize \int_eval:n {##1/16} } ; } { - \draw (##1*1mm,-1mm)--(##1*1mm,3mm); + \int_compare:nNnTF {\l_tmpa_int} = {8} + { + \draw (##1*0.0625in , \c_schulma_physik_messschieber_b_skala_dim - \c_schulma_physik_messschieber_randabstand_dim ) -- ++ (0,-5mm) ; + } + { + \int_if_even:nTF {##1} + { + \draw ( ##1*0.0625in , \c_schulma_physik_messschieber_b_skala_dim - \c_schulma_physik_messschieber_randabstand_dim ) -- ++ (0,-4mm) ; + } + { + \draw ( ##1*0.0625in , \c_schulma_physik_messschieber_b_skala_dim - \c_schulma_physik_messschieber_randabstand_dim ) -- ++ (0,-3mm) ; + } + } } } } % Schieber \draw [ fill = white , even~odd~rule ] - ( #1cm - 0.5 * \c_schulma_physik_messschieber_l_schieber_dim + 4.5mm , - -0.5 * \c_schulma_physik_messschieber_b_schieber_dim + 0.5 * \c_schulma_physik_messschieber_b_fenster_dim ) + ( #2cm - 0.5 * \c_schulma_physik_messschieber_l_schieber_dim + 4.5mm , + -0.5 * \c_schulma_physik_messschieber_b_schieber_dim + 0.5 * \c_schulma_physik_messschieber_b_skala_dim ) rectangle ++ ( \c_schulma_physik_messschieber_l_schieber_dim , \c_schulma_physik_messschieber_b_schieber_dim ) { [rounded~corners = 0.5 * \c_schulma_physik_messschieber_b_fenster_dim ] - ( #1cm - 0.5 * \c_schulma_physik_messschieber_l_fenster_dim + 4.5mm , 0 ) + ( #2cm - 0.5 * \c_schulma_physik_messschieber_l_fenster_dim + 4.5mm , + 0.5 \c_schulma_physik_messschieber_b_skala_dim - 0.5 \c_schulma_physik_messschieber_b_fenster_dim ) rectangle ++ ( \c_schulma_physik_messschieber_l_fenster_dim , \c_schulma_physik_messschieber_b_fenster_dim ) } ; % Noniusskala - \int_step_inline:nnn {0} {10} + \bool_if:NT \l_schulma_physik_messschieber_cm_bool { - \int_set:Nn \l_tmpa_int { \int_mod:nn {##1} {10} } - \int_compare:nNnTF {\l_tmpa_int} = {0} + \int_step_inline:nnn {0} {10} { - \draw ( #1cm + ##1 * 0.9mm , 0 ) -- ( #1cm + ##1 * 0.9mm , -1.6mm ) ; + \int_set:Nn \l_tmpa_int { \int_mod:nn {##1} {10} } + \int_compare:nNnTF {\l_tmpa_int} = {0} + { + \draw ( #2cm + ##1 * 0.9mm , 0.5 \c_schulma_physik_messschieber_b_skala_dim - 0.5 \c_schulma_physik_messschieber_b_fenster_dim ) + -- ++ ( 0 , -1.6mm ) ; + } + { + \int_compare:nNnTF {\l_tmpa_int} = {5} + { + \draw ( #2cm + ##1 * 0.9mm , 0.5 \c_schulma_physik_messschieber_b_skala_dim - 0.5 \c_schulma_physik_messschieber_b_fenster_dim ) + -- ++ ( 0 , -1.3mm ) ; + } + { + \draw ( #2cm + ##1 * 0.9mm , 0.5 \c_schulma_physik_messschieber_b_skala_dim - 0.5 \c_schulma_physik_messschieber_b_fenster_dim ) + -- ++ ( 0 , -1mm ) ; + } + } } + } + \bool_if:NT \l_schulma_physik_messschieber_inch_bool + { + \int_step_inline:nnn {0} {8} { - \int_compare:nNnTF {\l_tmpa_int} = {5} + \int_set:Nn \l_tmpa_int { \int_mod:nn {##1} {4} } + \int_compare:nNnTF {\l_tmpa_int} = {0} { - \draw ( #1cm + ##1 * 0.9mm , 0 ) -- ( #1cm + ##1 * 0.9mm , -1.3mm ) ; + \draw ( #2cm + ##1 * 0.0546875in , 0.5 * \c_schulma_physik_messschieber_b_skala_dim + 0.5 * \c_schulma_physik_messschieber_b_fenster_dim ) + -- ++ ( 0 , 1.6mm ) ; } { - \draw ( #1cm + ##1 * 0.9mm , 0 ) -- ( #1cm + ##1 * 0.9mm , -1mm ) ; + \int_compare:nNnTF {\l_tmpa_int} = {2} + { + \draw ( #2cm + ##1 * 0.0546875in , 0.5 * \c_schulma_physik_messschieber_b_skala_dim + 0.5 * \c_schulma_physik_messschieber_b_fenster_dim ) + -- ++ ( 0 , 1.3mm ) ; + } + { + \draw ( #2cm + ##1 * 0.0546875in , 0.5 * \c_schulma_physik_messschieber_b_skala_dim + 0.5 * \c_schulma_physik_messschieber_b_fenster_dim ) + -- ++ ( 0 , 1mm ) ; + } } } } @@ -241,99 +347,185 @@ \end{tikzpicture} } -\ExplSyntaxOff +\dim_new:N \l_schulma_physik_kraftmesser_breite_skala_dim +\dim_set:Nn \l_schulma_physik_kraftmesser_breite_skala_dim {1cm} +\dim_new:N \l_schulma_physik_kraftmesser_laenge_skala_dim +\dim_set:Nn \l_schulma_physik_kraftmesser_laenge_skala_dim {9cm} +\dim_new:N \l_schulma_physik_kraftmesser_breite_huelse_dim +\dim_set:Nn \l_schulma_physik_kraftmesser_breite_huelse_dim {1.1cm} +\dim_new:N \l_schulma_physik_kraftmesser_laenge_huelse_dim +\dim_set:Nn \l_schulma_physik_kraftmesser_laenge_huelse_dim {3cm} +\dim_new:N \l_schulma_physik_kraftmesser_offset_huelse_dim +\dim_set:Nn \l_schulma_physik_kraftmesser_offset_huelse_dim {0.5pt} -\usetikzlibrary{circuits.ee.IEC} - -\pgfdeclareshape{doppelbuchse} - {% - \inheritsavedanchors[from=rectangle ee]% - \inheritanchor[from=rectangle ee]{center}% - \inheritanchor[from=rectangle ee]{north}% - \inheritanchor[from=rectangle ee]{south}% - \inheritanchor[from=rectangle ee]{east}% - \inheritanchor[from=rectangle ee]{west}% - \inheritanchor[from=rectangle ee]{north east}% - \inheritanchor[from=rectangle ee]{north west}% - \inheritanchor[from=rectangle ee]{south east}% - \inheritanchor[from=rectangle ee]{south west}% - \inheritanchor[from=rectangle ee]{input}% - \inheritanchor[from=rectangle ee]{output}% - \inheritanchorborder[from=rectangle ee]% - \backgroundpath{ - \pgf@process{\pgfpointadd{\southwest}{\pgfpoint{\pgfkeysvalueof{/pgf/outer xsep}}{\pgfkeysvalueof{/pgf/outer ysep}}}}% - \pgf@xa=\pgf@x \pgf@ya=\pgf@y - \pgf@process{\pgfpointadd{\northeast}{\pgfpointscale{-1}{\pgfpoint{\pgfkeysvalueof{/pgf/outer xsep}}{\pgfkeysvalueof{/pgf/outer ysep}}}}}% - \pgf@xb=\pgf@x \pgf@yb=\pgf@y - \pgfutil@tempdima=\pgf@yb% - \advance\pgfutil@tempdima by -\pgf@ya% - \pgfutil@tempdima=0.5\pgfutil@tempdima% - \advance\pgf@xa by \pgfutil@tempdima% - \advance\pgf@xb by -\pgfutil@tempdima% - {\pgfpathcircle{\pgfqpoint{\pgf@xa}{0pt}}{\pgfutil@tempdima}} - {\pgfpathcircle{\pgfqpoint{\pgf@xb}{0pt}}{\pgfutil@tempdima}} - }% - } -\tikzset +\NewDocumentCommand \Kraftmesser {mm} { - bulb IEC graphic/.style= + \begin{tikzpicture} [ font = { \sffamily \bfseries \footnotesize } ] + % Haken + \draw [ very~thick ] ( 0 , -#1/#2 * \l_schulma_physik_kraftmesser_laenge_skala_dim ) -- ++ (0,-6mm) arc [ start~angle = 90 , end~angle = 380 , radius = 2mm ] ; + % ausziehbare Skala + \int_step_inline:nn { \fp_eval:n { round ( 10*#1/#2 + 1 ) } } { - circuit symbol lines, - circuit symbol size=width 1.9 height 1.9, - shape=generic circle IEC, - /pgf/generic circle IEC/before background= + \int_if_even:nTF {##1} { - \pgfpathmoveto{\pgfpointpolar{-135}{1pt}} - \pgfpathlineto{\pgfpointpolar{45}{1pt}} - \pgfpathmoveto{\pgfpointpolar{-45}{1pt}} - \pgfpathlineto{\pgfpointpolar{135}{1pt}} - \pgfusepathqstroke - }, - transform shape, - }, - capacitor IEC graphic/.style= - { - circuit symbol lines, - circuit symbol size=width 0.8 height 2.4, - transform shape, - shape=capacitor IEC, - }, - amperemeter graphic/.style= - { - circuit symbol open, - circuit symbol size=width 2 height 2, - transform shape, - shape=generic circle IEC, - info=center:{\sffamily A} - }, - voltmeter graphic/.style= - { - circuit symbol open, - circuit symbol size=width 2 height 2, - transform shape, - shape=generic circle IEC, - info=center:{\sffamily V} - }, - circuit declare symbol=messgeraet, - set messgeraet graphic= + \str_set:Nn \l_tmpa_str {red} + } + { + \str_set:Nn \l_tmpa_str {white} + } + + \draw [ fill = \l_tmpa_str ] + ( -0.5 * \l_schulma_physik_kraftmesser_breite_skala_dim , \fp_to_decimal:n { -#1/#2 + (##1-1)/10 } * \l_schulma_physik_kraftmesser_laenge_skala_dim ) + to [ out = -20 , in = 200 ] node [above] { \int_compare:nNnT {##1} = {1} {N} } + ++ ( \l_schulma_physik_kraftmesser_breite_skala_dim , 0 ) + -- ++ ( 0, 0.1 * \l_schulma_physik_kraftmesser_laenge_skala_dim ) + to [ out = 200 , in = -20 ] + node [ below , inner~sep = 2pt ] { \num [ mode = text , reset-text-family = false , reset-text-series = false ] { \fp_to_decimal:n {##1/10*#2} } } + ++ ( -\l_schulma_physik_kraftmesser_breite_skala_dim , 0 ) -- cycle ; + } + % Überstand der Skala + \draw [ fill = white ] ( -0.5 * \l_schulma_physik_kraftmesser_breite_skala_dim , -#1/#2 * \l_schulma_physik_kraftmesser_laenge_skala_dim - 1.5mm ) + to [ out = -20 , in = 200 ] ++ ( \l_schulma_physik_kraftmesser_breite_skala_dim , 0 ) -- ++ (0,1.5mm) + to [ out = 200 , in = -20 ] ++ ( -\l_schulma_physik_kraftmesser_breite_skala_dim , 0 ) -- cycle ; + % mittlere Striche + \begin {scope} + \clip ( 0.25 \l_schulma_physik_kraftmesser_breite_skala_dim , 0 ) + rectangle ( 0.5 \l_schulma_physik_kraftmesser_breite_skala_dim , -#1/#2 * \l_schulma_physik_kraftmesser_laenge_skala_dim ) ; + \int_step_inline:nn { \fp_eval:n { ceil ( 100*#1/#2 ) } } { - circuit symbol open, - circuit symbol size=width 2 height 2, - transform shape, - shape=generic circle IEC, - /pgf/generic circle IEC/before background= + \int_compare:nNnT { \int_mod:nn {##1} {10} } = {5} { - \draw[annotation arrow,->] (0.58pt,-0.58pt)--(-0.58pt,0.58pt); + \draw ( -0.5 \l_schulma_physik_kraftmesser_breite_skala_dim , \fp_to_decimal:n { -#1/#2 + ##1/100 } * \l_schulma_physik_kraftmesser_laenge_skala_dim ) + to [ out = -20 , in = 200 ] ++ ( \l_schulma_physik_kraftmesser_breite_skala_dim , 0 ) ; } - }, - circuit declare symbol=spannungsquelle, - set spannungsquelle graphic= + } + \end {scope} + % kleine Striche + \begin {scope} + \clip ( 0.35 \l_schulma_physik_kraftmesser_breite_skala_dim , 0 ) + rectangle ( 0.5 \l_schulma_physik_kraftmesser_breite_skala_dim , -#1/#2 * \l_schulma_physik_kraftmesser_laenge_skala_dim ) ; + \int_step_inline:nn { \fp_eval:n { ceil ( 100*#1/#2 ) } } { - circuit symbol open, - circuit symbol size=width 2.4 height 0.5, - transform shape, - shape=doppelbuchse, - outer sep=0pt - }, + \int_compare:nNnT { \int_mod:nn {##1} {5} } > {0} + { + \draw ( -0.5 \l_schulma_physik_kraftmesser_breite_skala_dim , \fp_to_decimal:n { -#1/#2 + ##1/100 } * \l_schulma_physik_kraftmesser_laenge_skala_dim ) + to [ out = -20 , in = 200 ] ++ ( \l_schulma_physik_kraftmesser_breite_skala_dim , 0 ) ; + } + } + \end {scope} + % Hülse + \draw [ fill = cyan ] ( -0.5 * \l_schulma_physik_kraftmesser_breite_huelse_dim , \l_schulma_physik_kraftmesser_offset_huelse_dim ) + -- ++ ( 0 , \l_schulma_physik_kraftmesser_laenge_huelse_dim ) + to [ out = -20 , in = 200 ] ++ ( 0.5 * \l_schulma_physik_kraftmesser_breite_huelse_dim , 0 ) + to [ out = 20 , in = 160 ] ++ ( 0.5 * \l_schulma_physik_kraftmesser_breite_huelse_dim , 0 ) -- ++ ( 0 , -\l_schulma_physik_kraftmesser_laenge_huelse_dim ) + to [ out = 200 , in = -20 ] cycle ; + \draw [ fill = cyan!60 ] + ( -0.5 * \l_schulma_physik_kraftmesser_breite_huelse_dim , \l_schulma_physik_kraftmesser_laenge_huelse_dim + \l_schulma_physik_kraftmesser_offset_huelse_dim ) + to [ out = 20 , in = 160 ] ++ ( 0.5 \l_schulma_physik_kraftmesser_breite_huelse_dim , 0 ) + to [ out = 200 , in = -20 ] cycle ; + \end{tikzpicture} } + + +\ExplSyntaxOff + +\ifschulma@physik@circuitikz + \RequirePackage{circuitikz} + \ctikzset{resistor=european,inductor=american} +\else + \usetikzlibrary{circuits.ee.IEC} + + \pgfdeclareshape{doppelbuchse} + {% + \inheritsavedanchors[from=rectangle ee]% + \inheritanchor[from=rectangle ee]{center}% + \inheritanchor[from=rectangle ee]{north}% + \inheritanchor[from=rectangle ee]{south}% + \inheritanchor[from=rectangle ee]{east}% + \inheritanchor[from=rectangle ee]{west}% + \inheritanchor[from=rectangle ee]{north east}% + \inheritanchor[from=rectangle ee]{north west}% + \inheritanchor[from=rectangle ee]{south east}% + \inheritanchor[from=rectangle ee]{south west}% + \inheritanchor[from=rectangle ee]{input}% + \inheritanchor[from=rectangle ee]{output}% + \inheritanchorborder[from=rectangle ee]% + \backgroundpath{ + \pgf@process{\pgfpointadd{\southwest}{\pgfpoint{\pgfkeysvalueof{/pgf/outer xsep}}{\pgfkeysvalueof{/pgf/outer ysep}}}}% + \pgf@xa=\pgf@x \pgf@ya=\pgf@y + \pgf@process{\pgfpointadd{\northeast}{\pgfpointscale{-1}{\pgfpoint{\pgfkeysvalueof{/pgf/outer xsep}}{\pgfkeysvalueof{/pgf/outer ysep}}}}}% + \pgf@xb=\pgf@x \pgf@yb=\pgf@y + \pgfutil@tempdima=\pgf@yb% + \advance\pgfutil@tempdima by -\pgf@ya% + \pgfutil@tempdima=0.5\pgfutil@tempdima% + \advance\pgf@xa by \pgfutil@tempdima% + \advance\pgf@xb by -\pgfutil@tempdima% + {\pgfpathcircle{\pgfqpoint{\pgf@xa}{0pt}}{\pgfutil@tempdima}} + {\pgfpathcircle{\pgfqpoint{\pgf@xb}{0pt}}{\pgfutil@tempdima}} + }% + } + + \tikzset + { + bulb IEC graphic/.style= + { + circuit symbol lines, + circuit symbol size=width 1.9 height 1.9, + shape=generic circle IEC, + /pgf/generic circle IEC/before background= + { + \pgfpathmoveto{\pgfpointpolar{-135}{1pt}} + \pgfpathlineto{\pgfpointpolar{45}{1pt}} + \pgfpathmoveto{\pgfpointpolar{-45}{1pt}} + \pgfpathlineto{\pgfpointpolar{135}{1pt}} + \pgfusepathqstroke + }, + transform shape, + }, + capacitor IEC graphic/.style= + { + circuit symbol lines, + circuit symbol size=width 0.8 height 2.4, + transform shape, + shape=capacitor IEC, + }, + amperemeter graphic/.style= + { + circuit symbol open, + circuit symbol size=width 2 height 2, + transform shape, + shape=generic circle IEC, + info=center:{\sffamily A} + }, + voltmeter graphic/.style= + { + circuit symbol open, + circuit symbol size=width 2 height 2, + transform shape, + shape=generic circle IEC, + info=center:{\sffamily V} + }, + circuit declare symbol=messgeraet, + set messgeraet graphic= + { + circuit symbol open, + circuit symbol size=width 2 height 2, + transform shape, + shape=generic circle IEC, + /pgf/generic circle IEC/before background= + { + \draw[annotation arrow,->] (0.58pt,-0.58pt)--(-0.58pt,0.58pt); + } + }, + circuit declare symbol=spannungsquelle, + set spannungsquelle graphic= + { + circuit symbol open, + circuit symbol size=width 2.4 height 0.5, + transform shape, + shape=doppelbuchse, + outer sep=0pt + }, + } +\fi |