Subject: bug#76615: 14.0.9; error with amsmath style hooks

From: "Paul D. Nelson" <[email-masked]>
Date: Thu, 27 Feb 2025 19:28:51 +0100

Hi all,

Evaluating the following after Emacs -Q

(progn
  (package-initialize)
  (package-activate 'auctex)
  (add-hook 'LaTeX-mode-hook #'turn-on-reftex)
  (with-temp-buffer
    (LaTeX-mode)
    (TeX-run-style-hooks "amsmath")))

gives the backtrace:

Debugger entered--Lisp error: (wrong-type-argument stringp nil)
  expand-file-name(nil)
  reftex-TeX-master-file()
  reftex-tie-multifile-symbols()
  reftex-add-to-label-alist((AMSTeX))
  #f(compiled-function () #<bytecode 0x1528d667892913ee>)()
  #<subr F616e6f6e796d6f75732d6c616d626461_anonymous_lambda_105>([TeX-style-hook #f(compiled-function () #<bytecode 0x1528d667892913ee>) 1])
  mapcar(#<subr F616e6f6e796d6f75732d6c616d626461_anonymous_lambda_105> ([TeX-style-hook #f(compiled-function () #<bytecode 0x1528d667892913ee>) 1]))
  #<subr F616e6f6e796d6f75732d6c616d626461_anonymous_lambda_106>("amsmath")
  TeX-run-style-hooks("amsmath")
  (progn (LaTeX-mode) (TeX-run-style-hooks "amsmath"))
  (unwind-protect (progn (LaTeX-mode) (TeX-run-style-hooks "amsmath")) (and (buffer-name temp-buffer) (kill-buffer temp-buffer)))
  (save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn (LaTeX-mode) (TeX-run-style-hooks "amsmath")) (and (buffer-name temp-buffer) (kill-buffer temp-buffer))))
  (let ((temp-buffer (generate-new-buffer " *temp*" t))) (save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn (LaTeX-mode) (TeX-run-style-hooks "amsmath")) (and (buffer-name temp-buffer) (kill-buffer temp-buffer)))))
  (progn (package-initialize) (package-activate 'auctex) (add-hook 'LaTeX-mode-hook #'turn-on-reftex) (let ((temp-buffer (generate-new-buffer " *temp*" t))) (save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn (LaTeX-mode) (TeX-run-style-hooks "amsmath")) (and (buffer-name temp-buffer) (kill-buffer temp-buffer))))))
  eval((progn (package-initialize) (package-activate 'auctex) (add-hook 'LaTeX-mode-hook #'turn-on-reftex) (let ((temp-buffer (generate-new-buffer " *temp*" t))) (save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn (LaTeX-mode) (TeX-run-style-hooks "amsmath")) (and (buffer-name temp-buffer) (kill-buffer temp-buffer)))))) nil)
  elisp--eval-last-sexp(nil)
  #f(compiled-function () #<bytecode 0x1866e7a2d80a>)()
  eval-last-sexp(nil)
  funcall-interactively(eval-last-sexp nil)
  command-execute(eval-last-sexp)

I tried this on both the latest AUCTeX release and some earlier 14.0.4
that was lying around.

The issue arose when using log-edit-generate-changelog-from-diff for a
commit involving tex files.  I distilled it down to the above example.

It's clear what's happening -- reftex expects a master file, but it's a
non-file buffer.  I don't know enough about style hooks to diagnose why
reftex is being called in this manner in this situation.

Any suggestions would be welcome.

Thanks, best,

Paul

Emacs  : GNU Emacs 31.0.50 (build 2, aarch64-apple-darwin24.1.0, NS appkit-2575.20 Version 15.1.1 (Build 24B91))
 of 2025-02-27
Package: 14.0.9

current state:
==============
(setq
 window-system 'ns
 LaTeX-version "2e"
 TeX-style-path '("~/.emacs.d/auctex/" "/Users/au710211/.emacs.d/elpa/auctex-14.0.9/style"
		  "/Users/au710211/.emacs.d/auctex/auto" "/Users/au710211/.emacs.d/auctex/style" "auto" "style")
 TeX-auto-save nil
 TeX-parse-self nil
 TeX-master t
 TeX-command-list '(("TeX" "%(PDF)%(tex) %(file-line-error) %`%(extraopts) %S%(PDFout)%(mode)%' %(output-dir) %t"
		     TeX-run-TeX nil (plain-TeX-mode AmSTeX-mode Texinfo-mode) :help "Run plain TeX")
		    ("LaTeX" "%`%l%(mode)%' %T" TeX-run-TeX nil (LaTeX-mode docTeX-mode) :help "Run LaTeX")
		    ("Makeinfo" "makeinfo %(extraopts) %(o-dir) %t" TeX-run-compile nil (Texinfo-mode) :help
		     "Run Makeinfo with Info output")
		    ("Makeinfo HTML" "makeinfo %(extraopts) %(o-dir) --html %t" TeX-run-compile nil (Texinfo-mode)
		     :help "Run Makeinfo with HTML output")
		    ("AmSTeX" "amstex %(PDFout) %`%(extraopts) %S%(mode)%' %(output-dir) %t" TeX-run-TeX nil
		     (AmSTeX-mode) :help "Run AMSTeX")
		    ("ConTeXt" "%(cntxcom) --once %(extraopts) %(execopts)%t" TeX-run-TeX nil (ConTeXt-mode) :help
		     "Run ConTeXt once")
		    ("ConTeXt Full" "%(cntxcom) %(extraopts) %(execopts)%t" TeX-run-TeX nil (ConTeXt-mode) :help
		     "Run ConTeXt until completion")
		    ("BibTeX" "bibtex %(O?aux)" TeX-run-BibTeX nil
		     (plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode Texinfo-mode ConTeXt-mode) :help
		     "Run BibTeX")
		    ("Biber" "biber %(output-dir) %s" TeX-run-Biber nil
		     (plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode Texinfo-mode) :help "Run Biber")
		    ("Texindex" "texindex %s.??" TeX-run-command nil (Texinfo-mode) :help "Run Texindex")
		    ("Texi2dvi" "%(PDF)texi2dvi %t" TeX-run-command nil (Texinfo-mode) :help
		     "Run Texi2dvi or Texi2pdf")
		    ("View" "%V" TeX-run-discard-or-function t t :help "Run Viewer")
		    ("Print" "%p" TeX-run-command t t :help "Print the file")
		    ("Queue" "%q" TeX-run-background nil t :help "View the printer queue" :visible
		     TeX-queue-command)
		    ("File" "%(o?)dvips %d -o %f " TeX-run-dvips t
		     (plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode Texinfo-mode) :help
		     "Generate PostScript file")
		    ("Dvips" "%(o?)dvips %d -o %f " TeX-run-dvips nil
		     (plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode Texinfo-mode) :help
		     "Convert DVI file to PostScript")
		    ("Dvipdfmx" "dvipdfmx -o %(O?pdf) %d" TeX-run-dvipdfmx nil
		     (plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode Texinfo-mode) :help
		     "Convert DVI file to PDF with dvipdfmx")
		    ("Ps2pdf" "ps2pdf %f %(O?pdf)" TeX-run-ps2pdf nil
		     (plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode Texinfo-mode) :help
		     "Convert PostScript file to PDF")
		    ("LaTeXMk"
		     "latexmk %(latexmk-out) %(file-line-error) %(output-dir) %`%(extraopts) %S%(mode)%' %t"
		     TeX-run-TeX nil (LaTeX-mode docTeX-mode) :help "Run LaTeXMk")
		    ("Glossaries" "makeglossaries %(d-dir) %s" TeX-run-command nil
		     (plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode Texinfo-mode) :help
		     "Run makeglossaries to create glossary file")
		    ("Index" "makeindex %(O?idx)" TeX-run-index nil
		     (plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode Texinfo-mode) :help
		     "Run makeindex to create index file")
		    ("upMendex" "upmendex %(O?idx)" TeX-run-index t
		     (plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode Texinfo-mode) :help
		     "Run upmendex to create index file")
		    ("Xindy" "texindy %s" TeX-run-command nil
		     (plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode Texinfo-mode) :help
		     "Run xindy to create index file")
		    ("Check" "lacheck %s" TeX-run-compile nil (LaTeX-mode) :help "Check LaTeX file for correctness")
		    ("ChkTeX" "chktex -v6 %s" TeX-run-compile nil (LaTeX-mode) :help
		     "Check LaTeX file for common mistakes")
		    ("Spell" "(TeX-ispell-document \"\")" TeX-run-function nil t :help "Spell-check the document")
		    ("Clean" "TeX-clean" TeX-run-function nil t :help "Delete generated intermediate files")
		    ("Clean All" "(TeX-clean t)" TeX-run-function nil t :help
		     "Delete generated intermediate and output files")
		    ("Other" "" TeX-run-command t t :help "Run an arbitrary command"))
 )