2019-10-01 之后的 LaTeX

2019-10-01 之后的 LaTeX
\begin{filecontents}{exampleclass.cls}
    \ProvidesClass{exampleclass}
    \DeclareOption{testoption}{\PassOptionsToClass{a5paper}{article}}
    \ProcessOptions\relax
    \LoadClass{article}
\end{filecontents}

\documentclass[testoption]{exampleclass}
\usepackage{lipsum}
\begin{document}
    \lipsum
\end{document}

如果我编译上述代码(使用 XeLaTeX、TeXStudio、Windows),我会得到一篇排版精美的 A5 纸文章。如果我接下来更改a5papertwocolumn并再次编译,则不会发生任何变化。我收到警告

File `exampleclass.cls' already exists on the system.

因此,我猜想cls.创建了一些无法编辑的临时文件。我该如何更改此行为?

答案1

2019-10-01 之后的 LaTeX

LaTeX 内核已扩展其filecontents环境以支持可选参数,请参阅LaTeX 新闻,第 30 期,LaTeX 发布 2019-10-01

如果指定了选项force或其别名overwrite,环境将遵循包的行为filecontents并允许覆盖文件。

示例(不含包装filecontents):

\begin{filecontents}[force]{exampleclass.cls}
...
\end{filecontents}

2019-10-01 之前的 LaTeX

软件包filecontents允许覆盖文件:

\RequirePackage{filecontents}
\begin{filecontents}{exampleclass.cls}
...
\end{filecontents}

LaTeX 内核

LaTeX 内核的原始环境filecontents记录在source2e

环境filecontents用于将包、选项或其他文件的内容与单个文件中的文档一起传递。它有一个参数,即要创建的文件的名称。如果该文件已经存在(可能只存在于当前目录中,如果操作系统支持“当前目录”或“默认目录”的概念),则不会发生任何事情(信息消息除外),并且环境主体将被绕过。否则,环境主体将逐字写入作为第一个参数给出的文件名,以及一些关于它如何生成的注释。

仅在之前允许使用环境,\documentclass以确保在需要时存在此特定运行所需的所有包或选项。开始和结束标记应各自占一行。还有一个星号形式;这不会将额外的注释写入文件。

包裹

包裹filecontents解除限制:

  • 它允许覆盖。
  • 环境变量的放置位置不限于 之前\documentclass。 它也可以放在 前言 中或 之后\begin{document}

相关内容