GNU bug report logs -
#34712
Fontification of simple macros
Previous Next
Reported by: Arash Esbati <arash <at> gnu.org>
Date: Sat, 2 Mar 2019 21:01:01 UTC
Severity: normal
Done: Arash Esbati <arash <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
Hi all,
while looking at this message[1], it seems that there is a bug in
font-latex.el. This code
\documentclass{beamer}
\begin{document}
\begin{frame}
\frametitle<presentation>{MySlide}
| |
font-latex-sedate-face
\end{frame}
\foo<bar>-19+*
\end{document}
looks like this for me:
[x.png (image/png, inline)]
[Message part 3 (text/plain, inline)]
Have a look at <...> and \foo<bar>-19+*. I think the issue is that the
regexp in `font-latex-match-simple-command' is too greedy. A possible
fix is attached below: We introduce a new variable
`font-latex-match-simple-include-list' for styles to add their special
characters for fontification to `font-latex-match-simple-command' which
is modified as shown below:
\documentclass{beamer}
\begin{document}
\begin{frame}
\frametitle<presentation>{MySlide}
| |
font-latex-sedate-face
\end{frame}
\foo<bar>-19+*
\begin{verbatim}
(defvar font-latex-match-simple-include-list nil
"List of characters allowed in a macro for fontification.
Each character is a string.")
(make-variable-buffer-local 'font-latex-match-simple-include-list)
(defun font-latex-match-simple-command (limit)
"Search for command like \\foo before LIMIT."
;; \s_ matches chars with symbol syntax, \sw chars with word syntax,
;; \s. chars with punctuation syntax. We must exclude matches where
;; the first character after the \ is a reserved character and
;; should not be fontified (e.g. \, in foo\,bar or \- in foo\-bar).
;; These characters are stored in
;; `font-latex-match-simple-exclude-list'. In docTeX mode, we
;; remove "_" from this list to get correct fontification for macros
;; like `\__module_foo:nnn'
(let* ((search (lambda ()
(TeX-re-search-forward-unescaped
(concat
;; Chars directly after backslash
"\\\\\\(\\s_\\|\\sw\\|\\s.\\)"
;; Start group of the following chars
"\\(?:["
;; a-zA-Z are always allowed:
"a-zA-Z"
;; Allow `@' used often to redefine internals
"@"
;; Check for additional characters added by AUCTeX styles
(when font-latex-match-simple-include-list
(mapconcat #'identity
font-latex-match-simple-include-list
""))
;; End group
"]\\)*")
limit t)))
(pos (funcall search)))
(while (and pos
(member (match-string 1)
(if (eq major-mode 'doctex-mode)
(remove "_" font-latex-match-simple-exclude-list)
font-latex-match-simple-exclude-list)))
(setq pos (funcall search)))
pos))
(font-latex-update-font-lock)
\end{verbatim}
\end{document}
E.g., `expl3.el' must do:
(setq font-latex-match-simple-include-list '("_" ":"))
Any comments welcome.
Best, Arash
Footnotes:
[1] http://lists.gnu.org/archive/html/auctex/2019-02/msg00005.html
This bug report was last modified 6 years and 76 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.