Автоматически экранирование слешей в m4 для команд оболочки - PullRequest
5 голосов
/ 01 января 2012

Я пишу макросы с помощью m4, чтобы легко встраивать математику в код HTML. Необходимо избегать косых черт, и я хочу автоматизировать этот процесс, но я еще не нашел хорошего способа.

Запуск m4 на следующем показывает проблему:

define(`_imath', `esyscmd(`echo "$ $1 $"')')dnl
_imath(y = \frac{1}{2} x^{2.3} + 2)

Мой вывод в следующем:

$ y = 
      rac{1}{2} x^{2.3} + 2 $

Если я заменим \frac на \\\frac, то получу желаемый результат. Я мог бы делать это каждый раз, но я хочу автоматизировать этот процесс, если смогу. Желаемый результат, кстати, составляет

$ y = \frac{1}{2} x^{2.3} + 2 $

, которая передается другой команде, которая создаст HTML-код или изображение (за пределами этого минимального примера).

Я знаю один неудовлетворительный способ обойти эту проблему. Я мог бы использовать другой символ (или комбинацию символов) для TeX \ и определить другой макрос для его автоматической замены. Это неудовлетворительно, потому что я хочу использовать прямой код LaTeX без изменений, и это не намного проще, чем использование трех слешей.

Как я могу изменить свой макрос для автоматического выхода из косой черты, чтобы я мог использовать прямой код LaTeX?

1 Ответ

4 голосов
/ 02 января 2012

Мне потребовалось достаточно много времени, чтобы понять это, но это работает:

define(`_imath', `esyscmd(echo "$ patsubst(`$1',`\\',`\\\\\\') $")')dnl
_imath(y = \frac{1}{2} x^{2.3} + 2)
...