TeX 让我很失望。它只有最基本的功能 - 即便如此,我还得搜索如何除以两个数。
问题是:我可以用更方便的语言(如 Ruby 或 Lisp)编写宏吗?
UPD:我会解释一下我的情况。我正在为我的 RPG 模块编写规则手册,我需要构建一个设备表。问题是,我的规则不是最简单的:
我想要好看的字体,所以我用 XeLaTeX。我是俄罗斯人,所以我需要 polyglossia 或 babel。
请注意,每条建议都经过测试XeLaTeX,不是 LaTeX。
答案1
我的PythonTeX包是另一个基于 Python 的选项。PythonTeX 主要是为数学和科学应用而开发的,但它也适用于许多通用工作。我在下面列出了一些使用 PythonTeX 创建宏的基本示例。如果您使用特殊字符,则必须小心 catcode。
\documentclass{article}
\usepackage{pythontex}
\begin{document}
Basic math: \py{5324/251}
Macros that more closely interact with TeX:
\newcommand{\reverse}[1]{\py{"#1"[::-1]}}
\reverse{A sentence!}
\newcommand{\listtotabular}[1]{
\begin{tabular}{|c|c|c|c|}
\hline
\py{'&'.join("#1".split(','))} \\
\hline
\end{tabular}
}
\listtotabular{First, Second, Third, Fourth}
\end{document}
除了上述示例以及文档中包含的示例之外,您还可以查看以下示例。
答案2
- Python:软件包 python,例子
- Perl:PerlTeX,文档
- (LuaTeX:参考,LuaLaTeX 文档)(不适用于 XeTeX)
答案3
虽然我还没有尝试过,但你也许可以使用bashful
通过 stdin 和 stdout 与用其他语言编写的程序交互。
只要我用以下命令进行编译,这个简单示例就不会出现任何问题-shell-escape
:
\documentclass{article}
\usepackage{bashful}
\def\fortune{\splice{fortune}}
\begin{document}
\fortune
\fortune
\end{document}
我不确定polyglossia
文档中提到的问题。
答案4
现在你可以尝试functional
包。它提供了一个 LaTeX2 接口,expl3
您可以进行类似于其他现代编程语言(如)的函数式编程Lua
。复合函数的求值是从内到外的。
functional
下面是一个简单的例子,展示代码与代码之间的相似性lua
:
\documentclass{article}
\usepackage{functional}
\begin{document}
%% Functional code for comparison
\IgnoreSpacesOn
\PrgNewFunction \MathSquare { m } {
\IntSet \lTmpaInt { \IntEval {#1 * #1} }
\Result { \Value \lTmpaInt }
}
\IgnoreSpacesOff
\MathSquare{5}
\MathSquare{\MathSquare{5}}
\end{document}
-- Lua code for comparison --
-- define a function --
function MathSquare (arg)
local lTmpaInt = arg * arg
return lTmpaInt
end
-- use the function --
print(MathSquare(5))
print(MathSquare(MathSquare(5)))
请注意,使用此包,您需要通过\Result
命令传递函数的返回值。