设置新的文件内容环境以进行全局覆盖

设置新的文件内容环境以进行全局覆盖

我最近更新了我的 LaTeX-Distribution,之后发现filecontentsltxtable组合被破坏了。只有一个表格在我的文档中多次加载。后来我发现filecontents已经过时了(filecontents:这个包已经过时了) 与 2019-10-01 版 LaTeX 内核一起提供,现在已成为基本功能。但是,新的默认设置是文件不会被覆盖,可以使用附加选项进行更改\begin{filecontents}[overwrite](filename)

我想知道是否有办法全局更改它而不是每个实例都更改它?

我提供了一个简短的例子来说明当前的问题:

\documentclass{article}
\usepackage{ltxtable}

\begin{document}

 \begin{filecontents}{tmptable}
    \begin{longtable}{l X}
        Table 1 & text 1
    \end{longtable}
\end{filecontents}
\LTXtable{\textwidth}{tmptable}

\begin{filecontents}{tmptable}
    \begin{longtable}{l X}
        Table 2 & text 2
    \end{longtable}
\end{filecontents}
\LTXtable{\textwidth}{tmptable}

\end{document}

答案1

以下简单补丁默认添加了overwrite(或)提供的开关:force

\makeatletter
\let\oldfilec@ntents\filec@ntents
\gdef\filec@ntents{\filec@ntents@overwrite\oldfilec@ntents}
\makeatother

如果上面的方法不合理,可以稍微详细一点。为此,您可以存储旧定义,然后使用以下方法重新定义filecontents和环境:filecontents*environ

在此处输入图片描述

\documentclass{article}

\usepackage{environ}

% Update filecontents environment to overwrite by default
\let\oldfilecontents\filecontents
\let\endoldfilecontents\endfilecontents
\RenewEnviron{filecontents}[2][overwrite]{%
  \begin{oldfilecontents}[#1]{#2}
    \BODY
  \end{oldfilecontents}
}
% Update filecontents* environment to overwrite by default
\expandafter\let\expandafter\filecontentsstar\csname filecontents*\endcsname
\expandafter\let\expandafter\endfilecontentsstar\csname endfilecontents*\endcsname
\RenewEnviron{filecontents*}[2][overwrite]{%
  \begin{filecontentsstar}[#1]{#2}
    \BODY
  \end{filecontentsstar}
}

\begin{document}

\begin{filecontents}{myfile.tex}
File 1
\end{filecontents}

\input{myfile}

\begin{filecontents*}{myfile.tex}
File 2
\end{filecontents*}

\input{myfile}

\end{document}

overwrite仅当未指定其他选项时,上述两个定义均以默认选项调用原始环境。

相关内容