TikZ:编译独立图片

TikZ:编译独立图片

我不确定这是否可以通过 MWE 重新创建。每当我编译独立TikZ图片时,它都会在同一文件夹中编译我的所有独立图形。我正在使用 Ubuntu 13.04 和 Emacs 并运行服务器模式。

在此处输入图片描述

其中一些信息可能无关紧要,但我不确定解决此类问题需要什么。从屏幕截图中,左侧是主文档,TikZ右侧是我正在创建的图片。如您所见,我编译了该图并Latexmk编译了其他每个独立.tex文件。

Output written on sunplanetspacecraft.pdf (1 page, 1117 bytes).
SyncTeX written on sunplanetspacecraft.synctex.gz.
Transcript written on sunplanetspacecraft.log.
Latexmk: Log file says output to 'sunplanetspacecraft.pdf'
Latexmk: All targets (sunplanetspacecraft.pdf) are up-to-date
Latexmk: All targets (transferchoices.pdf) are up-to-date
Latexmk: All targets (transfergeoa.pdf) are up-to-date
Latexmk: All targets (transfergeob.pdf) are up-to-date
Latexmk: All targets (trigidentities.pdf) are up-to-date
Latexmk: All targets (twobodies3D.pdf) are up-to-date
Latexmk: All targets (unitvec.pdf) are up-to-date
Latexmk: All targets (velcomp.pdf) are up-to-date

Latexmk finished at Thu Jul 25 14:12:06

我正在编译sunplanetspacecraft.tex,并且没有任何文件与此文件相关,.tex但它们仍然被编译了。

我查看了日志文件,但没有看到任何与Latexmk编译的其他文件相关的内容。以下是我的序言,希望对您有所帮助。

\documentclass[convert = false]{standalone}

\usepackage[utf8]{inputenc}
\renewcommand{\rmdefault}{ppl}                                  
\linespread{1.05}          
\usepackage[scaled]{helvet}                                  
\usepackage{courier}                                                    
\usepackage{eulervm}                       
\normalfont
\usepackage[T1]{fontenc}
\usepackage{textcomp}

\usepackage[usenames, dvipsnames, svgnames, table]{xcolor}                                             
\usepackage{tikz}
\usetikzlibrary{arrows}

我想要解决这个问题的原因是因为另一张standalone TikZ图片大约需要 2 分钟才能编译,这会减慢编译一张简单图片的速度。


另一个文档也出现了这个问题。这次,调用其中所有standalones 的文档试图调用一个不相关的文档standalone,只是因为它在同一个文件夹中。

因此,MWE(概念)将是在文件夹 a 中的 中有一个文件夹main.texmain.tex您需要有\usepackage{standalone},那么我们有两种情况:

  1. 创建两个standalone要在中调用的 smain.tex并编译第一个。当您编译第二个时,它也会编译第一个。这不会导致我遇到的问题,因为您可能正在创建简单的文档(虽然不是问题)。只需检查输出以查看它是否也编译另一个。这将是我在顶部提到的第一个问题。创建一个名为 test 的文件夹。

    主文本

        \documentclass{article}
        \usepackage{standalone}
        \usepackage{tikz}
        \begin{document}
        test
        \includestandalone{test1}
        \includestandalone{test2}
        \end{document}
    

    测试1.tex

        \documentclass[tikz, convert = false]{standalone}
        \begin{document}
        \begin{tikzpicture}
          \draw (0, 0) -- (2, 0);
        \end{tikzpicture}
        \end{document}
    

    测试2.tex

        \documentclass[tikz, convert = false]{standalone}
        \begin{document}
        \begin{tikzpicture}
          \draw (0, 0) -- (-2, 0);
        \end{tikzpicture}
        \end{document}
    

    因此,如果我编译test2.textest1.tex也会编译。这几乎不会导致速度变慢,但你明白我的意思。

  2. 创建一个未在中调用的独立文件main.tex,但这次不要在文件中添加任何内容。只需将其命名并保存为无前导码。即使此文件未由调用main.tex,编译该main.tex文件也会尝试编译这个甚至没有前导码的文件。它调用是因为它有一个扩展名.tex。在同一个文件夹中,创建test3.tex空白的无前导码或代码并保存它。现在添加一行并编译。这应该会导致主文件中出现 main.tex错误。该文档将正常编译,但会不断出现该错误。正在强制编译一个空白文件,即使它未包含在内。\begin{document}main.tex.tex
;; ============ Latexmk setup ==============                                        
(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"
                 (TeX-command-expand "latexmk -pdf %O %S" 'TeX-master-file)
                 master-file))
    (if (plist-get TeX-error-report-switches (intern master-file))
        (TeX-next-error t)
      (progn
        (demolish-tex-help)
        (minibuffer-message "latexmk: done."))))

(add-hook 'LaTeX-mode-hook (lambda ()
    (push
     '("Latexmk" "latexmk -pdf %S" TeX-run-TeX nil t
       :help "Run Latexmk on file")
     TeX-command-list)))

.latexmkrc设置:

$pdflatex = 'pdflatex --shell-escape -interaction=nonstopmode %O %S -file-line-error -synctex=1';

答案1

困难在于emacs/auctex和都latexmk需要进行配置,而且对于哪个属于哪里存在混淆。Auctex调用latexmk,然后latexmk根据需要调用其他程序pdflatex

中的代码.emacs用于配置emacs/auctex以便能够调用latexmk。它需要包含

;; ============ Latexmk setup ==============                                        
(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"
                 (TeX-command-expand "latexmk -pdf %s" 'TeX-master-file)
                 master-file))
    (if (plist-get TeX-error-report-switches (intern master-file))
        (TeX-next-error t)
      (progn
        (demolish-tex-help)
        (minibuffer-message "latexmk: done."))))

(add-hook 'LaTeX-mode-hook (lambda ()
    (push
     '("Latexmk" "latexmk -pdf %s" TeX-run-TeX nil t
       :help "Run Latexmk on file")
     TeX-command-list)))

与问题中给出的列表相比,出现了%s(小写) 而不是%O %S%S%s表示用于启动 的命令行上的源文件的名称latexmk

中的代码.latexmkrc用于配置latexmk。它需要包含

$pdflatex = 'pdflatex --shell-escape -interaction=nonstopmode -file-line-error -synctex=1 %O %S';

这指定了latexmk如何创建它用来调用的命令行pdflatex%O%S(大写)表示将额外选项和源文件放在哪里。由于如何pdflatex解析其命令行,因此%O %S需要位于命令行模板的末尾。

emacs这个答案使得先前关于配置使用的问题的答案中出现的内容变得过时latexmk如何使“latexmk”运行适当的次数emacs但是,另一个相关问题中给出了 基本配置的答案https://stackoverflow.com/questions/2199678/how-to-call-latexmk-in-emacs-and-jump-to-next-error是正确的。

相关内容