TikZ 中的解析和编程

TikZ 中的解析和编程

背景:我一直在阅读 PGF 手册(按键部分),今天 TeX Book 刚刚通过邮件寄到,我刚开始阅读第 7 章(TeX 如何读取你输入的内容)——感觉自己就像“魔法师学徒”中的米老鼠。

我想要(但是这是不是问题)来执行类似这样的例程:

   input:   a,b ; c,d ; e,f.
   output:  a\nodepart{b} && c\nodepart{d} && e\nodepart{f}\\

我的想法是使用 PGF 解析器来读取输入。如果我使用我所了解的语言(旧版 Basic、Python、Maple 脚本),我会将中间结果保存在变量中,但就我目前所理解的,LaTeX/TeX/和 TikZ/PGF 不以这种方式工作。没有字符串操作例程。我知道我们可以将内容存储到 pgf 键中。在您停止阅读之前,我最好问一下我的问题:

  1. 是否有 (LaTeX/TeX/ 和 TikZ/PGF) 代码示例,可以读取一些输入可变长度可能超过十个并且吐出一些其他代码?
  2. 考虑到上述示例,我应该阅读哪些参考资料才能有效地实施该例程?

后记:

  1. 阅读建议的标签,我刚刚了解 LaTeX 解析包,也会检查它。
  2. @egreg:最终目标是在 TikZ 中定义一个双矩阵环境,以正常形式显示双人游戏。想法是创建类似于此的输出http://www.maths.lse.ac.uk/Personal/stengel/bimatrixgame/example.pdf但随着直观且类似人类的语言我们在 TikZ 构造中看到。

答案1

这是第二个答案问题的如何分割字符串?解决您的问题。虽然它不是您想要的,但它可以帮助您。

\documentclass[a4paper]{article}
\makeatletter
\def\processArg#1,#2{%
  #1 nodepart #2
}
\def\myutil@empty{}
\def\severalparts#1;#2\@nil{%
 \def\NextArg{#2}%
 \processArg#1%
 \ifx\myutil@empty\NextArg
     \let\next\@gobble
 \else XX
 \fi
 \next#2\@nil
}%
\def\ProcessString#1{%
   \let\next\severalparts
   \next#1;\@nil %
}%
\makeatother

\begin{document}
\ProcessString{a,b;c,d;e,f}
\end{document}

这是 pdf 输出:

结果

答案2

如果您愿意稍微改变输入格式,一个更简单的解决方案是使用\foreach

在此处输入图片描述

笔记:

  • 根据您的特定应用程序,这可能对您有用,也可能没用。
  • 中间步骤使用\edef允许将其与字符串或宏定义的字符串一起使用。请参阅TikZ \foreach 循环与宏定义列表更多细节。

代码:

\documentclass[a4paper]{article}
\usepackage{tikz}

\newcommand*{\ProcessString}[1]{%
    \edef\StringToProcess{#1}%
    \foreach \x/\y in \StringToProcess {%
        \x\ nodepart \{\y\} XX
    }%
}%

\newcommand*{\MyStrings}{x/y,w/u,1/2}%

\begin{document}
\ProcessString{a/b,c/d,e/f}

\bigskip
\ProcessString{\MyStrings}

\end{document}

相关内容