在所选目录中使用 inkscape 从 svg 包含并更新 pdf_tex 文件

在所选目录中使用 inkscape 从 svg 包含并更新 pdf_tex 文件

我正在研究如何用 Inkscape 导出我的 .svg 文件,以防.pdf_tex文件.svg被更改。这样我就可以更改图形,按 Ctrl+S,然后编译我的 tex 文件。

我调整了一些我发现的命令这里这样我就可以在任何地方访问我的数据(以前只能在工作目录中操作)。

现在,为了使其更易于使用,我只想声明它\graphicspath ,然后让我的命令使用它。

现在我正在做以下事情:

\newcommand{\figurepath}[1]{D:/figures/#1}

然后我可以在我自己的命令中使用它

\newcommand{\includesvg}[1]{
\input{\figurepath{#1.pdf_tex}}
}

现在我该如何\figurepath使用\graphicspath?是否有类似 get(grahicspath) 的东西?

编辑:

好的,以下是我目前正在处理的内容:

\usepackage{graphicx,import,xcolor,transparent}


\newcommand{\figurepath}[1]{path/to/svgs/#1}

\newcommand{\executeiffilenewer}[3]{
  \ifnum\pdfstrcmp{\pdffilemoddate{#1}}
  {\pdffilemoddate{#2}}>0
  {\immediate\write18{#3}}\fi
}


\newcommand{\includesvg}[1]{%
  \executeiffilenewer{\figurepath{#1.svg}}{\figurepath{#1.pdf}}
  {inkscape -z -D --file=\figurepath{#1.svg} 
  --export-pdf=\figurepath{#1.pdf} --export-latex}
  \input{\figurepath{#1.pdf_tex}}%
}

它可以运行,而且非常有用。它的作用是检查文件是否svg已被编辑,如果是,则使用pdf_texInkscape 导出新文件。还有一些其他示例可以执行相同的操作,但它们都仅适用于svg工作目录中的 s。我找不到可以svg在计算机上的任何位置使用 s 的示例。

为了使其正常工作,必须添加到-shell-escapepdflatex例如我正在使用 Texstudio 并在选项->命令下我编辑了 PdfLaTex 行,使其看起来像

pdflatex -synctex=1 -interaction=nonstopmode -shell-escape %.tex

在 Windows 下,还需要将 inkscape.exe 的位置添加到 PATH。为此,请System在搜索面板中键入,然后转到advanced system settingsadvanced单击Environment Variables...,将弹出一个窗口,在 中找到 PATH system variables,单击编辑并添加 inkscape 的目录。

Inkscape 0.48 版本有一个已知错误,它会打印

 RegistryTool: Could not set the value 'Path/to/inkscape'

尽管如此它仍然有效并且这个错误已经在 0.91 版本中修复。

答案1

原始 LaTeX 代码位于这个文件,您的问题似乎是基于此,需要包graphicx.stycolor.sty(或xcolor.sty)才能工作。

稍微不同的方法是额外使用该包import.sty

\usepackage{graphicx,import,xcolor}

\newcommand{\executeiffilenewer}[3]{%
  \ifnum\pdfstrcmp%
    {\pdffilemoddate{#1}}%
    {\pdffilemoddate{#2}}%
    >0%
    {\immediate\write18{#3}}%
  \fi%
}
\newcommand{\includesvg}[2][]{%
  \executeiffilenewer{#1#2.svg}{#1#2.pdf}%
    {inkscape -z -D --file=#1#2.svg --export-pdf=#1#2.pdf --export-latex}%
  \subimport{#1}{#2.pdf_tex}%
}

现在\includesvg有一个可选参数,它接受相对路径文件(请注意,所有三个文件,即.PDF.PDF_TEX.SVG,必须具有相同的名称并位于同一目录中)。

使用示例:

\includesvg[figures/]{mydwg}
\includesvg{mydwg} % working directory
\includesvg[../figures/aero/]{mydwg}

答案2

实际上恰恰相反:-) 路径机制是为实现的,\input\includegraphics在本地将其设置为中给出的值\graphicspath

因此最有效的是不要使用\graphicspath只设置

TEXINPUTS="D:/work/figures;"

在运行 latex 之前,它会将该文件夹添加到搜索路径的开头。

或者,如果你想使用符号\graphicspath但又\input看不到它,请使用

\makeatletter
\def\input@path{{D:/work/figures/}}
\makeatother

相关内容