
我定義了兩個變數
\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\mynumberone
then 或用列印\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 作為節點矩陣的條目。
謝謝