\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 纸文章。如果我接下来更改a5paper
为twocolumn
并再次编译,则不会发生任何变化。我收到警告
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}
。