tikzmath 库中字符串变量的条件测试

tikzmath 库中字符串变量的条件测试

是否可以在 tikzmath 库中测试字符串?(例如,如果 <变量>=<字符串表达式>,则 foo)

我尝试了一个简单的测试,它返回了这个错误:

Package PGF Math Error: Unknown function `text' (in ' text== text').

MWE 如下:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{math}
\begin{document}
\tikzmath{
    let \str = text;
    if \str == \str then {%
        let \str = bird;
    };
}%
\str
\end{document}

答案1

\tikzmath功能不允许字符串比较。您可以使用不同的策略:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{math}
\usepackage{pdftexcmds}

\makeatletter
\newcommand{\strequal}[2]{\pdf@strcmp{#1}{#2}==0}
\makeatother


\begin{document}
\tikzmath{
    let \str = text;
    if \strequal{\str}{\str} then {%
        let \str = bird;
    };
}%
\str

\tikzmath{
    let \str = text;
    if \strequal{\str}{bird} then {%
        let \str = bird;
    };
}%
\str
\end{document}

加载pdftexcmds确保跨引擎的兼容性。

在此处输入图片描述

答案2

您可以在 a 内部使用expl3's (我将其在使用\tl_if_eq:nnTF之外提供 ) (但不能在 in 中使用,因为它会再次尝试将您的字符串评估为函数名称)。\ExplSyntaxOn\cs_set_eq:NNtikzpicture\tikzmath

\documentclass{article}
\usepackage{tikz}
\usepackage{xparse}
\usetikzlibrary{calc}
\usetikzlibrary{math}
\ExplSyntaxOn
\cs_set_eq:NN \tlIfEqnnTF \tl_if_eq:nnTF
\ExplSyntaxOff
\begin{document}
\begin{tikzpicture}
  \tlIfEqnnTF{foo}{bar}
    {\node at (0,0) {correct};}
    {\node at (0,0) {false};}
\end{tikzpicture}
\end{document}

答案3

这是一个基本的 TeX 解决方案。

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{math}

\newcommand{\ifstrA}{}% reserve global names
\newcommand{\ifstrB}{}
\newcommand{\ifstr}[4]{% #1 = string A, #2 = stirng B, #3 = true, #4= false
  \def\ifstrA{#1}%
  \def\ifstrB{#2}%
  \ifx\ifstrA\ifstrB #3\relax
  \else #4\relax
  \fi}

\begin{document}
\ifstr{text}{text}{bird}{oops}
\end{document}

相关内容