[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#25674: Support for subfiles in `reftex-TeX-master-file'
From: |
Mosè Giordano |
Subject: |
bug#25674: Support for subfiles in `reftex-TeX-master-file' |
Date: |
Sun, 12 Feb 2017 16:12:33 +0100 |
Hi Arash,
2017-02-10 9:48 GMT+01:00 Arash Esbati <address@hidden>:
> Hi all,
>
> the function `reftex-TeX-master-file' in `reftex.el' has support for
> subfiles package, but I think the regexp there does not match all
> cases. Please consider a main file "subfile-main.tex" and a sub-file
> "subfile-sub1.tex" like these:
>
> --8<---------------cut here---------------start------------->8---
> \documentclass{article}
> \usepackage{subfiles}
> \begin{document}
>
> \section{Section 1}
> \label{sec:section-1}
>
> \subfile{subfile-sub1.tex}
> \end{document}
>
> %%% Local Variables:
> %%% mode: latex
> %%% TeX-master: t
> %%% End:
> --8<---------------cut here---------------end--------------->8---
>
> --8<---------------cut here---------------start------------->8---
> \documentclass[subfile-main.tex]{subfiles}
> \begin{document}
>
> \section{Subsection 1}
> \label{sec:subsection-1}
>
> \end{document}
>
> %%% Local Variables:
> %%% mode: latex
> %%% TeX-master: t
> %%% End:
> --8<---------------cut here---------------end--------------->8---
>
> `reftex-TeX-master-file' fails to parse the first line and find out the
> main file due to first part of it:
>
> --8<---------------cut here---------------start------------->8---
> (defun reftex-TeX-master-file ()
> ;; Return the name of the master file associated with the current buffer.
> ;; When AUCTeX is loaded, we will use it's more sophisticated method.
> ;; We also support the default TeX and LaTeX modes by checking for a
> ;; variable tex-main-file.
> (let
> ((master
> (cond
> ;; Test if we're in a subfile using the subfiles document
> ;; class, e.g., \documentclass[main.tex]{subfiles}. It's
> ;; argument is the main file, however it's not really the
> ;; master file in `TeX-master-file' or `tex-main-file's
> ;; sense. It should be used for references but not for
> ;; compilation, thus subfiles use a setting of
> ;; `TeX-master'/`tex-main-file' being themselves.
> ((save-excursion
> (goto-char (point-min))
> (re-search-forward
>
> "^[[:space:]]*\\\\documentclass\\[\\([[:word:].]+\\)\\]{subfiles}"
> nil t))
> (match-string-no-properties 1))
> --8<---------------cut here---------------end--------------->8---
>
> The regexp looks for [:word:] character class and ignores anything
> else. Using `-', `_' or digits in main file name will not work.
Agreed.
> I
> think the regexp can be reduced to
>
> --8<---------------cut here---------------start------------->8---
> (re-search-forward
> "^[[:space:]]*\\\\documentclass\\[\\([^]]+\\)\\]{subfiles}"
> nil t))
> --8<---------------cut here---------------end--------------->8---
>
> as `reftex-TeX-master-file' checks if .tex extension is given or not.
> With this change, one can use `C-c )' over all files in a project and
> `C-c C-c' compiles a only subfile when issued in it.
>
> Any comments? I would prepare a patch after confirmation here.
`thing-at-point-file-name-chars' is a good list of characters
allowable in filenames (maybe it won't work in some corner case but
should do the job in most cases). However I don't have a preference
between your regexp and `thing-at-point-file-name-chars'.
Bye,
Mosè