Utilisation de points de référence dans "Stanli"

Oct 24 2020

Lors de l'utilisation du package "Stanli", afin de dessiner un certain nombre de paragrammes qui se croisent, j'ai défini des valeurs de décalage. Pour le MWE illustré, le point d'origine de chaque diagramme est défini comme suit:

  • \ point {a-LD} {0} {22,5};
  • \ point {a-FBD} {0} {22,5-6};
  • \ point {a-SFD} {0} {22,5-14};

Comme indiqué, la coordonnée X est la même pour le point d'origine de chaque diagramme. Cependant, pour les placer l'un en dessous de l'autre, j'ai défini un décalage le long de la coordonnée Y. Les valeurs de décalage sont (-6) pour le premier diagramme et (-14) pour le deuxième diagramme. Comment puis-je définir ces 2 décalages dans l'environnement tikz de sorte qu'ils soient loca à cette figure uniquement où je peux être autorisé à entrer les coordonnées de point comme suit:

Y1 = -6

Y2 = -14

  • \ point {a-LD} {0} {22,5};
  • \ point {a-FBD} {0} {22,5-Y1};
  • \ point {a-SFD} {0} {22,5-Y2};

Étant donné que je n'ai besoin de saisir le décalage qu'une seule fois et de les modifier une fois, car je dois les saisir plusieurs fois, lors du changement, je dois les modifier une fois et non plusieurs fois.

\documentclass{article}
\usepackage{amsmath} 
\usepackage{stanli}

\begin{document}

\begin{center}
\begin{tikzpicture}

\draw[help lines,step=0.5](0,0) grid(15,24);


%%%%%%%%%%%%%%%%%%%%%%%%Loading%%%%%%%%%%%%%%%%

\point{a-LD}{0}{22.5};
\point{b-LD}{10}{22.5};
\point{su-LD}{2}{22.5+1.5};
\point{s-LD}{2}{22.5};
\point{sl-LD}{2}{22.5-0.5};
\point{TL-LD}{10}{22.5+2};
\point{CAP-LD}{10/2}{22.5-2.5};

% Elements

\beam{4}{a-LD}{b-LD};

%Supports

\support {1}{a-LD};
\support {2}{b-LD};


%Loads

\lineload{1}{a-LD}{b-LD}[0][2][0.035]

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%First diagram%%%%%%%%%%%%%%%%%%

\point{a-FBD}{0}{22.5-6};
\point{b-FBD}{10}{22.5-6};
\point{TL-FBD}{2*10/3}{22.5-6};
\point{TLA-FBD}{2*10/3}{22.5-6+1.75};
\point{HR}{0-1.5}{22.5-6};
\point{VRA}{0}{22.5-6-1};
\point{VRB}{10}{22.5-6-1};
\point{CAP-FBD}{10/2}{22.5-6-3.5};

% Elements

\beam{4}{a-FBD}{b-FBD};




%%%%%%%%%%%%%%%%%Second diagram%%%%%%%%%%%%%%%%%%

\internalforces{a-FBD}{b-FBD}{-3}{6}[0][red]%[0]


\point{a-SFD}{0}{22.5-14};
\point{b-SFD}{10}{22.5-14};
\point{TL-SFD}{2*10/3}{22.5-14};
\point{TLA-SFD}{2*10/3}{22.5-14+1.75};
\point{VRA}{0}{22.5-14-1};
\point{VRB}{10}{22.5-14-1};
\point{CAP-SFD}{10/2}{22.5-14-3.5};

% Elements

\beam{4}{a-SFD}{b-SFD};

\internalforces{a-SFD}{b-SFD}{-3}{6}[3][red]%[0]


\end{tikzpicture}
\end{center}

\end{document}

Réponses

3 UlrichDiez Oct 25 2020 at 02:13

Si vous le souhaitez Y1et Y2d'être constantes, vous pouvez utiliser \pgfmathdeclarefunctionpour les déclarer comme des fonctions qui ne traitent pas d'arguments et juste fournissent la valeur de la constante.

