
Ich habe zwei Variablen definiert
\def\aa{3} \def\bb{1}
\def\qq{\multiply\aa by \bb}
aber wenn ich versuche, \qq
in einem \matrix
Befehl 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. \multiply
erfordert ein Zählregister (eine „Integer-Variable“).
Verwenden Sie entweder count
Register oder \the\numexpr \aa *\bb
, letzteres funktioniert nur für ganze Zahlen, während \multiply
auch für numerische Variablen verwendet werden kann.
Das Beispiel verwendet beide Wege.
\multiply\mynumberone by \mynumbertwo
multipliziert den Inhalt beider Zählregister und speichert das Ergebnis in , das entweder mit then oder mit \mynumberone
ausgedruckt 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}
Antwort2
Eine funktionierende Methode wäre, \pgfmathtruncatemacro
anstelle 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 \newcommand
ist, dass Sie nicht erfahren, ob Sie ein vorhandenes Makro neu definieren. In diesem Fall \aa
ist 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 \pgfmathtruncatemacro
auch \pgfmathsetmacro
nicht 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