首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tikz外部化问题,当使用带有-output-directory的pdflatex时

Tikz外部化问题,当使用带有-output-directory的pdflatex时
EN

Stack Overflow用户
提问于 2016-11-23 23:32:51
回答 4查看 8.1K关注 0票数 7

-output-directory中使用run时,我在外部化tikz图形时遇到了问题。虽然在我期望的位置创建了.md5文件,但创建外部化图片文件(.pdf、.log、.dpth)的命令失败了。我的假设是,发生这种情况是因为用于创建这些文件的pdflatex没有继承-output-directory选项,因此无法在正确的位置创建文件。

这是一个显示行为的最小示例。

main.tex:

代码语言:javascript
复制
\documentclass{minimal}                                                         
\usepackage{tikz}                                                               
\usetikzlibrary{external}                                                       
\tikzexternalize[prefix=tikz/]                                                  
\begin{document}                                                                
Test externalize in combination with -output-directory                          

\tikzsetnextfilename{testpicture}                                               
\begin{tikzpicture}                                                             
    \node {Node};                                                               
\end{tikzpicture}                                                               
\end{document}

bash:

代码语言:javascript
复制
mkdir -p build/tikz
pdflatex -output-directory build -shell-escape main.tex

错误:

代码语言:javascript
复制
===== 'mode=convert with system call': Invoking 'pdflatex
-shell-escape -halt-on-error -interaction=batchmode -jobname
"tikz/testpicture" "\def\tikzexternalrealjob{main}\input{main}"'
======== This is pdfTeX, Version 3.14159265-2.6-1.40.16
(TeX Live 2015/Debian) (preloaded format=pdflatex)
\write18 enabled.
entering extended mode
! I can't write on file `tikz/testpicture.log'.

结果目录结构(tree的输出):

代码语言:javascript
复制
.
├── build
│   ├── main.aux
│   ├── main.auxlock
│   ├── main.log
│   ├── main.pdf
│   └── tikz
│       └── testpicture.md5
└── main.tex

同样,据我所知,日志文件创建失败是由于外部化执行的pdflatex命令的工作目录中缺少tikz目录。

我的假设是正确的吗?如果是,我应该如何处理?

EN

回答 4

Stack Overflow用户

发布于 2016-11-25 04:24:26

据我所知,最简单的解决方案是在您的主文件夹中创建一个指向build中tikz文件夹的符号链接。像这样:ln -s build/tikz .

这是我在another tikz externalizing library文档中找到的解决方案。

票数 3
EN

Stack Overflow用户

发布于 2018-07-30 13:19:42

tikzexternal不会检测到-output-directory参数。

这也适用于包含图像的情况。您必须在此处的图像前面加上输出目录的路径。

这两点可以在以下MWE中看到:

代码语言:javascript
复制
\documentclass{minimal}

\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize[prefix=tikz/]

\makeatletter
    \tikzset{%
        external/system call={%
            pdflatex %
                \tikzexternalcheckshellescape %
                -halt-on-error %
                -interaction=batchmode %
                -output-directory="build" %
                -jobname "\image" %
                "\texsource"%
        },
        /pgf/images/include external/.code={%
            \includegraphics{build/#1}%
        },%
    }
\makeatother

\begin{document}
    Test externalize in combination with -output-directory

    \tikzsetnextfilename{testpicture}
    \begin{tikzpicture}
        \node {Node};
    \end{tikzpicture}
\end{document}

一些额外的注意事项:

你可以在pgf/frontendlayer/tikz/libraries/tikzexternalshared.code.tex

  • If中找到相关的代码,你的tex文件在一个子目录中,或者你使用的是"\string\def\string\tikzexternalrealjob{\tikzexternal@realjob}\string\input{path/to/tex/file/\tikzexternal@realjob}"

,你必须用

  • 替换"\texsource"

编辑

这将在\tikzexternalcheckshellescape中结束。

对于使用LuaLaTeX的两种方法(原始方法和较短的方法),您都需要\usepackage{shellesc}

票数 1
EN

Stack Overflow用户

发布于 2017-03-05 05:47:30

这也可能是关于权限的问题。尝试使用

代码语言:javascript
复制
chmod 777 tikz

就在你创建文件夹之后。

您还可以尝试将main.tex文件移动到build文件夹中,看看这样做是否会有所改变。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40768426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档