Hi all, At last I managed to figure out the roots of this wierd symptom. And it also turned out that bug#20773 has the same origin, so I'm cc'ing to [email protected], too.
>>>>> Ikumi Keita <[email protected]> writes: > Preview-latex fails if the length of the file name or the amount of the > document is sufficiently large. > [How to reproduce] > (0) Enable preview-latex. > (1) Save the attached file "preview-section-test.tex" in /tmp/ and open it. > (2) Type C-c C-p C-d and answer with "n" to "Cache preamble?" question. > (3) The ghostscript process hangs with error message "No bounding box" > and the process buffer is displayed. Only the partial "\section{xxx}" > are covered by the expected images and rests remains icons of road > construction sign. See the attached screenshot. > It is really strage to me that the length of the file name seems to be > related to this symptom. If the *same* file is saved under the file > name "xxxxxxxxxxxxxxxxxx.tex" (18 x's), no errors occur and all > "\section{xxx}" are covered by suitable images after C-c C-p C-d. But > the symptom occurs again if the file name is "xxxxxxxxxxxxxxxxxxx.tex" > (19 x's). [Analysis] When LaTeX runs it always outputs a lot of messages to console and log file, and it inserts line breaks in the 80th column when it outputs long messages. Here are some samples: ---------------------------------------------------------------------- ./preview-section-test.tex:10: Preview: Snippet 4 ended.(655359+183500x22609920 ). ---------------------------------------------------------------------- ./xxxxxxxxxxxxxxxxxxxABC.tex:8: Preview: Snippet 3 ended.(655359+183500x2260992 0). ---------------------------------------------------------------------- ./formalism_atranslation.tex:1: Preview: Snippet 1 ended.(541848+14544x15728640 ). ---------------------------------------------------------------------- It is this line break that makes preview-latex to fail. The part which parses the LaTeX messages in `preview-parse-messages' of preview.el is: ---------------------------------------------------------------------- (if (looking-at "\ \\(?:Preview\\|Package Preview Error\\): Snippet \\([---0-9]+\\) \\(started\\|ended\\(\ \\.? *(\\([---0-9]+\\)\\+\\([---0-9]+\\)x\\([---0-9]+\\))\\)?\\)\\.") (progn ... (snip) ... (setq snippet (string-to-number (match-string 1)) box (unless (string= (match-string 2) "started") (if (match-string 4) (mapcar #'(lambda (x) (* (preview-get-magnification) (string-to-number x))) (list (match-string 4) (match-string 5) (match-string 6))) t)) ---------------------------------------------------------------------- Comparing the regexp and the examples quoted above, you can tell that the regexp fails to pick up the numbers embedded in the LaTeX messages such as "655359+183500x22609920" due to the extra line break. This the reason that preview-latex cannot provide the necessary information to ghostscript and complains that "No bounding box". [Solution] Thanks to https://tex.stackexchange.com/questions/52988/avoid-linebreaks-in-latex-console-log-output , I learned that we can (effectively) inhibit to insert extra line breaks by setting environment variable max_print_line to sufficiently large value. I confirmed that the attached patch solves the both bug#20773 and bug#27088. I will install this fix in a week or so. According to the article above, MikTeX also understands max_print_line, so I think this fix is effective regardless of TeX distribution. As always, any comments and suggestions are welcome. And I also expect that the same prescription can be applied to solve reliably similar problem handled in `TeX-format-filter' at the part "Remove line breaks at columns 79 and 80" comment. We can get rid of heuristic logic used there. Regards, Ikumi Keita
>From [email protected] Fri Sep 22 14:52:07 2017 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [PATCH] Make preview-latex parsing robust to fix Bug#20773, Bug#27088 X-Mercurial-Node: 47711b2553dcbf4858a1b4f53d63e82a3003bca8 X-Mercurial-Series-Index: 1 X-Mercurial-Series-Total: 1 Message-Id: <[email protected]> X-Mercurial-Series-Id: <[email protected]> User-Agent: Mercurial-patchbomb/4.3.1 Date: Fri, 22 Sep 2017 14:52:07 +0900 From: Ikumi Keita <[email protected]> To: dummy * preview.el.in (TeX-inline-preview-internal): Set environment variable max_print_line to sufficiently large value of 1000 so that LaTeX process does not insert newline in lines necessary to identify Bounding Boxes. diff --git a/preview.el.in b/preview.el.in --- a/preview.el.in +++ b/preview.el.in @@ -3537,19 +3537,25 @@ ((preview-format-name (shell-quote-argument (preview-dump-file-name (file-name-nondirectory master)))) + (process-environment process-environment) (process - (TeX-run-command - "Preview-LaTeX" - (if (consp (cdr dumped-cons)) - (preview-do-replacements - command - (append preview-undump-replacements - ;; Since the command options provided in - ;; (TeX-engine-alist) are dropped, give them - ;; back. - (list (list "\\`\\([^ ]+\\)" - (TeX-command-expand "%(PDF)%(latex)" nil))))) - command) file))) + (progn + ;; Fix Bug#20773, Bug#27088. + ;; Make LaTeX not to insert newline in lines necessary to + ;; identify Bounding Boxes. + (setenv "max_print_line" "1000") + (TeX-run-command + "Preview-LaTeX" + (if (consp (cdr dumped-cons)) + (preview-do-replacements + command + (append preview-undump-replacements + ;; Since the command options provided in + ;; (TeX-engine-alist) are dropped, give them + ;; back. + (list (list "\\`\\([^ ]+\\)" + (TeX-command-expand "%(PDF)%(latex)" nil))))) + command) file)))) (condition-case err (progn (when str
_______________________________________________ bug-auctex mailing list [email protected] https://lists.gnu.org/mailman/listinfo/bug-auctex
