
He definido dos variables
\def\aa{3} \def\bb{1}
\def\qq{\multiply\aa by \bb}
pero cuando trato de usarlo \qq
en un \matrix
comando como
\matrix[matrix of math nodes]{12 & \qq\\};
ktikz dice:
temptikzcode.pgf:60 You can't use `the character 3'
¿Qué estoy haciendo mal?
Sospecho que hay algún tipo de problema de variable, pero no pude solucionarlo mediante \print{\qq}
o \string\qq
.
Gracias
Respuesta1
A \def\aa{3}
no asigna un registro de conteo. \multiply
requiere un registro de conteo (una 'variable entera').
Utilice count
registros o \the\numexpr \aa *\bb
, el último funciona solo para números enteros, mientras que \multiply
también se puede utilizar para variables numéricas.
El ejemplo utiliza ambos sentidos.
\multiply\mynumberone by \mynumbertwo
multiplicará el contenido de ambos registros de conteo y almacenará el resultado en \mynumberone
, que debe imprimirse con \the\mynumberone
then o con \number\value{mynumberone}
.
El \numexpr
enfoque - es más fácil, pero requiere e-TeX
, pero esto no debería ser un problema hoy en día.
\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}
Respuesta2
Un método de trabajo sería utilizar \pgfmathtruncatemacro
en lugar de \multiply
. Esto calculará el resultado y truncará los decimales. Si necesitas decimales, puedes utilizar \pgfmathsetmacro
.
Además, una desventaja de usar \def
en lugar de \newcommand
es que no le dirá si está redefiniendo una macro existente. En este caso, \aa
es la macro para imprimir un "å". En general, redefinir las macros existentes no es una buena práctica, a menos que usted, citando a CFR, "esté absolutamente seguro de saber lo que está haciendo y por qué".
Desafortunadamente, \pgfmathtruncatemacro
tampoco \pgfmathsetmacro
verifique la existencia de la macro.
\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}
Respuesta3
Es solo para comentar que mi problema original era poner dos matrices y realizar el producto de tres formas diferentes para generar una secuencia para hacer un video para mis alumnos. Se utilizaron intensamente fondos de nodos y flechas.
Creo que soluciono otro tema que quizás a alguien le interese:poner todas las entradas de una matriz a la derecha. (como\begin{array}{rrr}.... )
\pgfmathtruncatemacro{\qc}{\ha*\bc} \def\qct{{\color{c1}\ifthenelse{\qc<0}{\qc}{\D\qc}}}
donde \qc y \ha son variables calculadas, \bc es la entrada B(1,3) de mi segunda matriz (no tengo idea de por qué Tikz no acepta \b13 como variable) \qct es una versión de texto de \qc: if no negativo ponemos a \D = \phantom{-}.
Sería menos complicado definir un comando para calcular \qct directamente como una entrada de una matriz de nodos.
Gracias