
Eu defini duas variáveis
\def\aa{3} \def\bb{1}
\def\qq{\multiply\aa by \bb}
mas quando tento usar \qq
um \matrix
comando como
\matrix[matrix of math nodes]{12 & \qq\\};
ktikz diz:
temptikzcode.pgf:60 You can't use `the character 3'
O que estou fazendo de errado?
Suspeito que exista algum tipo de problema de variável, mas não consegui resolver por meio \print{\qq}
ou \string\qq
.
Obrigado
Responder1
A \def\aa{3}
não aloca um registrador de contagem. \multiply
requer um registro de contagem (uma 'variável inteira').
Use count
registros ou \the\numexpr \aa *\bb
, o último funciona apenas para números inteiros, mas \multiply
também pode ser usado para variáveis numéricas.
O exemplo usa os dois sentidos.
\multiply\mynumberone by \mynumbertwo
multiplicará o conteúdo de ambos os registros de contagem e armazenará o resultado em \mynumberone
, que deve ser impresso com \the\mynumberone
then ou com \number\value{mynumberone}
.
A \numexpr
abordagem - é mais fácil, mas requer e-TeX
, mas isso não deve ser um problema hoje em dia.
\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}
Responder2
Um método de trabalho seria usar \pgfmathtruncatemacro
em vez de \multiply
. Isso calculará o resultado e truncará os decimais. Se precisar de decimais, você pode usar \pgfmathsetmacro
.
Além disso, uma desvantagem de usar \def
em oposição a \newcommand
é que ele não informa se você está redefinindo uma macro existente. Neste caso, \aa
é a macro para imprimir um "å". Em geral, redefinir macros existentes não é uma boa prática, a menos que você, para citar o cfr, "tenha certeza absoluta de que sabe o que está fazendo e por quê".
Infelizmente, \pgfmathtruncatemacro
também \pgfmathsetmacro
não verifique a existência da 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}
Responder3
Fica apenas para comentar que meu problema original era colocar duas matrizes e realizar o produto de três formas diferentes para gerar uma sequência para fazer um vídeo para meus alunos. Os fundos e setas dos nós foram usados intensamente.
Acho que resolvo outra questão que talvez alguém tenha interesse:colocar todas as entradas de uma matriz à direita. (como\begin{array}{rrr}... )
\pgfmathtruncatemacro{\qc}{\ha*\bc} \def\qct{{\color{c1}\ifthenelse{\qc<0}{\qc}{\D\qc}}}
onde \qc e \ha são variáveis calculadas, \bc é a entrada B(1,3) da minha segunda matriz (não faço ideia porque o Tikz não aceita \b13 como variável) \qct é uma versão em texto de \qc: if não negativo colocamos um \D = \phantom{-}.
Menos complicado seria definir um comando para calcular \qct diretamente como uma entrada de uma matriz de nós.
Obrigado