由于某种原因,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
应该启用该选项。
.fls
OP 的文件仅包含两行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.