filecontents:这个包已经过时了

filecontents:这个包已经过时了

为什么会出现下面的警告?

Package filecontents Warning: This package is obsolete. Disabling it and
(filecontents)                passing control to the filecontents environment
(filecontents)                defined by the LaTeX kernel.
\documentclass[nonatbib]{elsarticle}

\makeatletter
\let\c@author\relax
\makeatother

\usepackage[backend=biber,hyperref=true,doi=false,url=false,isbn=false, uniquename=false, uniquelist=false ]{biblatex}

\usepackage{filecontents,hyperref}
\begin{filecontents*}{\jobname.bib}
@Article{key,
    author =    {author},
    title =     {title},
}
\end{filecontents*}

\addbibresource{\jobname.bib}

\begin{document}
    Lorem ipsum~\cite{key}.
    \printbibliography
\end{document}

答案1

该软件包是对 LaTeX 内核中已存在多年的环境的filecontents扩展。LaTeX 版本的环境不允许在文档序言之外使用它,也不允许覆盖文件。正如其文档中所述,该软件包的目的是解除这两个限制。filecontentsfilecontents

在 2019-10-01 版本的 LaTeX 内核中,filecontents环境发生了变化,上述两个限制不再存在,因此该包的作者 Scott Pakin 使得如果filecontents在新版本的 LaTeX 内核中加载,则包的加载会中止并显示警告(但没有造成任何损害)。

新版本的filecontens环境与旧版本向后兼容:依赖于无法覆盖的环境的旧文档仍将有效。新版本有一个可选参数:

\begin{filecontents}[<options>]{<filename>}

接受名单<options>

  • overwrite:即使文件存在于搜索树中的某个位置,此选项也允许写入目标<filename>。如果没有此选项,则在以下两种情况下不会写入文件:a) 文件存在于当前文件夹中或 b) 文件存在于 TeX 可以找到的某个位置(例如,与包同名的文件)。在任何情况下,\jobname.tex即使overwrite使用了,环境也会拒绝在 上写入。
  • nosearch:此选项将使环境仅在工作目录中搜索可能的文件冲突,因此仅当写入的文件存在于当前文件夹中时才会报告覆盖。
  • noheader:该选项取消标准:

    %% LaTeX2e file `./<filename>'
    %% generated by the `filecontents' environment
    %% from source `test' on 2019/10/08.
    %%
    

    输出文件开头写入的标头。此选项的作用与环境的星号形式相同filecontents*

您可以在 2019-10-01 更新中阅读有关环境变化filecontents和 LaTeX 内核其他变化的更多信息ltnews30

相关内容