正如这里所建议的latexmk那样,只要源更改,就可以方便地连续编译文档.但是,当您处理文档时,通常会出现错误,然后latex在继续之前会发生恐慌并等待用户输入.这可能会非常烦人,特别是最近我latex直接从一个以太网板文件中编译的东西,这会在你输入时不断保存.
如果它无法编译,是否有设置latex或latexmk使其只是中止错误消息?或者,如果有必要,我如何设置某种Expect脚本来自动解除LaTeX的投诉?
(我原以为pdflatex可以选择-halt-on-error诀窍,但显然不是.)
奖金问题:在Mac OSX上浏览是一个不错的pdf查看器,当pdf更改时会自动恢复(与预览不同),除非每当出现乳胶错误时它会再次确认您需要自动清除.Texniscope没有这个问题,但由于其他原因我不得不抛弃Texniscope .有没有办法让Skim始终自动刷新,还是有其他观众可以做到这一点?
latexmk基于这个问题的答案的迷你教程:获取latexmk此: http://www.phys.psu.edu/~collins/software/latexmk-jcc/
将以下内容添加到您的~/.latexmkrc文件中:
$pdflatex = 'pdflatex -interaction=nonstopmode';
Run Code Online (Sandbox Code Playgroud)
(对于OS X with Skim)
$pdf_previewer = "open -a /Applications/Skim.app";
Run Code Online (Sandbox Code Playgroud)编辑源文件时,foo.tex在终端中运行以下命令:
latexmk -pvc -pdf foo.tex
Run Code Online (Sandbox Code Playgroud)使用Skim或其他实时pdf查看器查看foo.pdf.对于Skim,只需查看Skim首选项中的"同步"选项卡,并为编辑器进行设置.
瞧!点击保存foo.tex现在将导致foo.pdf刷新而不触及任何东西.
我想使用latexmk在Emacs中编译我的LaTeX文档.特别是我需要Emacs功能next-error,通常使用Cx`调用,并跳转到文档中的下一个LaTeX错误.
我想打电话latexmk或使用C-x compileAUCTeX C-c C-c.
首先,我开始latexmk使用
$pdflatex = 'pdflatex -interaction=nonstopmode';
Run Code Online (Sandbox Code Playgroud)
选项1:Cx编译
我按下C-x compile并键入latexmk -pdf foo,运行pdflatex.但是next-error,即使*compilation*缓冲区包含错误,也不会跳转到错误:
! Paragraph ended before \author was complete.
<to be read again>
\par
l.48
[...]
Compilation exited abnormally with code 12
Run Code Online (Sandbox Code Playgroud)
如何在第48行自动跳转到此错误?
请注意,解析乳胶输出的这个问题与latexmk直接无关.我刚才也会出现同样的问题C-x compile pdflatex -interaction=nonstopmode foo.
选项2:AUCTeX
如何设置AUCTeX latexmk -pdf而不是pdflatex我的.tex文件?当然,我也想next-error在这里工作.
更新:我开始获得赏金,因为如果这有效,对许多人来说这将是一个很好的工具.我认为如果给出一个解决方案可以让我latexmk在Emacs中轻松编译我的LaTeX文档并使用跳转到错误next-error …
如何在Mac OS X上编译XeLaTeXtex文档latexmk?
目前我正在运行latexmk job.tex并收到错误:
!
********************************************
* XeTeX is required to compile this document.
* Sorry!
********************************************.
\RequireXeTeX ...********************************}
\endgroup \fi
l.18 \RequireXeTeX
? ^D
! Emergency stop.
\RequireXeTeX ...********************************}
\endgroup \fi
l.18 \RequireXeTeX
Run Code Online (Sandbox Code Playgroud)
我TEX文件的第一行是(通过所建议的这个帖子):
% !TEX TS-program = xelatexmk
Run Code Online (Sandbox Code Playgroud)
我尝试过其他人(例如program = xelatex),但无济于事.
latexmk 描述其命令如下:
$ latexmk -commands xelatex job
Commands used by latexmk:
To run latex, I use "latex %O %S"
To run pdflatex, I use "pdflatex %O %S"
... …Run Code Online (Sandbox Code Playgroud) 我正在使用AUCTeX,我想绑定一个密钥,例如C-0,执行以下操作:
latexmk在没有提示我的情况下运行活动文件.latexmk遇到任何问题,则显示错误.我的问题不是如何绑定一个密钥(Tyler在下面的评论中发布了一个链接),但是如何提出一个完成1-3项的功能.
我打电话给Latexmk
(add-hook 'LaTeX-mode-hook (lambda ()
(push
'("Latexmk" "latexmk %s" TeX-run-TeX nil t
:help "Run Latexmk on file")
TeX-command-list)))
Run Code Online (Sandbox Code Playgroud)
这是我的.latexmkrc
$pdf_mode = 1;
$recorder = 1;
$latex = 'latex -recorder -halt-on-error -interaction=nonstopmode -shell-escape';
$pdflatex = 'pdflatex -recorder -halt-on-error -interaction=nonstopmode -shell-escape';
Run Code Online (Sandbox Code Playgroud)
我正在使用Emacs 23.3和AUCTeX 11.86.
我创建了一个LaTeX \todo{}命令,在边缘输出todo音符:
\newcommand\todo[1]{\marginpar{#1}}
Run Code Online (Sandbox Code Playgroud)
但是,我真的想将所有todo笔记的列表输出到输出控制台.我编写了一个简单的python脚本来解析.tex文件来执行此操作,但后来切换到使用latexmk来处理重新编译.我的脚本也没有真正处理\includeonly.
我可以直接写入乳胶内的LaTeX控制台输出吗?
这是如何将latexmk绑定到Emacs中的一个键并让它显示错误(如果有的话)的后续内容.
我正在使用Emacs中的一个函数来编译LaTeX文档,latexmk但它的行为并不像我想要的那样.我使用的功能是一个JouniK.Seppänen提出:
(defun run-latexmk ()
(interactive)
(let ((TeX-save-query nil)
(TeX-process-asynchronous nil)
(master-file (TeX-master-file)))
(TeX-save-document "")
(TeX-run-TeX "latexmk" "latexmk" master-file)
(if (plist-get TeX-error-report-switches (intern master-file))
(TeX-next-error t)
(minibuffer-message "latexmk done"))))
(add-hook 'LaTeX-mode-hook
(lambda () (local-set-key (kbd "C-0") #'run-latexmk)))
Run Code Online (Sandbox Code Playgroud)
主要的问题是,当我使用该功能时(通过按下C-0),它有时会把我扔进一个名为TeX Live 2011的空缓冲区.
重现此问题的一种方法是尝试编译以下内容(vc.tex不存在并不重要):
\immediate\write18{sh ./vc}
\input{vc}
\documentclass{article}
\begin{document}
\end{document}
Run Code Online (Sandbox Code Playgroud)
另一种再现方式是尝试编译以下内容:
\documentclass{article}
\newcommand{foo}{
\begin{document}
\end{document}
Run Code Online (Sandbox Code Playgroud)
一个小的(装饰性的)问题是迷你缓冲器的高度有时会从一条线扩展到两条线,run-latexmk并且在它运行之后它会弹回到一条线高度.我在找到一个简单的例子来重现这种行为时遇到了问题(我只为非常大的文档复制了它).
我想解决这两个问题.我也有兴趣以其他方式与我在Emacs中与latexmk进行交互.
这是*... output* buffer最后一个示例(缺少结束大括号的示例\newcommand:
Running `latexmk' on `test' with ``latexmk''
Latexmk: This is …Run Code Online (Sandbox Code Playgroud) 在Ubuntu 10.4LTS我试图使用microtype包中memoir的类的文件,例如像这样:
\usepackage[final,expansion=true]{microtype}
Run Code Online (Sandbox Code Playgroud)
然而,当我试图编译这个(与rubber,latexmk或其他人)我得到这样的错误:
job.tex:72:字体csnameendcsname = rm-lmr10 + 20 at 10.95pt not loadable:未找到度量标准(TFM)文件.
job.tex:72:正文:\ parbox {5in} {Abstract!}
job.tex:72:10.95pt的字体csnameendcsname = rm-lmr10-20无法加载:找不到公制(TFM)文件.
job.tex:72:正文:\ parbox {5in} {Abstract!}
job.tex:80:字体csnameendcsname = rm-lmr10 + 20,10.0pt无法加载:找不到公制(TFM)文件.
job.tex:80:正文:... box {11cm} {\noindent {}保留所有权利.}
job.tex:80:字体csnameendcsname = rm-lmr10-20 10.0pt无法加载:找不到公制(TFM)文件.
job.tex:80:正文:... box {11cm} {\noindent {}保留所有权利.}
注意,我遗漏了许多可能正在交互的代码,但导致此错误的一个活动行是包含该microtype包.
我使用的是\usepackage{lmodern}和\usepackage[T1]{fontenc},但是当我离开那些出了问题依然存在,并且字体名称相应地从改变lmr10为默认cm10.
这段代码很容易在Mac OS X上与TeXShop一起使用,但它似乎在Ubuntu上没有用(很容易).我只是不知道如何在Ubuntu上设置字体来解决这个问题,我非常有必要输入如何解决这样的错误.
谢谢.
布赖恩
我想使用一个AUCtex命令编织AND latexmk Knitr文档.我不知道如何在lisp中编码,而网络搜索没有发现这样的事情.
我有一些接近的东西.需要为latexmk更改文件的扩展名.任何帮助将不胜感激.
以下行是我的.emacs文件.
(add-hook 'LaTeX-mode-hook (lambda () (push '
("KnitrLaTeX" "Rscript -e \"library(knitr)\; knit('%s')\" && latexmk -pdf %s"
TeX-run-TeX nil t :help "Run knitr and latexmk on file")
TeX-command-list)))
Run Code Online (Sandbox Code Playgroud)
当我运行时C-c C-c (KnitrLaTeX),emacs运行以下命令:
Running `KnitrLaTeX' on `slides.Rnw' with ``Rscript -e "library(knitr); knit('slides.Rnw')" && latexmk -pdf slides.Rnw''
Run Code Online (Sandbox Code Playgroud)
哪个错了.它应该读"... && latexmk -pdf slides.tex"
提前致谢.
我一直是Sublime Text的LaTeXTools插件的粉丝.但是,作者最近更新了插件,它将不再构建我的LaTeX文档.我想知道是否有其他人有这个问题,知道如何解决它?这是我得到的完整控制台输出:
[Compiling /home/tingley/Dropbox/testtex.tex]
TraditionalBuilder: Invoking latexmk...
COULD NOT COMPILE!
Attempted command:latexmk -cd -e $pdflatex = 'pdflatex -interaction=nonstopmode -synctex=1 %S %O' -f -pdf testtex.tex
Build engine: Traditional Builder
Run Code Online (Sandbox Code Playgroud)
我在Ubuntu 13.10上使用Sublime Text 3和TeXLive.我可以使用以下命令手动编译文档并生成PDF:
pdflatex ~/Dropbox/testtex.tex
Run Code Online (Sandbox Code Playgroud)
不过,我希望能够在Sublime中轻松完成这项工作.我已经尝试运行"更新LaTeXTools并迁移设置",以及通过包控制删除并重新安装插件.
谢谢!
我看过这个类似问题的答案,建议使用latexmk -c或pdflatex -aux-directory=/some/temp/dir <additional options>。我更喜欢后者,因为您可以创建子目录而无需重复删除和生成文件。当前,此选项“仅在 (pdf)latex 的 MiKTeX 版本上实现”。另一方面,前一种方法似乎不能正常工作。我在 Visual Studio Code 中使用LaTeX Workshop,它默认使用latexmk. 为了添加-c标志,我创建了以下收据:
"latex-workshop.latex.tools": [
{
"name": "latexmk -c",
"command": "latexmk",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"-pdf",
"-c",
"%DOC%"
]
}
],
"latex-workshop.latex.recipes": [
{
"name": "latexmk -c",
"tools": [
"latexmk -c"
]
}
]
Run Code Online (Sandbox Code Playgroud)
如果我首先从乳胶源文件创建 pdf 文件,然后-c为下一次编译添加标志,它会正确删除附加文件。但是,如果您想第一次编译(当没有可用的pdf或辅助文件时),它不会生成任何pdf文件,我应该考虑删除该-c标志。即使您已经拥有 pdf 文件及其关联文件,一旦您从文件夹中仅删除 pdf 文件,也会出现同样的问题。是否有一种有效的方法可以在 Linux(或 vscode)中隐藏此类辅助文件(通过删除它们或最好将它们放在子文件夹中)?