LINUX.ORG.RU

noweb, $ в чанках


0

1

Кто-нибудь пользуется? В чем редактируете noweb файл?

Я пишу в noweb-mode в emacs'e, установив в качестве noweb-code-mode тот же latex-mode.

В чем беда: в чанках иногда встречаются знаки, вроде $, которые очень портят подсветку latex'а. (попробуйте в своем редакторе поставить одиночный знак $, или открыть тег verbatim). Экранировать их никак, потому что \$ переползет в виде \$ в документацию и код.

С этим можно что-нибудь сделать? Например, заставить noweave и notangle заменят в чанках с кодом экранированные символы на обычные?

Я пишу в noweb-mode в emacs'e, установив в качестве noweb-code-mode тот же latex-mode.

А почему в noweb-code-mode, а не в noweb-doc-mode?

;; noweb-doc-mode has been given its own syntax-table. It is the same
;; as the current doc-mode syntax-table, except that [[ is a comment
;; start and ]] a comment end. Fixes some ugliness in LaTeX-mode if
;; `$' or `%' appear in quoted code (or even `<<', which happens often
;; in C++).
;; (This should make noweb-hide-code-quotes and
;; noweb-restore-code-quotes unnecessary, but I have not yet removed
;; them, nor the calls to them).
Zubok ★★★★★
()
Ответ на: комментарий от Zubok

> А почему в noweb-code-mode, а не в noweb-doc-mode?
Я думал, это подразумевается =)
А разве для doc-mode ставят что-то, кроме latex-mode?

Мммм... В репах Дебиана и в портаже другой noweb-mode.el. Странно. Он не трогает syntax-table. Завтра попробую тот, из которого отрывок.

kermzyxer
() автор топика
Ответ на: комментарий от Zubok

решает проблему на столько, на сколько в Емакс вообще нормально подствечивает синтаксис:

(modify-syntax-entry ?% "@" tex-mode-syntax-table)
(modify-syntax-entry ?\n ". 13" tex-mode-syntax-table)
(modify-syntax-entry ?@ ". 24" tex-mode-syntax-table)
т.е. делаем такие коменты:
@
...
@

К сожалению, пришлось отключить подсветку обычных комментов, т.к. символ `\n' занят: в Emacs'е syntax table заточен под сишные коменты(//, /* */) (я так и не понял, почему в Емаксе так дибильно устроены синтаксические таблицы)

kermzyxer
() автор топика
Ответ на: комментарий от kermzyxer

>К сожалению, пришлось отключить подсветку обычных комментов, т.к. символ `\n' занят:

Речь идет о выключении комментариев «%» в TeX? М-м-м, сейчас не могу разбираться, но Emacs может поддерживать два типа комментариев одновременно. Глянь на раздел 35.2.2 Syntax Flags, на флаг «b». Ведь в C++ два типа комментариев одновременно: и сишные, и C++. Может, там найдешь решение?

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

В сишных комментариях символ `\n' есть только в однострочных(окончание), у меня - в обоих. А символ может иметь только один класс. Либо ".", либо «>».
Если символу % прописать флаг b, то можно будет ставить такие комментарии:
кодкодкод % комментарий %

kermzyxer
() автор топика
Ответ на: комментарий от Zubok

Пытаюсь теперь то же самое сделать в auctex. Не хочет работать:

(setq LaTeX-mode-hook
      (lambda ()
	(modify-syntax-entry ?% "@" LaTeX-mode-syntax-table)
	(modify-syntax-entry ?\n ". 13" LaTeX-mode-syntax-table)
	(modify-syntax-entry ?@ ". 24" LaTeX-mode-syntax-table)))
первая строчка срабатывает, остальные - нет.

kermzyxer
() автор топика
Ответ на: комментарий от kermzyxer

>(я так и не понял, почему в Емаксе так дибильно устроены синтаксические таблицы)

Они не дебильно устроены, а очень просто устроены. Таким образом, что покрывают большую массу случаев (твой случай не совсем обычный). Есть, кстати, еще syntax properties (пункт 35.4) на тот случай, если обычных syntax tables уже не хватает. Но я тут ничем не помогу. Ни разу не пользовался, не знаю, что с ними можно наворотить. Там можно подменять синтаксический класс.

Zubok ★★★★★
()
Ответ на: комментарий от kermzyxer

>первая строчка срабатывает, остальные - нет.

Может, после хука кто-то их переопределяет? Вообще-то syntax-table должен формироваться до вызова хука режима, но кто знает.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

> Может, после хука кто-то их переопределяет?
C-h s показывает, что все схватывается. Только отрисовывает не так, как надо.

kermzyxer
() автор топика
Ответ на: комментарий от kermzyxer

C-h s показывает, что все схватывается. Только отрисовывает не так, как надо.

А, может, так (чуть поменял):

(modify-syntax-entry ?% "@" LaTeX-mode-syntax-table)
(modify-syntax-entry ?\n ". 23" LaTeX-mode-syntax-table)
(modify-syntax-entry ?@ ". 14" LaTeX-mode-syntax-table)
Zubok ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.