Tikzと変数

Tikzと変数

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 を直接計算するコマンドを定義することです。

ありがとう

関連情報