【发布时间】:2010-10-25 16:27:16
【问题描述】:
我正在尝试在 LaTeX 中编写一个命令,该命令采用诸如 8:00A 之类的字符串并将其转换为分钟数,作为使用 TikZ 绘制课程表的脚本的一部分。但是,我遇到了一些问题 - LaTeX 似乎实际上并没有评估命令的内容。
我的命令目前是:
\newcommand{\timetominutes}[1]{
\IfSubStr{#1}{P}{720}{0}+\IfSubStr{#1}{P}{\StrBetween{#1}{:}{P}}{\StrBetween{#1}{:}{A}}+60*\StrBefore{#1}{:}
}
如果您从中打印出文本,它将正确计算从午夜开始的分钟数。但是,如果在另一个函数中使用,很明显它实际上不会运行任何这些命令——它只是返回包含这些命令的文本。所以如果我写:
\myfunc{\timetominutes{8:00A}}
它看到的是\IfSubStr{8:00A}{P}{720}{0}+\IfSubStr{8:00A}{P}{\StrBetween{8:00A}{:}{P}}{\StrBetween{8:00A}{:}{A}}+60*\StrBefore{8:00A}{:},而不是\myfunc 看到像0+00+60*8 这样有用的东西。这对我来说绝对没用,我无法找到一种方法来强制 LaTeX 在主要命令之前执行子命令。我认为有办法做到这一点,但 LaTeX 文档很少,我似乎找不到任何东西。
或者,如果有办法让 LaTeX 停止抱怨太多 }s(当我有正确的数字时),那可能会奏效。
【问题讨论】:
-
你到底为什么要在 LaTeX 中做这个?您可以用其他语言编写脚本来读取字符串,处理,然后输出到 TikZ。
-
听起来像是 luatex 的工作。很抱歉,我无法在 Lua 中提供解决方案。我相信其他人可以。
-
我受到 TikZ 语法可扩展性的启发,并认为我可以创建类似可扩展的东西。事实证明,我错了。
-
@Mica,我仍然对 luatex 感到困惑,我一直在寻找它以在 TeX 中编程,但我认为它仍然比典型的用户交互更深入。在我弄清楚之前,我将继续使用 PerlTeX(请参阅下面的答案),但能够摆脱包装编译器会很好。
标签: latex