Зарезервированные имена в «объявлении функции»?

Зарезервированные имена в «объявлении функции»?

Наверное, на этой неделе я наступаю на зарезервированные слова... пожалуйста, посмотрите на это MWE:

\documentclass{article}
\usepackage{tikz}

\newcommand{\formula}[1]{%
    \pgfmathsetmacro{\rpval}{#1}%
    \pgfmathprintnumberto[assume math mode=true, fixed, precision=3]{\rpval}{\frpval}%
    \frpval
}
\begin{document}
\tikzset{declare function={%
        R0 = 2.0;
        X = 0.5*R0;
        ON = 3;
        OFF(\x) = \x + 1;
        AFF(\x) = \x + 1;
}}

%  works
X is \formula{X}

% fails
ON is \formula{ON}

% works
AFF is \formula{AFF(1)}

% fails
OFF is \formula{OFF(1)}
\end{document}

Вторая и четвертая строки терпят неудачу

! Package PGF Math Error: Unknown operator `O' or `ON' (in 'ON').

! Package PGF Math Error: Unknown operator `O' or `OF' (in 'OFF(1)').

...и, похоже, то же самое происходит с каждой константой, начинающейся с , O создавая проблемы.

ядуматьЯ делаю что-то очень глупое...

решение1

Обновлять:Это былозафиксированныйи ваш документ должен работать нормально после следующего TiкВыпуск Z/PGF.


Вы pgfmathparser.code.texвидите:

\pgfmath@tokens@make{functional}{_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ}

без O.

Oпохоже, это не зарезервированное ключевое слово (в конце концов, вы получаете ошибку «Неизвестный оператор»), поэтому я считаю, что это ошибка.

Даем недостающее определение:

\makeatletter
\def\pgfmath@token@functional@O{O}
\makeatother

кажется, это решает проблему.

Мне просто любопытно, что вы первый человек, который пытается использовать Oтам :-)

Связанный контент