2015-05-05 4 views
2

У меня есть проблема с использованием автоматически созданной строки Tex в аргументах, где требуется числовое значение (например, в сравнении ifthenelse). Вот пример минимальный код:Преобразование строки Tex в Tex номер

\newcommand\testC{123} 
\ifthenelse{\testC<0}{negative}{positive} % works fine ! 

\newcommand{\testD}{\luaexec{tex.write("123")}} % write to avoid the print carriage return - produces also 123 as \testC 
\testD % prompt 132 just as \testC "apparently" 
\ifthenelse{\testD<0}{negative}{positive} % error "! Missing number, treated as zero" 

\newcounter{compteur} 
\setcounter{compteur}{\testD} % error "! Missing number, treated as zero" 
\ifthenelse{\thecompteur<0}{negative}{positive} 

Я не могу найти способ преобразования из строки в число принятого к арифметическому сравнению (и другим операциям).

ответ

2

Обратите внимание, что \luaexec (требуется \usepackage{luacode}) не является расширяемым, так что он не может быть использован в местах, где (Луа) ТеХ ожидает <number> после расширения.

\documentclass{article} 
\usepackage{luacode} 
\usepackage{ifthen} 

\begin{document} 

\newcommand\testC{123} 
\ifthenelse{\testC<0}{negative}{positive} % works fine ! 

\newcommand{\testD}{\directlua{tex.sprint("123")}} % write to avoid the print carriage return - p$ 

\testD % prompt 132 just as \testC "apparently" 

\ifthenelse{\testD<0}{negative}{positive} % error "! Missing number, treated as zero" 

\newcounter{compteur} 
\setcounter{compteur}{\testD} % error "! Missing number, treated as zero" 
\ifthenelse{\value{compteur}<0}{negative}{positive} 

\end{document} 

В тестах лучше использовать \value{compteur}.