
2つの変数を定義しました
\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
は両方のカウントレジスタの内容を乗算し、その結果を に格納します。その結果は、 then または の\mynumberone
いずれかを使用して印刷する必要があります。\the\mynumberone
\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
ではなくを使用することの欠点の 1 つ\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
コメントとして、私の当初の課題は、2 つのマトリックスを配置し、3 つの異なる方法で積を実行してシーケンスを生成し、学生向けのビデオを作成することでした。ノードの背景と矢印が頻繁に使用されました。
おそらく誰かが興味を持っている他の問題を解決したと思います:行列のすべての要素を右に配置する. (like\begin{array}{rrr}... )
\pgfmathtruncatemacro{\qc}{\ha*\bc} \def\qct{{\color{c1}\ifthenelse{\qc<0}{\qc}{\D\qc}}}
ここで、\qc と \ha は計算された変数、\bc は 2 番目の行列の B(1,3) エントリです (Tikz が \b13 を変数として受け入れない理由はわかりません)。\qct は \qc のテキスト バージョンです。負でない場合は、\D = \phantom{-} を設定します。
もっと単純な方法は、ノードの行列のエントリとして \qct を直接計算するコマンドを定義することです。
ありがとう