我已经尝试了 100 亿条建议,例如使用\usepackage{grffile}
、将文件名包装到{}
和/或""
(以任意组合)。但都不起作用!
所以,我有一个带有路径的文件plots/task-1/ABC123_/qa_pt:0.20-2.00/VtxZ (-10.00, 10.00)/charged; eta (-0.80, 0.80)/FB: 16; eta (-0.80, 0.80)/eff/eta_phi.pdf
,我需要将其包含到beamer
由 LuaLaTeX 编译的演示文稿中(如果它很重要)。
更改路径不是一个选择,我可以没有空格(但不能没有点和下划线),但最好保留它们,并且有多个具有相同名称但不同路径的文件需要使用。
最小非工作示例(找到要包含的任何 .pdf 文件并将其放在路径中):
\documentclass[aspectratio=1610,10pt]{beamer}
\begin{document}
\begin{frame}
\includegraphics{plots/task-1/ABC123_/qa_pt:0.20-2.00/VtxZ (-10.00, 10.00)/charged; eta (-0.80, 0.80)/FB: 16; eta (-0.80, 0.80)/eff/eta_phi.pdf}
\end{frame}
\end{document}
错误:
! Missing $ inserted.
<inserted text>
$
l.10 \end{frame}
?
! Package luatex.def Error: File `plots/task-1/ABC123_/qa_pt:0.20-2.00/VtxZ (
-10.00, 10.00)/charged; eta (-0.80, 0.80)/FB: 16; eta (-0.80, 0.80)/eff/eta_phi
.pdf' not found: using draft setting.
See the luatex.def package documentation for explanation.
Type H <return> for immediate help.
...
l.10 \end{frame}
?
! Missing $ inserted.
<inserted text>
$
l.10 \end{frame}
?
答案1
这在 pdflatex 中有效,但在 luatex 的包含的 lua 部分中失败(这一定是见过的最疯狂的文件名:-)
\documentclass[aspectratio=1610,10pt]{beamer}
\begin{document}
\begin{frame}
\includegraphics{"plots/task-1/ABC123_/qa_pt:0.20-2.00/VtxZ (-10.00, 10.00)/charged; eta (-0.80, 0.80)/FB: 16; eta (-0.80, 0.80)/eff/eta_phi".pdf}
\end{frame}
\end{document}
此版本适用于 lualatex 和 pdflatex
\documentclass[aspectratio=1610,10pt]{beamer}
\begin{document}
\begin{frame}
\includegraphics{eta_phi.pdf}
\end{frame}
\end{document}
为了确保找到文件,请将 plots 目录添加到输入路径,例如此命令行有效:
TEXINPUTS=./plots//: lualatex mainfile
因为(假设是 bash shell)这在本地设置 TEXINPUTS 来搜索下的所有目录plots
如果你真的因为“有趣”的目录路径中重复的文件名而陷入困境,那么这在 lualatex 中确实有效
\documentclass[aspectratio=1610,10pt]{beamer}
\makeatletter
\def\Gread@@pdftex#1{%
\edef\Gin@attr@hash{%
\ifx\Gin@pagebox\@empty
\else
:\Gin@pagebox
\fi
\ifx\Gin@page\@empty
\else
:P\Gin@page
\fi
\ifx\Gin@decode\@empty\else
:D[\Gin@decode]%
\fi
\ifGin@interpolate
:I%
\fi
}%
\@ifundefined{#1 image\Gin@attr@hash}%
{%
\saveimageresource
\ifnum0%
\ifx\Gin@decode\@empty\else 1\fi
\ifGin@interpolate 1\fi
>0 %
attr{%
\ifx\Gin@decode\@empty\else/Decode[\Gin@decode]\fi
\ifGin@interpolate/Interpolate true\fi
}%
\fi
\ifx\Gin@page\@empty\else page \Gin@page\fi
\Gin@pagebox
{\expandafter\zz#1}%
\setbox\@tempboxa=\hbox{\useimageresource\lastsavedimageresourceindex}%
\def\Gin@llx{0}\let\Gin@lly\Gin@llx
\Gin@defaultbp\Gin@urx{\wd\@tempboxa}%
\Gin@defaultbp\Gin@ury{\ht\@tempboxa}%
\expandafter\xdef\csname #1 image\Gin@attr@hash\endcsname
{\useimageresource\the\lastsavedimageresourceindex}%
\expandafter\xdef\csname #1 height\Gin@attr@hash\endcsname
{\the\ht\@tempboxa}%
\expandafter\xdef\csname #1 width\Gin@attr@hash\endcsname
{\the\wd\@tempboxa}%
\Gin@log{%
<#1, %
id=\the\lastsavedimageresourceindex, %
\ifx\Gin@page\@empty\else page=\Gin@page , \fi
\ifx\Gin@pagebox\@empty\else\ifx\Gin@pagebox\GPT@cropbox\else
pagebox=\Gin@pagebox , \fi\fi
\ifx\Gin@decode\@empty\else decode=[\Gin@decode], \fi
\ifGin@interpolate interpolate=true, \fi
\the\wd\@tempboxa\GPT@space x \the\ht\@tempboxa
>%
}%
}{%
\def\Gin@llx{0}\let\Gin@lly\Gin@llx
\Gin@defaultbp\Gin@urx{\csname #1 width\Gin@attr@hash\endcsname}%
\Gin@defaultbp\Gin@ury{\csname #1 height\Gin@attr@hash\endcsname}%
}%
}
\def\zz"#1"{#1}
\begin{document}
\begin{frame}
\includegraphics{"plots/task-1/ABC123_/qa_pt:0.20-2.00/VtxZ (-10.00, 10.00)/charged; eta (-0.80, 0.80)/FB: 16; eta (-0.80, 0.80)/eff/eta_phi".pdf}
% \includegraphics{eta_phi.pdf}
\end{frame}
\end{document}
答案2
要包含该文件,请在您的可预定义文件中写入
\makeatletter
\def\Gin@getbase#1{%
\edef\Gin@base{\filename@area\filename@base}%
\edef\Gin@ext{#1}%
}
\makeatother
这应该是最后的手段。我强烈建议找到一种使用更合理的文件名的方法。
编辑:这样,整个文件看起来应该像这样
\documentclass[aspectratio=1610,10pt]{beamer}
\makeatletter
\def\Gin@getbase#1{%
\edef\Gin@base{\filename@area\filename@base}%
\edef\Gin@ext{#1}%
}
\makeatother
\begin{document}
\begin{frame}
\includegraphics{plots/task-1/ABC123_/qa_pt:0.20-2.00/VtxZ (-10.00, 10.00)/charged; eta (-0.80, 0.80)/FB: 16; eta (-0.80, 0.80)/eff/eta_phi.pdf}
\end{frame}
\end{document}