Some HAT...

= Анабар.ru => TeX-форумы => Система TeX => сообщение 93
| Вход | Регистрация
нет
фото
Автор:  Женя
Дата:  18-Dec-2003 19:04 (gmt = -3.0)
E-mail:  emin@mccme.ru

Прочные команды, как это сделано. reposting

В предыдущем моëм сообщении робот убил все слеши, это сделало код TeX'а поистине интригующим. Данный вариант является репостингом с расставленными бэкслешами. Заодно исправляю ошибки-описки. Сравнительно недавно узнал механизм работы прочной команды в LaTeX: Команда \DeclareRobustCommand{\name}[n]{implemantation} Объявляет команду \name_ (где подчерк это пробел) которая и выполняет код, impementation. А команда \name ссылается на \name_. Делается это через механизм TeX'а \csname\endcsname. Примерно так:

1  \expandafter\def\csname name \endcsname{implementation}
2  \def\name{\csname name \endcsname}
Таким образом, когда команда записывается во внешний файл и раскрывается она записывает \name_ и при следующем прочтении TeX видит \name (пробелы ведь игнорируются!) — команда получается прочная. Самый цирк начинается, когда вы пробуете спросить у LaTeX что нибудь командой \show:

\show\name покажет вам

1  > \name=macro:
2  ->\protect \name .
3  l.6 \show\name
И это правильно, но вы пробела на экране не увидите и будете несказанно обрадованы мнимым «зацикливанием» системы. Правильный поступок в этом случае выглядит так:

\expandafter\show\csname name \endcsname

Соответственно вывод:

1  > \name =\long macro:
2  ->implementation.
3  <recently read> \name
4  l.6 ...ndafter\show\csname name \endcsname

Женя


все сообщения ветви:
  • 93 Прочные команды, как это сделано. reposting  Женя  | 18-Dec-2003, 19:04 | просмотров: 6396    ⇐ ◄

О том как (правильно) написать сообщение...

Написать ответ

* Ник    
E-mail   Получать ответы  
Ссылка (URL)   мин. уровень чтения  
Картинка (URL)   мин. уровень ответа  
* Тема ответа  
Текст сообщения (можно не заполнять)

Время генерации страницы в секундах: 0.076