我最近更新了我的 LaTeX-Distribution,之后发现filecontents
和ltxtable
组合被破坏了。只有一个表格在我的文档中多次加载。后来我发现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
仅当未指定其他选项时,上述两个定义均以默认选项调用原始环境。