![Как создать новый оператор конвертации?](https://rvso.com/image/266040/%D0%9A%D0%B0%D0%BA%20%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D1%82%D1%8C%20%D0%BD%D0%BE%D0%B2%D1%8B%D0%B9%20%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%20%D0%BA%D0%BE%D0%BD%D0%B2%D0%B5%D1%80%D1%82%D0%B0%D1%86%D0%B8%D0%B8%3F.png)
Следующий тривиальный пример иллюстрирует мою цель — создать оператор преобразования ptcm
( pt
в cm
). К сожалению, он приводит к ошибкам в мире TeX, в отличие от мира PS.
\documentclass{beamer}
\usepackage{pstricks}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{pspicture}
\PreviewBorder=12pt
\SpecialCoor
\begin{document}
\begin{frame}
\begin{pspicture}[showgrid=top](4,4)
\makeatletter
\pstVerb{/ptcm {\pst@number\psunit\space div} bind def}
\makeatother
\psline(!4 12 ptcm sub 0)
\end{pspicture}
\end{frame}
\end{document}
Сообщения об ошибках следующие:
! Undefined control sequence.
<argument> /ptcm {\pst
@number\psunit \space div} bind def
l.17 \end{frame}
?
! Emergency stop.
<argument> /ptcm {\pst
@number\psunit \space div} bind def
l.17 \end{frame}
Как создать новый оператор конвертации?
решение1
<argument> /ptcm {\pst
@number\psunit \space div} bind def
показывает, что \pst@number
было проанализировано как, \pst @number
поскольку @
не является буквой.
Beamer считывает тело кадра как аргумент макроса, поэтому его нужно поместить \makeatletter
перед кадром.