如何将获取两个节点之间宽度的多个命令封装成一个命令?

如何将获取两个节点之间宽度的多个命令封装成一个命令?

我是 LaTeX 和 TikZ 的新手。我有以下 TikZ 命令

\newdimen{\tempx}
\newdimen{\tempy}
\pgfextractx\tempx{\pgfpointanchor{node1}{west}};
\pgfextractx\tempy{\pgfpointanchor{node2}{east}};
\pgfmathsetlengthmacro{\tempwidth}{\tempy-\tempx-\pgflinewidth};

我想大量重用该代码片段,使用如下封装的命令

\extractwidth{node1.west,node2.east,\tempwidth}

是否可以使用\newcommand或类似方法封装上述命令?谢谢

答案1

也许是这样的,使用最新的 LaTeX 2ε-kernels/xparse 包中模块 ltcmd.dtx 的\NewDocumentCommand参数预处理器和不是那么新的 LaTeX 2ε-kernels。\SplitArgument

%\usepackage{xparse}
\newdimen{\tempx}
\newdimen{\tempy}
\NewDocumentCommand\extractwidth{>{\SplitArgument{2}{,}}m}{%
  % Split #1 at commas, you get something like 
  % \extractwidthdotsplit{node1.west}{node2.east}{\tempwidth}%
  \extractwidthdotsplit#1%
}%
\NewDocumentCommand\extractwidthdotsplit{>{\SplitArgument{1}{.}}m>{\SplitArgument{1}{.}}mm}{%
  % Split the first two arguments at dot, you get something like
  % \extractwidthsplittedt{node1}{west}{node2}{east}{\tempwidth}%
  \extractwidthsplitted#1#2{#3}%
}%
\NewDocumentCommand\extractwidthsplitted{mmmmm}{%
  \pgfextractx\tempx{\pgfpointanchor{#1}{#2}};%
  \pgfextractx\tempy{\pgfpointanchor{#3}{#4}};%
  \pgfmathsetlengthmacro{#5}{\tempy-\tempx-\pgflinewidth};%
}%
%...
\extractwidth{node1.west,node2.east,\tempwidth}%

相关内容