Function: TeX-master-file
TeX-master-file is an interactive and byte-compiled function defined
in tex.el.
Signature
(TeX-master-file &optional EXTENSION NONDIRECTORY ASK)
Documentation
Set and return the name of the master file for the current document.
If optional argument EXTENSION is non-nil, add that file extension to
the name. Special value t means use TeX-default-extension.
If optional second argument NONDIRECTORY is non-nil, do not include the directory.
If optional third argument ASK is non-nil, ask the user for the name of master file if it cannot be determined otherwise.
Key Bindings
Source Code
;; Defined in ~/.emacs.d/elpa/auctex-14.1.2/tex.el
(defun TeX-master-file (&optional extension nondirectory ask)
"Set and return the name of the master file for the current document.
If optional argument EXTENSION is non-nil, add that file extension to
the name. Special value t means use `TeX-default-extension'.
If optional second argument NONDIRECTORY is non-nil, do not include
the directory.
If optional third argument ASK is non-nil, ask the user for the
name of master file if it cannot be determined otherwise."
(interactive)
(if (eq extension t)
(setq extension TeX-default-extension))
(with-current-buffer
;; In case this is an indirect buffer:
(or (buffer-base-buffer) (current-buffer))
(let ((my-name (if (TeX-buffer-file-name)
(TeX-strip-extension nil (list TeX-default-extension) t)
"<none>")))
(save-excursion
(save-restriction
(widen)
(goto-char (point-min))
(cond
((and TeX-transient-master
(or (not TeX-master) (eq TeX-master 'shared)))
(setq TeX-master TeX-transient-master))
;; Special value 't means it is own master (a free file).
((equal TeX-master my-name)
(setq TeX-master t))
;; For files shared between many documents.
((and (eq 'shared TeX-master) ask)
(setq TeX-master
(let* ((default (TeX-dwim-master))
(name (read-file-name
(format-prompt "Master file"
(or default "this file"))
nil default)))
(cond ((string= name default)
default)
((or
;; Default `read-file-name' proposes and
;; buffer visits a file.
(string= (expand-file-name name)
(TeX-buffer-file-name))
;; Default of `read-file-name' and
;; buffer does not visit a file.
(string= name default-directory)
;; User typed <RET> in an empty minibuffer.
(string= name ""))
t)
(t
(TeX-strip-extension
name (list TeX-default-extension) 'path))))))
;; We might already know the name.
((or (eq TeX-master t) (stringp TeX-master)))
;; Ask the user (but add it as a local variable).
(ask (TeX-master-file-ask)))))
(let ((name (if (stringp TeX-master)
TeX-master
my-name)))
(if (TeX-match-extension name)
;; If it already has an extension...
(if (equal extension TeX-default-extension)
;; Use instead of the default extension
(setq extension nil)
;; Otherwise drop it.
(setq name (TeX-strip-extension name))))
(let* ((reg (TeX--clean-extensions-regexp t))
(is-output-ext (and reg
(or (string-match-p reg (concat "." extension))
(string= "prv" extension))))
(output-dir (and is-output-ext
(TeX--master-output-dir
(file-name-directory name)
nondirectory))))
(if output-dir
(setq name (concat output-dir (file-name-nondirectory name)))
;; Remove directory if needed.
(if nondirectory
(setq name (file-name-nondirectory name)))))
(if extension
(concat name "." extension)
name)))))