Package: auctex;
Reported by: Tim Ruffing <dev <at> real-or-random.org>
Date: Thu, 19 Jun 2025 19:29:04 UTC
Severity: normal
Message #26 received at 78841 <at> debbugs.gnu.org (full text, mbox):
From: Arash Esbati <arash <at> gnu.org> To: Tim Ruffing <dev <at> real-or-random.org> Cc: 78841 <at> debbugs.gnu.org Subject: Re: bug#78841: reftex-get-bibfile-list fails to detect biblatex if there's no buffer for the main file Date: Tue, 24 Jun 2025 10:14:53 +0200
Tim Ruffing <dev <at> real-or-random.org> writes: > Hi again, thanks for taking the time and sorry that my instructions > were still unclear. Thanks for checking, and no problem 👍 > I can't reproduce the bug with your commands only, Good. > but I can reproduce it if I add this line (setq > latexenc-dont-use-TeX-master-flag nil) as mentioned in my previous > email. Ok. But this is not a real requirement, right? This is just to showcase the issue. Your setup involves setting `TeX-master' to a constant string, right? If so, can you please delete this line: %%% TeX-master: "biblatex-main" in biblatex-sub.tex and save it, start a new Emacs with 'emacs -Q', eval this in scratch: --8<---------------cut here---------------start------------->8--- (progn (load "~/.config/emacs/.local/straight/build-30.1/auctex/auctex-autoloads.el" nil t t) (setq-default TeX-master "biblatex-main") (setq TeX-parse-self t) (add-hook 'LaTeX-mode-hook #'reftex-mode) (setq reftex-plug-into-AUCTeX t) (defun latexenc-find-file-coding-system (arg-list) "Determine the coding system of a LaTeX file if it uses \"inputenc.sty\". The mapping from LaTeX's \"inputenc.sty\" encoding names to Emacs coding system names is determined from `latex-inputenc-coding-alist'." (if (eq (car arg-list) 'insert-file-contents) (save-excursion ;; try to find the coding system in this file (goto-char (point-min)) (if (catch 'cs (let ((case-fold-search nil)) (while (search-forward "inputenc" nil t) (goto-char (match-beginning 0)) (beginning-of-line) (if (or (looking-at "[^%\n]*\\\\usepackage\\[\\([^]]*\\)\\]{\\([^}]*,\\)?inputenc\\(,[^}]*\\)?}") (looking-at "[^%\n]*\\\\inputencoding{\\([^}]*\\)}")) (throw 'cs t) (goto-char (match-end 0)))))) (let* ((match (match-string 1)) (sym (or (latexenc-inputenc-to-coding-system match) (intern match)))) (cond ((coding-system-p sym) sym) ((and (require 'code-pages nil t) (coding-system-p sym)) sym) (t 'undecided))) ;; else try to find it in the master/main file ;; Fixme: If the current file is in an archive (e.g. tar, ;; zip), we should find the master file in that archive. ;; But, that is not yet implemented. -- K.Handa (let ((default-directory (if (stringp (nth 1 arg-list)) (file-name-directory (nth 1 arg-list)) default-directory)) latexenc-main-file) ;; Is there a TeX-master or tex-main-file in the local variables ;; section? (unless latexenc-dont-use-TeX-master-flag (goto-char (point-max)) (search-backward "\n\^L" (max (- (point-max) 3000) (point-min)) 'move) (search-forward "Local Variables:" nil t) (when (or (re-search-forward "^%+ *\\(TeX-master\\|tex-main-file\\): *\"\\(.+\\)\"" nil t) ;; Addition start (and (boundp 'TeX-master) (stringp (default-value 'TeX-master))) ;; Addition end ) (let ((file ;; Addition start (or (match-string 2) (and (boundp 'TeX-master) (default-value 'TeX-master)) ;; Addition end ))) (dolist (ext `("" ,(if (boundp 'TeX-default-extension) (concat "." TeX-default-extension) "") ".tex" ".ltx" ".dtx" ".drv")) (if (and (null latexenc-main-file) ;Stop at first. (file-exists-p (concat file ext))) (setq latexenc-main-file (concat file ext))))))) ;; try tex-modes tex-guess-main-file (when (and (not latexenc-dont-use-tex-guess-main-file-flag) (not latexenc-main-file)) ;; Use a separate `when' so the byte-compiler sees the fboundp. (when (fboundp 'tex-guess-main-file) (let ((tex-start-of-header "\\\\document\\(style\\|class\\)")) (setq latexenc-main-file (tex-guess-main-file))))) ;; if we found a master/main file get the coding system from it (if (and latexenc-main-file (file-regular-p latexenc-main-file) (file-readable-p latexenc-main-file)) (let* ((latexenc-dont-use-tex-guess-main-file-flag t) (latexenc-dont-use-TeX-master-flag t) (latexenc-main-buffer (find-file-noselect latexenc-main-file t))) (coding-system-base ;Disregard the EOL part of the CS. (with-current-buffer latexenc-main-buffer (or coding-system-for-write buffer-file-coding-system 'undecided)))) 'undecided)))) 'undecided)) ) --8<---------------cut here---------------end--------------->8--- and try it again? IIUC, `latexenc-find-file-coding-system' isn't prepared to deal with `TeX-master' set to a string top-level. My change above adds that. Best, Arash
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.