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 作為節點矩陣的條目。

謝謝

相關內容