Tikz und Variablen

Tikz und Variablen

Ich habe zwei Variablen definiert

\def\aa{3}  \def\bb{1}

\def\qq{\multiply\aa by \bb}

aber wenn ich versuche, \qqin einem \matrixBefehl wie

\matrix[matrix of math nodes]{12 & \qq\\};

ktikz sagt:

temptikzcode.pgf:60 You can't use `the character 3'

Was mache ich falsch?

Ich vermute, dass es sich um ein Variablenproblem handelt, das ich jedoch weder mittels \print{\qq}noch lösen konnte \string\qq.

Danke

Antwort1

A \def\aa{3}weist kein Zählregister zu. \multiplyerfordert ein Zählregister (eine „Integer-Variable“).

Verwenden Sie entweder countRegister oder \the\numexpr \aa *\bb, letzteres funktioniert nur für ganze Zahlen, während \multiplyauch für numerische Variablen verwendet werden kann.

Das Beispiel verwendet beide Wege.

\multiply\mynumberone by \mynumbertwomultipliziert den Inhalt beider Zählregister und speichert das Ergebnis in , das entweder mit then oder mit \mynumberoneausgedruckt werden muss .\the\mynumberone\number\value{mynumberone}

Der \numexpr- Ansatz ist einfacher, erfordert aber e-TeX, was heutzutage jedoch kein Problem mehr sein sollte.

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}


\def\aa{3}  \def\bb{1}

\newcount\mynumberone
\newcount\mynumbertwo

\mynumberone=3
\mynumbertwo=2

\def\qq{\the\numexpr\aa * \bb\relax}

\def\ww{\multiply\mynumberone by \mynumbertwo}


\begin{tikzpicture}
  \matrix[matrix of math nodes]{12 & \qq\\ 15 & \ww\the\mynumberone\\};
\end{tikzpicture}

\end{document}

Bildbeschreibung hier eingeben

Antwort2

Eine funktionierende Methode wäre, \pgfmathtruncatemacroanstelle von zu verwenden \multiply. Dadurch wird das Ergebnis berechnet und die Dezimalstellen abgeschnitten. Wenn Sie Dezimalstellen benötigen, können Sie verwenden \pgfmathsetmacro.

Ein Nachteil der Verwendung von „as \def“ im Gegensatz zu \newcommandist, dass Sie nicht erfahren, ob Sie ein vorhandenes Makro neu definieren. In diesem Fall \aaist das Makro zum Drucken eines „å“. Im Allgemeinen ist die Neudefinition vorhandener Makros keine gute Praxis, es sei denn, Sie sind, um cfr zu zitieren, „absolut sicher, dass Sie wissen, was Sie tun und warum“.

Leider wird \pgfmathtruncatemacroauch \pgfmathsetmacronicht geprüft, ob das Makro vorhanden ist.

\documentclass[border=2mm]{standalone}
\usepackage{tikz}
%\newcommand\aa{3}  % causes error, command \aa already defined
\newcommand\aaa{3} 
\newcommand\bb{1}
\pgfmathtruncatemacro{\qq}{\aaa*\bb}
\usetikzlibrary{matrix}
\begin{document} 
\begin{tikzpicture}
\matrix[matrix of math nodes]{12 & \qq\\};
\end{tikzpicture}
\end{document} 

Antwort3

Nur als Anmerkung: Mein ursprüngliches Problem bestand darin, zwei Matrizen zu erstellen und das Produkt auf drei verschiedene Arten auszuführen, um eine Sequenz für ein Video für meine Schüler zu erstellen. Knotenhintergründe und Pfeile wurden intensiv verwendet.

Ich glaube, ich habe ein weiteres Problem gelöst, das vielleicht jemanden interessiert:alle Einträge einer Matrix nach rechts zu setzen. (wie \begin{array}{rrr}... )

\pgfmathtruncatemacro{\qc}{\ha*\bc} \def\qct{{\color{c1}\ifthenelse{\qc<0}{\qc}{\D\qc}}}

wobei \qc und \ha berechnete Variablen sind, \bc der B(1,3)-Eintrag meiner zweiten Matrix ist (keine Ahnung, warum Tikz \b13 nicht als Variable akzeptiert) \qct eine Textversion von \qc ist: wenn nicht negativ, setzen wir ein \D = \phantom{-}.

Weniger kompliziert wäre es, einen Befehl zu definieren, um \qct direkt als Eintrag einer Knotenmatrix zu berechnen.

Danke

verwandte Informationen