16

A colleague using a class I wrote reports that AUCTeX is inserting guillemets when he hits the double-quote key. Investigation showed that TeX-language-fr-hook is being called even though the document itself is not in French.

If I understand a comment from @egreg in response to my colleague's question (Double-quote produces guillemets in emacs) the reason AUCTeX thinks the comment is in French might be something like \usepackage[french]{babel}.

In fact there is this code in the class: \iffrench \RequirePackage[english,francais]{babel}\fi This conditional branch is only triggered if the french option to our class is chosen by the user. It seems that AUCTeX is taking that line to mean that the document is in French, regardless. How can I arrange it so the \usepackage is hidden from AUCTeX or only has an effect when it's intended to?

For full context see Double-quote produces guillemets in emacs

Edit: Below are a few lines from the *Messages* buffer in emacs that may be useful in tracing the problem:

Loading /var/lib/auctex/emacs24/msp.elc...done
Loading /usr/share/emacs/site-lisp/auctex/style/babel.el (source)...done
Loading /var/lib/auctex/emacs24/francais.elc...done
Loading /usr/share/emacs/site-lisp/auctex/style/francais.el (source)...done
Loading /usr/share/emacs/site-lisp/auctex/style/frenchb.el (source)...done
Loading /var/lib/auctex/emacs24/english.elc...done
21
  • 1
    AUCTeX doesn't know much about TeX conditionals. Could you please post a MWE anyway?
    – giordano
    Jul 18, 2014 at 20:09
  • 1
    Can you write an e-lisp hack that turns off the hook for just this document? Jul 18, 2014 at 20:11
  • Wow, welcome to TeX.sx, sir! We are not worthy, we are not worthy. Jul 18, 2014 at 20:16
  • 3
    I would guess you can hide the \usepackage in a class it would be better to use \RequirePackage anyway (it's the same thing but auctex may not know that:-) or \@nameuse{RequirePackage}[french]{babel} or... Jul 18, 2014 at 20:23
  • 2
    My guess: your colleague has an auto-generated style file for that class, you don't, this is why s/he always load style/french.el. Removing "french" from run hooks in her/his auto-generated style file should suffice.
    – giordano
    Jul 18, 2014 at 20:58

2 Answers 2

4

From the *Messages* log I deduce the "offending" class is msp.cls. Unfortunately I can't find it on the Internet to test it, but anyway in the /var/lib/auctex/emacs24/msp.elc file there should be a "french" string somewhere. Just remove it (you'll need to edit it with root privileges, from within Emacs issue C-x C-f /sudo::/var/lib/auctex/emacs24/msp.elc RET to open it) and you should be done.

4
  • Giordano, thanks. I've not placed msp.cls on the internet because it's not meant for general use. You gave a good solution for the user of the class. However the writer of the class (me) would love for other users to be spared the same confusion. Maybe David Carlisle's suggestion of replacing \RequirePackage by \@nameuse works, and I would like to test it; but I don't know under what circumstances msp.elc is generated. (MTS is reporting it was not regenerated after he deleted it.) Jul 20, 2014 at 15:54
  • 2
    @SilvioLevy It can be re-generated by issuing M-x TeX-auto-generate RET' on the msp.cls` buffer or, to re-generate all style files (it will take a while), sudo emacs -batch -f TeX-auto-generate-global in the command line.
    – giordano
    Jul 20, 2014 at 16:30
  • Bingo. Either \@nameuse or \csname prevent francais from being added to msp.el -- so I'll incorporate that change to the class. Jul 20, 2014 at 16:40
  • Yes, AUCTeX parser doesn't know that syntax.
    – giordano
    Jul 20, 2014 at 16:43
3

Thanks to Giordano and David Carlisle who provided the key information, here is a complete answer. In the package file, replace \RequirePackage[english,francais]{babel} by \@nameuse{RequirePackage}[english,francais]{babel}. Now when your user's auctex compiles the file (which you can also do within emacs, for testing, with M-x TeX-auto-generate), the string francais will no longer appear in the output (which is typically placed in ~/.emacs.d/auctex/auto/msp.el), and all will be well.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .