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