背景:我一直在阅读 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 键中。在您停止阅读之前,我最好问一下我的问题:
- 是否有 (LaTeX/TeX/ 和 TikZ/PGF) 代码示例,可以读取一些输入可变长度可能超过十个并且吐出一些其他代码?
- 考虑到上述示例,我应该阅读哪些参考资料才能有效地实施该例程?
后记:
- 阅读建议的标签,我刚刚了解 LaTeX 解析包,也会检查它。
- @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}