我正在尝试这样的事情:
\begin{tikzpicture}[x=1cm,y=1cm]
\newcommand{\mw}[1]{#1+1}
\node [minimum width=\mw{1} cm] {};
\end{tikzpicture}
我的问题是,这被扩展为1pt + 1cm
,但我想要2cm
。命令\mw
被简化了,计算实际上更复杂。
知道如何实现这个吗?
编辑:向命令添加参数
EDIT2:我实际上想做的是一些简单的定位计算
我定义了两个命令:
\newcommand{\col}[1]{#1 * 1.5}
\newcommand{\row}[1]{#1 * 1.1}
% and use it like this:
\node [minimum width=1.3cm] at (\col{2}, \row{3}) {};
它按照坐标的预期工作,但因最小宽度而失败。
答案1
不能 100% 确定我理解了预期的应用程序,但以下内容(定义替代最小宽度键)可能会有用:
\documentclass[tikz,border=5]{standalone}
\tikzset{%
minimum width'/.code={%
% Only advisable when x and y are orthogonal
\pgfpointxy{#1}{0}%
\tikzset{minimum width/.expanded=\the\csname pgf@x\endcsname}%
},
minimum width''/.style={minimum width=(#1)*1cm}
}
\begin{document}
\begin{tikzpicture}
\node [minimum width=3+1, draw] at (0,0) {A};
\node [minimum width'=3+1, draw] at (0,1) {B};
\node [minimum width''=3+1, draw] at (0,2) {C};
\end{tikzpicture}
\end{document
答案2
使用pgfmath
并执行以下操作:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[x=1cm,y=1cm]
\pgfmathsetmacro{\mw}{1+1}
\node [draw,minimum width=\mw cm] {};
\pgfmathsetmacro{\mw}{2+2}
\node [draw,minimum width=\mw cm,yshift=1cm] {};
\end{tikzpicture}
\end{document}
这是为了编辑:
\documentclass{article}
\usepackage{tikz}
\newcommand{\col}[1]{#1 * 1.5}
\newcommand{\row}[1]{#1 * 1.1}
\begin{document}
\begin{tikzpicture}[x=1cm,y=1cm]
\pgfmathsetmacro{\mw}{\col{2}+\row{3}}
\node [draw,minimum width=\mw cm,anchor=west] at (0,0){};
\draw[yshift=-0.5cm,|-|] (0,0) -- node[midway,below]{6.3} (6.3,0);
\end{tikzpicture}
\end{document}
答案3
其中一个选项\edef\mw{\number\numexpr 1+1\relax}
如下:
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}[x=1cm,y=1cm]
\edef\mw{\number\numexpr1+1\relax}
\node [minimum width=\mw cm] {};
\end{tikzpicture}
\end{document}
\edef
代表可扩展的宏定义,因此内容按照\mw
定义进行扩展。\number
尝试将以下表达式转换为数字,这是必要的,因为:\numexpr
计算以下数学表达式,表达式应该没有空格并以 结尾\relax
(这只是一种可能性,但在我看来是最简单的一种)。问题是,\numexpr
如果不经过其他处理,它本身就不会扩展,在本例中,\number
由其他处理它。
答案4
在 Mark Wibrows 回答之后,我找到了 3 个可能(简单)的解决方案:
% 1.
\node [minimum width=(\col{1})*1cm] {};
% 2.
\newcommand{\helper}[1]{(#1)*1cm}
\node [minimum width=\helper{\col{1}}] {};
% 3.
\tikzset{%
minimum widthCM/.style={minimum width=(#1)*1cm}
}
\node [minimum widthCM=\col{1}] {};