# AUCTeX set LaTeX-default-tabular-environment back to “tabular”

When I use the package tabularx in a tex file, if I insert table environment, the inner environment will be given as tabularx instead of tabular when the package tabularx is not used.

Normally this would not be a problem for me because I do not deliberately use the package tabularx. However, when I use \documentclasss{memoir}, the package tabularx is automatically used.

I found the variable LaTeX-default-tabular-environment and want to reset its value back to tabular (now I'm not sure it's the correct variable for me to reset),

(eval-after-load 'latex
(setq LaTeX-default-tabular-environment "tabular"))


but it does not work, and when I query the value for LaTeX-default-tabular-environment using C-h v, I get the following,

LaTeX-default-tabular-environment is a variable defined in latex.el'. Its value is "tabularx"

Local in buffer test-tabularx.tex; global value is "tabular"

Automatically becomes buffer-local when set.

Now I am utterly confused. I also tried add some style hook, but it seems to me that I need to alter or update some hook instead just adding it. Could someone help me please? Thanks a lot!

After I put the code by Arash Esbati in my .emacs file, I noticed the following: even if I do not mention memoir in the tex file, for example

\documentclass{article}
\usepackage{tabularx}

\begin{document}
(cursor here)
\end{document}


if I then type C-c C-e table RET(a bunch of them), then I would get tabular inside table instead of tabularx inside table. Of course, I later realized that I had another tex file with \documentclass{memoir} loaded in emacs. If I kill that buffer and reboot emacs, everything will be as expected.

LaTeX-default-tabular-environment is the variable you want to reset. The hook you are looking for is TeX-update-style-hook:

Documentation: Hook run as soon as style specific hooks were applied.

You can use something like this in your init file:

(eval-after-load "memoir"
(lambda () (setq LaTeX-default-tabular-environment "tabular"))))


AUCTeX style files try to follow the same logic as LaTeX packages regarding loading other packages. AUCTeX has a function TeX-run-style-hooks which is comparable to LaTeX's \RequirePackage macro. I presume that you have this in your .emacs:

(setq TeX-parse-self t)


Now when you load a .tex file like this:

\documentclass{memoir}
\begin{document}
(cursor here)
\end{document}


AUCTeX loads the file memoir.el which contains the following line:

(TeX-run-style-hooks "tabularx")


and next it loads the file tabularx.el containing:

(setq LaTeX-default-tabular-environment "tabularx")


When you have a .tex file like this:

\documentclass{article}
\usepackage{tabularx}
\begin{document}
(cursor here)
\end{document}


AUCTeX loads the file tabularx.el directly.

In general, all these changes should be local to the buffer you're working in, other .tex buffers should not be affected.

• This is great! Just curious, why is this still taking effect even if I do not use the \documentclass{memoir}? For example, I just use \documentclass{memoir} and \usepackage{tabularx} in the preamble. – davyjones Nov 16 '17 at 6:46
• @davyjones - You're welcome. I don't understand your comment, though. How does your document look like? Maybe you can add a minimal .tex example to your question showing the effect you're describing. – Arash Esbati Nov 16 '17 at 8:55
• I added something explanation up in the post. The thing I mentioned above is because I loaded another file of memoir class. But this is still weird, normally emacs+auctex would not recognize packages loaded by another file in another buffer, right? – davyjones Nov 16 '17 at 9:53
• I might have an answer to my curiosity. I just found that he function add-hook admits a fourth argument, which we can set to t`. That solves the problem as far as i can test. Many thanks! – davyjones Nov 16 '17 at 14:46
• @davyjones - See my updated answer. – Arash Esbati Nov 18 '17 at 14:28