Latexmk 说文件是最新的,但实际上不是

Latexmk 说文件是最新的,但实际上不是

由于某种原因,pdflatexmk排字员有时无法识别我的文件中的更改并返回:

Latexmk: All targets (main.pdf) are up-to-date

而目标不是最新的。当我在 中输入内容时three.tex,单击保存然后排版,有时排版正常,有时显示上述消息。当显示上述消息时,我需要再输入一些文本,然后尝试再次排版。经过几次尝试,它就会正常排版。

我在下面附上了我的文件的精简版本:

main.tex

% !TEX TS-program = pdflatexmk

\documentclass[12pt,a4paper,titlepage,final]{report}

\usepackage[paper=a4paper, hmargin=2.5cm, vmargin=0cm]{geometry} 
\usepackage{caption}                    
\usepackage{geometry}
\usepackage{fancyhdr}                   
\usepackage{graphicx}                   
\usepackage[toc,nonumberlist]{glossaries}       
\usepackage{pdfsync}                    
\usepackage[T1]{fontenc}                    
\usepackage[applemac]{inputenc}         
\usepackage[section]{placeins}                    
\usepackage{parskip}                    
\usepackage{amsmath}                    
\usepackage{natbib}                 
\usepackage{tikz}                       
\usepackage{pgfplots}                   
\usetikzlibrary{plotmarks}          

\includeonly{chapters/three}

\begin{document}
\include{chapters/one}
\include{chapters/two}
\include{chapters/three}

\bibliographystyle{apalike}
\biblipgraphy{refs}
\addcontentsline{toc}{chapter}{Bibliography}

\end{document}

three.tex(位于文件夹./chapters):

% !TEX root = ../main.tex
\chapter{Three}
\label{chap:three}

Text, figures and equations

我在 Mac OSX 10.8.4 上使用 TeXShop 3.23。使用此设置几个月来一切运行正常,但现在发生了一些变化(不知道是什么)。

更新:
我在主目录中发现了一个名为的文件pdflatex24719.fls,其中包含以下内容:

PWD /Users/user/Documents/Dropbox/main
INPUT /usr/local/texlive/2012/texmf.cnf
INPUT /usr/local/texlive/2012/texmf/web2c/texmf.cnf

我以前从未见过这个文件,所以我决定删除它。删除后,一切又恢复正常。

更新 2: 并且这种行为又回来了。尽管我更改了文本,但它three.tex pdflatexmk仍然显示它是最新的。

更新 3: 我发现.pdf已更新。当我使用 Preview.app 打开它时,我看到了更新后的版本。但是,TexShop 预览窗口仍然显示旧.pdf文件。

更新 4: 按照建议纺织爱好者我创建了一个示例书目refs.bib和一个示例 tex 文件sample.tex。后者如下所示:

\documentclass[12pt,a4paper,titlepage,final]{report}
\begin{document}

test citing~\cite{Rom1992}

\bibliographystyle{apalike}
\bibliography{refs}
\end{document}

在文件夹中,sample.tex我运行latexmk -pdf sample.tex终端并检查了 pdf 文件。对文件进行编辑后,.tex我再次运行该命令。更改反映在 pdf 文件中。

答案1

我经常遇到这种情况。每次出现这种情况,原因都是一样的。我编译为 pdf,但 Acrobat Reader 中打开了上次编译的现有 pdf。编译完成但无法写入 pdf。如果我重新编译,就会出现您的错误(即 pdf 不是最新的,但编译器说它是最新的)。

解决办法是第二次重新编译之前删除该pdf。

答案2

一个选项是-g使用时添加标志latexmk:

latexmk -pdf -g main.tex

来自latexmk文档为了-g

强制 latexmk 完全处理文档,即使在 latexmk 通常会判定自上次运行以来源文件中没有发生任何变化的情况下。


使用 GNU make

附注:当混合使用 GNUmake和时,这可能会有所帮助latexmk。如果命令在那里latexmk执行make,必须的先决条件发生了变化,main.pdf. latexmk似乎并不总是能发现这一点并返回,All targets (main.pdf) are up-to-date.但是-g,编译至少会强制执行一次。

make,在添加选项的情况下-use-make

latexmk -pdf -g -use-make main.tex

也可能是有价值的,因为它会导致latexmk调用make来创建所缺少的输入。

对于其他情况,是否需要make,它可能取决于您是否愿意承担至少一次编译运行的成本,即使在没有必要的情况下。

答案3

-recorder

另一个值得注意的点是-recorder应该启用该选项。

.flsOP 的文件仅包含两行INPUT,表明该-recorder选项未启用。如果-recorder启用,chapters/one则将添加所有输入文件(例如,bib 文件等),并且 latexmk 可以在此处检测到更改:

man latexmk(版本 4.52c)说

-recorder
 Give the -recorder option with latex and pdflatex.  In (most) modern versions of these 
 programs, this results in  a file of extension .fls containing a list of the files that
 these programs have read and written.  Latexmk will then use this file to improve its
 detection of source files and generated files after a run of latex or pdflatex.  This
 is the default setting of latexmk, unless overridden in an initialization file.

 For further information, see the documentation for the $recorder configuration variable.

相关内容