我正在尝试实现一种解决方法,以解决使用 将表作为外部文件输入文件中时遇到的错误\input
。以下代码片段可用于此目的:
\IfFileExists{filename}
\ExplSyntaxOn \cs_new:Npn \expandableinput #1
{ \use:c { @@input } { \file_full_name:n {#1} } }
\AddToHook{env/tabular/begin}
{ \cs_set_eq:NN \input \expandableinput }
\AddToHook{env/tabular*/begin}
{ \cs_set_eq:NN \input \expandableinput }
\ExplSyntaxOff
我现在只想在某些计算机上应用它,而不是其他计算机,所以想把它放在里面\IfFileExists
。我不知道这是否是最好的解决方案,但它肯定不起作用:
\documentclass[12pt,fleqn]{article}
\IfFileExists{filename}
{ \ExplSyntaxOn \cs_new:Npn \expandableinput #1
{ \use:c { @@input } { \file_full_name:n {#1} } }
\AddToHook{env/tabular/begin}
{ \cs_set_eq:NN \input \expandableinput }
\AddToHook{env/tabular*/begin}
{ \cs_set_eq:NN \input \expandableinput }
\ExplSyntaxOff}
{}
\begin{document}
\end{document}
如果可能的话,我希望它能发挥作用。其他解决方案也欢迎。例如,用它来\IfFileExists
定义其他变量并将其用作条件的参数是否可行?
答案1
在这种情况下,更好的测试是测试您使用的 LaTeX 格式。如果您至少有 2020-10-01,则可以应用代码,否则什么也不做。您可以使用 进行测试\IfFormatAtLeastTF{2020-10-01}
。
然后,你需要\ExplSyntaxOn/Off
在参数之外写,否则它将不起作用(类似于\makeatletter
)。
代码如下:
\RequirePackage{expl3} % required for compatibility with older releases
\makeatletter
\providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion}
\makeatother
\ExplSyntaxOn
\IfFormatAtLeastTF{2020-10-01}
{
\cs_new:Npn \expandableinput #1
{ \use:c { @@input } { \file_full_name:n {#1} } }
\AddToHook{env/tabular/begin}
{ \cs_set_eq:NN \input \expandableinput }
\AddToHook{env/tabular*/begin}
{ \cs_set_eq:NN \input \expandableinput }
}
{ }
\ExplSyntaxOff