(defun guess-TeX-master (filename)
"Guess the master file for FILENAME from currently open .tex files."
(let
(()
(candidate nil)
(filename (file-name-nondirectory filename)))
(save-excursion
(dolist (buffer (buffer-list))
(with-current-buffer buffer
(let
(()
(name (buffer-name))
(file buffer-file-name))
(if
(and file (string-match "\\.tex$" file))
(progn
(goto-char (point-min))
(if
(re-search-forward
(concat "\\\\input{" filename "}")
nil t)
(setq candidate file))
(if
(re-search-forward
(concat "\\\\include{" (file-name-sans-extension filename) "}")
nil t)
(setq candidate file))))))))
(if candidate
(message "TeX master document: %s" (file-name-nondirectory candidate)))
candidate))