Dans l'exemple ci-dessous, j'ai utilisé \pgfkeyspour définir des macros \DeclareConstantet \DeclareConstants.

\DeclareConstant{⟨name of constant⟩}{⟨value of constant⟩} est utilisé pour déclarer une seule constante.

Plusieurs constantes peuvent être déclarées via \DeclareConstants:

\DeclareConstantstraite une liste de paires séparées par des virgules:⟨name of constant⟩=⟨value of constant⟩

\DeclareConstants{
                   ⟨name of constant 1⟩=⟨value of constant 1⟩,
                   ⟨name of constant 2⟩=⟨value of constant 2⟩,
                                      ...
                   ⟨name of constant k⟩=⟨value of constant k⟩,
                 }

Dans le cas où la valeur d'une constante elle-même contient une virgule, par exemple, comme séparateur d'arguments / opérandes d'une autre fonction pgfmath, cette valeur peut / doit être imbriquée entre accolades:

⟨name of constant 2⟩={⟨value of constant 2⟩},

foobar={mod(-100,30)},

(La constante foobaraura la valeur -10. Les jetons suivants =sont transmis au \pgfmathparsecours de l'affectation de la valeur et les jetons qui résultent des \pgfmathparsecalculs forment ce qui est fourni comme valeur de la constante. De cette façon, les calculs ne sont pas répétés chaque fois que le constante en question est utilisée.)

!!!!! Sachez qu'avec \DeclareConstantet \DeclareConstantsvous pouvez facilement remplacer les fonctions pgfmath déjà existantes. !!!!!

Alors s'il vous plaît, ne déclarez pas de constante sinou cosautre. ;-)

La section «97 Personnaliser le moteur mathématique» de pgfmanual.pdf , le manuel de TikZ et pgf, dit à propos des noms de fonctions:

Le nom de la fonction peut être composé de lettres majuscules ou minuscules, de chiffres ou d'un trait de soulignement _. Conformément à de nombreux langages de programmation, un nom de fonction ne peut pas commencer par un nombre ou contenir des espaces .

(La virgule fausse juste derrière la phrase «peut consister en» se trouve dans le manuel - je ne l'ai pas supprimée pour citer exactement.)

Ainsi, vous pouvez, par exemple, définir une constante / fonction Y1, mais vous ne pouvez pas définir une constante / fonction 1Y.

\documentclass{article}
\usepackage{amsmath} 
\usepackage{stanli}

\newcommand\DeclareConstant[2]{%
  \pgfkeys{/MyStuff/declare constant={#1}{#2}}%
}%
\newcommand\DeclareConstants[1]{\pgfkeys{/MyStuff/.cd,#1,}}%
\newcommand\exchangeargs[2]{#2#1}%
\makeatletter
\pgfkeys{%
  /MyStuff/.unknown/.code=\pgfkeys{/MyStuff/declare constant={\pgfkeyscurrentname}{#1}},
  /MyStuff/declare constant/.code 2 args=%
  \begingroup
  \pgfmathparse{#2}%
  \ifcat$\detokenize{#1}$\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi
  {%
    \GenericError{\space\space\@spaces\@spaces\@spaces\@spaces\@spaces\@spaces\@spaces}%
                 {Constant declaration error: Name of constant not specified}%
                 {\space\space\@spaces\@spaces\@spaces\@spaces\@spaces\@spaces\@spaces You cannot declare a constant without\MessageBreak specifying its name.}%
                 {You need some sort of identifier for referencing the constant.}%
    \ifcat$\detokenize\expandafter{\pgfmathresult}$\expandafter\@firstofone\else\expandafter\@gobble\fi
    {%
      \GenericError{\space\space\@spaces\@spaces\@spaces\@spaces\@spaces\@spaces\@spaces}%
                   {Constant declaration error: Value of constant not specified}%
                   {\space\space\@spaces\@spaces\@spaces\@spaces\@spaces\@spaces\@spaces You cannot declare a constant without\MessageBreak specifying its value.}%
                   {Which aspect of a constant could be constant if not its value?\MessageBreak So there must be a value!}%
    }%
    \endgroup
  }{%
    \ifcat$\detokenize\expandafter{\pgfmathresult}$\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi
    {%
      \GenericError{\space\space\@spaces\@spaces\@spaces\@spaces\@spaces\@spaces\@spaces}%
                   {Constant declaration error: Value of constant not specified}%
                   {\space\space\@spaces\@spaces\@spaces\@spaces\@spaces\@spaces\@spaces You cannot declare a constant without\MessageBreak specifying its value.}%
                   {Which aspect of a constant could be constant if not its value?\MessageBreak So there must be a value!}%
      \endgroup
    }{%
      \expandafter\endgroup
      \expandafter\exchangeargs\expandafter{\expandafter{%
        \expandafter\def
        \expandafter\pgfmathresult
        \expandafter{\pgfmathresult}%
      }}{\pgfmathdeclarefunction*{#1}{0}}%
    }%
  },%
  /MyStuff/declare constant/.value required,%
}%
\makeatother


\begin{document}

\begin{center}
\begin{tikzpicture}

% \DeclareConstant{Y1}{-3-3};
% \DeclareConstant{Y2}{-14};
\DeclareConstants{
  Y1=-3-1-2,              % yields Y1=-6
  Y2={mod(-114,-100)},    % yields Y2=-14
  % Y3=...,
  % Y4=...,
  % foobar=...,
  % ...
};

\draw[help lines,step=0.5](0,0) grid(15,24);


%%%%%%%%%%%%%%%%%%%%%%%%Loading%%%%%%%%%%%%%%%%

\point{a-LD}{0}{22.5};
\point{b-LD}{10}{22.5};
\point{su-LD}{2}{22.5+1.5};
\point{s-LD}{2}{22.5};
\point{sl-LD}{2}{22.5-0.5};
\point{TL-LD}{10}{22.5+2};
\point{CAP-LD}{10/2}{22.5-2.5};

% Elements

\beam{4}{a-LD}{b-LD};

%Supports

\support {1}{a-LD};
\support {2}{b-LD};


%Loads

\lineload{1}{a-LD}{b-LD}[0][2][0.035]

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%First diagram%%%%%%%%%%%%%%%%%%

\point{a-FBD}{0}{22.5+Y1};
\point{b-FBD}{10}{22.5+Y1};
\point{TL-FBD}{2*10/3}{22.5+Y1};
\point{TLA-FBD}{2*10/3}{22.5+Y1+1.75};
\point{HR}{0-1.5}{22.5+Y1};
\point{VRA}{0}{22.5+Y1-1};
\point{VRB}{10}{22.5+Y1-1};
\point{CAP-FBD}{10/2}{22.5+Y1-3.5};

% Elements

\beam{4}{a-FBD}{b-FBD};




%%%%%%%%%%%%%%%%%Second diagram%%%%%%%%%%%%%%%%%%

\internalforces{a-FBD}{b-FBD}{-3}{6}[0][red]%[0]


\point{a-SFD}{0}{22.5+Y2};
\point{b-SFD}{10}{22.5+Y2};
\point{TL-SFD}{2*10/3}{22.5+Y2};
\point{TLA-SFD}{2*10/3}{22.5+Y2+1.75};
\point{VRA}{0}{22.5+Y2-1};
\point{VRB}{10}{22.5+Y2-1};
\point{CAP-SFD}{10/2}{22.5+Y2-3.5};

% Elements

\beam{4}{a-SFD}{b-SFD};

\internalforces{a-SFD}{b-SFD}{-3}{6}[3][red]%[0]


\end{tikzpicture}
\end{center}

\end{document}