我正在研究如何用 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_tex
Inkscape 导出新文件。还有一些其他示例可以执行相同的操作,但它们都仅适用于svg
工作目录中的 s。我找不到可以svg
在计算机上的任何位置使用 s 的示例。
为了使其正常工作,必须添加到-shell-escape
,pdflatex
例如我正在使用 Texstudio 并在选项->命令下我编辑了 PdfLaTex 行,使其看起来像
pdflatex -synctex=1 -interaction=nonstopmode -shell-escape %.tex
在 Windows 下,还需要将 inkscape.exe 的位置添加到 PATH。为此,请System
在搜索面板中键入,然后转到advanced system settings
。advanced
单击Environment Variables...
,将弹出一个窗口,在 中找到 PATH system variables
,单击编辑并添加 inkscape 的目录。
Inkscape 0.48 版本有一个已知错误,它会打印
RegistryTool: Could not set the value 'Path/to/inkscape'
尽管如此它仍然有效并且这个错误已经在 0.91 版本中修复。
答案1
原始 LaTeX 代码位于这个文件,您的问题似乎是基于此,需要包graphicx.sty
和color.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