Tikz 和变量

Tikz 和变量

我已经定义了两个变量

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

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

但是当我尝试使用类似命令\qq\matrix

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

ktikz 说:

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

我究竟做错了什么?

我怀疑存在类型变量问题,但是无法通过方法\print{\qq}或来解决\string\qq

谢谢

答案1

A\def\aa{3}没有分配计数寄存器。\multiply需要计数寄存器(“整数变量”)。

要么使用count寄存器,要么\the\numexpr \aa *\bb使用,后者只适用于整数,而\multiply也可以用于数字变量。

该示例使用了两种方式。

\multiply\mynumberone by \mynumbertwo将把两个计数寄存器的内容相乘并将结果存储在中\mynumberone,必须用\the\mynumberonethen 或用打印\number\value{mynumberone}

-方法\numexpr更简单,但需要e-TeX,但这现在应该不是问题。

\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}

在此处输入图片描述

答案2

一种可行的方法是使用\pgfmathtruncatemacro而不是\multiply。这将计算结果并截断小数。如果需要小数,可以使用\pgfmathsetmacro

另外,使用\def而不是 的一个缺点\newcommand是它不会告诉您是否正在重新定义现有宏。在本例中,\aa是用于打印“å”的宏。一般来说,重新定义现有宏并不是一个好习惯,除非你引用 cfr 的话,“绝对确定你知道自己在做什么以及为什么这样做”。

不幸的是,\pgfmathtruncatemacro\pgfmathsetmacro没有检查宏是否存在。

\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} 

答案3

仅供参考,我最初的问题是将两个矩阵放在一起,并以三种不同的方式执行乘积以生成一个序列,为我的学生制作视频。节点背景和箭头被大量使用。

我认为我解决了其他可能有人感兴趣的问题:将矩阵的所有元素放在右边. (如\begin{array}{rrr}... )

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

其中 \qc 和 \ha 是计算变量,\bc 是我的第二个矩阵的 B(1,3) 条目(不知道为什么 Tikz 不接受 \b13 作为变量)\qct 是 \qc 的文本版本:如果非负,我们将 \D = \phantom{-}。

不太复杂的是定义一个命令来直接计算 \qct 作为节点矩阵的条目。

谢谢

相关内容