Tikz/Pgf if 语句

Tikz/Pgf if 语句

我在编写 if 语句时遇到了麻烦,我几乎找不到有关它们的文档,而我想要做的事情却似乎很简单。

我正在使用轨道 pgf/tikz 示例从这里开始,我想写一种新的原子类型,它不使用第三个参数,而是使用描述压缩性的短语

通常,创建原子的代码如下所示:

\Atom{}{90/west/0,270/east/1}

所以我写了一个单独的方法并试图修改它

\AtomSquash{}{90/west/sq,270/east/sq}

创建原子的代码如下

\newcommand{\Atom}[3][AtomNode]{
  \node[atomcore] (#1){#2};% {\ce{#2}};
  \foreach \ang/\anchor/\n in {#3} {
      \orbital{\ang}{#1.\anchor}{\n}
  }
}
\newcommand{\AtomSquash}[3][AtomNode]{
        \node[atomcore] (#1){#2};
        \foreach \ang/\anchor/\squashness in {#3}{
                \squashorbital{\ang}{#1.\anchor}{\squashness}
        }

}

轨道代码如下:

\newcommand{\orbital}[3]{
    \begin{scope}[rotate=#1,shift=(#2)]
        % These points define the curve for the orbital.
        \coordinate (c1) at (-\orbwidth, .6 * \orbheight);
        \coordinate (c2) at (-\orbwidth, \orbheight);
        \coordinate (c3) at (\orbwidth, \orbheight);
        \coordinate (c4) at (\orbwidth, .6 * \orbheight);
        \coordinate (top) at (0,\orbheight);

        %Coordinates of the electrons

        \coordinate (e1) at (0, 0.45*\orbheight);
        \coordinate (e2) at (0, 0.75*\orbheight);
    \end{scope}  \begin{pgfonlayer}{background}

      \draw[orbital #3] (#2) .. controls (c1) and (c2) .. (top) ..
            controls (c3) and (c4) .. (#2);
  \end{pgfonlayer}

  % Draw the electrons
  \ifnum#3>0
      \foreach \n in {1,...,#3} {
          %Don't need electrons to be shaded.
          %\shade[ball color=electron] (e\n) circle (1mm);
      }
  \fi
}

我特别想在这里做的是,将\atomand\atomsquash放在一个方法中,该方法将根据参数的数量或第三个参数的文本值(它等于“sq”还是数字?)进行决定。我曾尝试编写如下所示的 if 语句,\iftype=sq但编译器非常不喜欢这样。如果我将 sq 括在引号中,这没有帮助,代码将编译通过,但 if 语句永远不会为真。

帮助?

答案1

使用纯 TeX 的 s 无法轻松比较字符串\if。如果您使用 LaTeX,我会使用如果那么软件包,你几乎肯定已经安装了它。有了它,你想要的 if 语句如下所示:

\ifthenelse{\equal{#3}{sq}}
           {... code if #3 == sq ...}
           {... code if #3 != sq ...}

您还可以在条件内进行数字测试,例如

\ifthenelse{\equal{#3}{sq} \OR #3 > 0}
           {... valid ...}
           {... invalid ...}

答案2

使用 TeX 基元,你可以执行以下操作

\def\sqstr{sq}
\def\argiii{#3}
\ifx\argiii\sqstr
  % #3==sq code
\else
  % #3!=sq code
\fi

我一开始更喜欢 ifthen.sty,但出于某种原因,现在我喜欢 TeX \ifs。

相关内容