在 LaTeX 文档中使用 Inkscape 生成的图形:如何使流程更高效?

在 LaTeX 文档中使用 Inkscape 生成的图形:如何使流程更高效?

我使用 LaTeX 来打印数学和物理的讲义,每当我需要为它们生成图形时,我都会使用 Inkscape。我想找到一种更快的方法来做到这一点。目前,我做以下事情:

  • 我的文件是使用subfiles软件包进行组织的。每个讲座都有自己的“单独文件”,我通过命令将它们全部编译到一个大的“主文件”中subfile。由于每个 TeX 文件都很短,因此这使文件更容易组织。我将“单独文件”组织在与“主文件”不同的文件中。

  • 当我需要生成图表时,我会使用 Inkscape 生成一个 TikZ 文件(例如在Ethan Bolker 在 Exporting from Inkscape to LaTeX - via TikZ 中的回答),然后将其包含在我的“个人文件中”。

上述方法虽然效果不错,但也有一些方面需要改进。

我的问题:

  • 当我生成.pdf_tex文件时,TikZ 命令总是给出文件名而不是文件位置。(见下面的示例。)我希望 Inkscape 自动用我的文件位置填充这些。因此,对于由 Inkscape 文件生成的drawing.pdf_tex位于 的文件,我希望我的文件自动显示而不是。/Users/admin/Desktop/drawing.svg/Users/admin/Desktop/drawing.pdf_tex<filename>.pdf

我需要以上述方式指定文件位置的原因是我的“单个文件”与“主文件”位于不同的文件夹中,因此即使 TikZ 在“单个文件”中编译,它也不会在“主文件”中编译,除非我指定位置。

drawing.svg下面是我编译为 TikZ 文件时得到的示例:

%% Creator: Inkscape inkscape 0.92.2, www.inkscape.org
%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010
%% Accompanies image file 'drawing.pdf' (pdf, eps, ps)
%%
%% To include the image in your LaTeX document, write
%%   \input{<filename>.pdf_tex}
%%  instead of
%%   \includegraphics{<filename>.pdf}
%% To scale the image, write
%%   \def\svgwidth{<desired width>}
%%   \input{<filename>.pdf_tex}
%%  instead of
%%   \includegraphics[width=<desired width>]{<filename>.pdf}
%%
%% Images with a different path to the parent latex file can
%% be accessed with the `import' package (which may need to be
%% installed) using
%%   \usepackage{import}
%% in the preamble, and then including the image with
%%   \import{<path to file>}{<filename>.pdf_tex}
%% Alternatively, one can specify
%%   \graphicspath{{<path to file>/}}
%% 
%% For more information, please see info/svg-inkscape on CTAN:
%%   http://tug.ctan.org/tex-archive/info/svg-inkscape
%%
\begingroup%
  \makeatletter%
  \providecommand\color[2][]{%
    \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}%
    \renewcommand\color[2][]{}%
  }%
  \providecommand\transparent[1]{%
    \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}%
    \renewcommand\transparent[1]{}%
  }%
  \providecommand\rotatebox[2]{#2}%
  \ifx\svgwidth\undefined%
    \setlength{\unitlength}{618.84102366bp}%
    \ifx\svgscale\undefined%
      \relax%
    \else%
      \setlength{\unitlength}{\unitlength * \real{\svgscale}}%
    \fi%
  \else%
    \setlength{\unitlength}{\svgwidth}%
  \fi%
  \global\let\svgwidth\undefined%
  \global\let\svgscale\undefined%
  \makeatother%
  \begin{picture}(1,0.43735005)%
    \put(0,0){\includegraphics[width=\unitlength,page=1]{drawing.pdf}}%
  \end{picture}%
\endgroup%

答案1

自版本v1.4 2019/10/25subfiles包裹,就不再需要指定额外的路径。如果子文件找到所有文件,则通过 加载它的主文件\subfile也会找到它们。这至少对于通过\input或包含的文件是正确的\includegraphics。在以下设置中,两个文件main.texsub.tex都会编译。

% Structure:
% main.tex
% personalstyle.sty
% subdir/sub.tex
% subdir/image.pdf
% subdir/tikzimage.tex

% main.tex
\documentclass{article}
\usepackage{personalstyle}
\usepackage{subfiles} % Should be loaded last in the preamble!
\begin{document}
\subfile{subdir/sub}
\end{document}

% subdir/sub.tex
\documentclass[../main]{subfiles}
\begin{document}
\includegraphics{image.pdf}
\input{tikzimage}
\end{document}

相关内容