如果在最近的 LaTeX 中,则在表格中修补 \input

如果在最近的 LaTeX 中,则在表格中修补 \input

我正在尝试实现一种解决方法,以解决使用 将表作为外部文件输入文件中时遇到的错误\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

相关内容