\输入存在于“./”或“./figures”中的文件

\输入存在于“./”或“./figures”中的文件

我使用 XFig 绘制大部分图形(我多大了?),我发现以“LaTeX+PDF”格式导出很方便,这样可以fig03.pdf_t创建一个简单的 LaTeX 源。例如(扩展名是固定的)。该文件负责排版,使用文档设置,并使用包\includegraphics中的graphicx文件(在我们的示例中)包含fig03.pdfpicture环境中。

我通常将 XFig 源和导出的文件放在./figures子目录中,并将其放在\graphicspath{{figures/}}文档源中。

到目前为止……但有时我喜欢在文档目录中放入证据、特定的图形,或者我只是懒惰或困惑,而我的一些图形在./而不是在./figures/

我希望能够写作

\input\get{fig03}

并让 LaTeX 帮我找到该文件。

我该如何定义\get命令?


最基本的公式\get就是扫描././figures/但似乎可以定制设置列表的方式\graphicspath

答案1

也许是这个?

\documentclass{article}

\newcommand{\get}[1]{%
\IfFileExists{./figures/#1}{%
        \input{./figures/#1} 
    }{%
        \input{./#1} 
    }
}


\begin{document}

\get{fig03.pdf_t}

\end{document}

答案2

如果你有能力修改环境只是为了编译这种文档,一种可能性是添加所需的目录TEXINPUTS(例如参见这里)。否则,为了获得可自定义的搜索路径列表,您可以使用以下命令:

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\seq_new:N \g_gboffi_search_path_seq

\prg_generate_conditional_variant:Nnn \str_if_eq:nn { x } { T, F, TF }

\cs_new_protected:Npn \gboffi_set_search_path:n #1
  {
    \seq_gclear:N \g_gboffi_search_path_seq
    \clist_map_inline:nn {#1}
      {
        % Append a '/' if not already present before appending a path to
        % \g_gboffi_search_path_seq.
        \str_if_eq:xnTF { \tl_item:nn {##1} { -1 } } { / }
          { \seq_gput_right:Nn \g_gboffi_search_path_seq {##1} }
          { \seq_gput_right:Nn \g_gboffi_search_path_seq {##1/} }
      }
  }

\msg_new:nnn { gboffi } { cannot-find-file }
  { Can't~find~file~'\exp_not:n {#1}.tex'. }

\bool_new:N \l__gboffi_found_flag_bool

\cs_new_protected:Npn \gboffi_input:n #1
  {
    \bool_set_false:N \l__gboffi_found_flag_bool

    \seq_map_inline:Nn \g_gboffi_search_path_seq
      {
        \file_if_exist:nT { ##1#1.tex }
          {
            \file_input:n { ##1#1.tex }
            \bool_set_true:N \l__gboffi_found_flag_bool
            \seq_map_break:
          }
      }

    \bool_if:NF \l__gboffi_found_flag_bool
      { \msg_error:nnn { gboffi } { cannot-find-file } {#1} }
  }

\NewDocumentCommand \myInputWithSearchPath { m }
  {
    \gboffi_input:n {#1}
  }

\NewDocumentCommand \mySetSearchPath { m }
  {
    \gboffi_set_search_path:n {#1}
  }
\ExplSyntaxOff

\begin{document}

  \mySetSearchPath{., figures dir 1, {path, with, commas}, figures dir 2}

  \myInputWithSearchPath{fig01}\par
  \myInputWithSearchPath{fig02}\par
  \myInputWithSearchPath{fig03}\par
  \myInputWithSearchPath{fig04}

  % This would print “Package gboffi Error: Can't find file 'non-existent.tex'.”
  % \myInputWithSearchPath{non-existent}

\end{document}

截屏

我允许您替换.tex.pdf_t或任何您想要使用的文件扩展名。涉及两个地方:

  • 在 的定义中\gboffi_input:n,其中 读作\file_if_exist:nT { ##1#1.tex }\file_input:n { ##1#1.tex }

  • 在针对不存在的文件打印的错误消息中:

    \msg_new:nnn { gboffi } { cannot-find-file }
      { Can't~find~file~'\exp_not:n {#1}.tex'. }
    

相关内容