最小宽度计算

最小宽度计算

我正在尝试这样的事情:

\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}] {};

相关内容