# Can I use an easy programming language with XeTeX?

TeX is frustrating me. It has only the basics - and even then, I have to search how to divide two numbers.

The question is this: can I write my macros in more convenient language like Ruby or Lisp?

UPD: I will explain my situation. I'm writing a rulebook for my RPG module, and I need to construct an equipment table. Problem is, my rules are not the simplest ones:

http://pastebin.com/Z4Q9TQa5

I want nice fonts, so I use XeLaTeX. I am Russian, so I need polyglossia or babel.

Please note that every suggestion is tested against XeLaTeX, not LaTeX.

-
Broad answer 'no', but look at LaTeX3's expl3 language as a richer set of tools built on top of TeX. –  Joseph Wright Oct 16 '12 at 11:22
Or switch to LuaTeX and use lua. –  Loop Space Oct 16 '12 at 11:25
May you show an example of a situation in which such programming features are needed? –  egreg Oct 16 '12 at 11:43

My PythonTeX package is another Python-based option. PythonTeX was primarily developed for mathematical and scientific applications, but it's also suitable for much general-purpose work. I've included a few basic examples of creating macros with PythonTeX below. You do have to be careful about catcodes if you are working with special characters.

\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}


In addition to the examples above, and the examples included with the documentation, you might also look at the following examples.

-
It's very buggy. Did you know that 'newfloat' package is actially distributed as 'caption'? I couldn't run the example, some obscure pgf error (pgfopts is installed) about /PYTX. –  Alexander Yakovlev Oct 17 '12 at 2:35
I'd overlooked that you need XeLaTeX. The example above works with XeLaTeX (at least with Windows with a fresh TeX Live 2012 installation). But the example file from GitHub won't work, unless you remove the inputenc and fontenc packages, load fontspec and use \defaultfontfeatures{Ligatures=TeX}, and run xelatex with the -8bit option. The -8bit option is needed for handling tabs; see this. –  G. Poore Oct 17 '12 at 5:06
Thanks; it gave me a mountain of errors, but worked. Seems like it needs strict TL2012. –  Alexander Yakovlev Oct 17 '12 at 7:45
-
PerlTeX is not working with XeTeX, and LuaLaTeX has known issues with non-Latin languages. I couldn't start python package, it gives a "can't find file test.py.out'." error, but I'll keep digging that way. –  Alexander Yakovlev Oct 17 '12 at 2:09

While I haven't tried, you might be able to use bashful to interact with programs written in other languages via stdin and stdout.

I had no problems with a simple example as long as I compiled with -shell-escape:

\documentclass{article}
\usepackage{bashful}
\def\fortune{\splice{fortune}}
\begin{document}
\fortune

\fortune
\end{document}


I am not sure about the polyglossia` issue that is mentioned in the documentation.

-
Seems like it hacks Polyglossia, causing it to use latin monospaced font. Also gives me an error because "File test.stdout was empty" –  Alexander Yakovlev Oct 17 '12 at 2:19
@AlexanderYakovlev I could get a simple example running no problem –  StrongBad Oct 17 '12 at 13:40