我在编写 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
}
我特别想在这里做的是,将\atom
and\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 \if
s。