为什么我的 \AtBeginDocument 和 \AtEndDocument 在 .sty 文件中不起作用……?

为什么我的 \AtBeginDocument 和 \AtEndDocument 在 .sty 文件中不起作用……?

我想建立一个类,允许我为老师(完整)和学生(带有空洞而不是文本)输入文档,并使用\ifprof布尔值进行区分。我的宏和文档运行良好:我只需在文档开头放置\proftrue\proffalse即可。我只希望这两个文档在通过 pdflatex 编译结束时一个接一个地放在一个 pdf 中。

.tex所以我设想将我的文档的完整内容保存在.cpy附件中,然后调用它两次,\input{\jobname.cpy}每次前面加上\proftrue\proffalse}。

newfile.sty因此我测试了使用包和环境将内容保存在文件中writeverbatim,这是我的最小文件:

\documentclass{article}

\usepackage{newfile}
\usepackage{lipsum}

\begin{document}

    \newoutputstream{contenu}
    \openoutputfile{\jobname.cpy}{contenu}

    \begin{writeverbatim}{contenu}
        \lipsum[1-2]
        \today
    \end{writeverbatim}

    \closeoutputstream{contenu}

    \input{\jobname.cpy} \newpage
    \input{\jobname.cpy}

    \end{document}

所以我用 pdflatex 编译,效果很好!我的文档包含两次 lorem 和日期,而 test2.cpy 文件只包含 writeverbatim 环境中的内容。

因此,我想创建一个 classetest.cls 类,这样我就不用担心这些代码行保存在文件中并重复我的代码两次,这要感谢 \AtBeginDocument 和 \AtEndDocument :

\NeedsTeXFormat{LaTeX2e} %version de latex utilisée
\ProvidesClass{classetest}[28/06/2020 Classe lycée,V1.0] %Nom de la classe sans le .cls

\LoadClass{article}

\RequirePackage{newfile}

\AtBeginDocument{%

    \newoutputstream{contenu}
    \openoutputfile{\jobname.cpy}{contenu}
    \begin{writeverbatim}{contenu}
    }

\AtEndDocument{%

    \end{writeverbatim}
    \closeoutputstream{contenu}

    \input{\jobname.cpy} \newpage
    \input{\jobname.cpy}

    }

我创建了以下 test2.tex 文件:

\documentclass{classetest}

\usepackage{lipsum}

\begin{document}

\lipsum[1-2]
\today

\end{document}

但在编译时:!扫描时文件已结束,请使用 \next。我怀疑您忘记了... 并且我的 test2.cpy 文件包含:(所有早期的 jibber-jabber 都在一行上)

{[email protected]}{\cs_set_protected:Npn \__color_backend_pickup:N ##1{\exp_last_unbraced:Nx \__color_backend_pickup:w {\current@color } 0 0 0\q_stop ##1}\cs_new_protected:Npn \__color_backend_pickup:w ##1 ##2 ##3 ##4 ##5 ##6\q_stop ##7{\str_if_eq:nnTF {##2}{g}{\tl_set:Nn ##7{gray ##1}}{\str_if_eq:nnTF {##4}{rg}{\tl_set:Nn ##7{rgb ##1 ##2 ##3}}{\str_if_eq:nnTF {##5}{k}{\tl_set:Nn ##7{cmyk ##1 ##2 ##3 ##4}}{\str_if_eq:nnTF {##2}{cs}{\tl_set:Nx ##7{spot \use_none:n ##1 ##5}}{\tl_set:Nn ##7{gray 0}}}}}}}\ifdim \topskip <1sp\global \topskip 1sp\relax \fi \global \@maxdepth \maxdepth \global \let \@begindocumenthook \@undefined \ifx \@listfiles \@undefined \global \let \@filelist \relax \global \let \@addtofilelist \@gobble \fi \gdef \do ##1{\global \let ##1\@notprerr }\@preamblecmds \global \let \@nodocument \relax \global \let \do \noexpand \ignorespaces 

\lipsum[1-2]
\today

\end{document}

我没有看到我的错误。我不知道我想做的事情是否不可能。我搜索过了,但没找到。我只是个普通的厨师,也不是女巫。我不是女巫,不会参与\def\relax\edef。(但我愿意使用它们。)

我认为我应该删除 test2.cpy 文件的第一行和最后一行,但是我该怎么做呢?

翻译www.DeepL.com/Translator(免费版)

相关内容