![为什么我的 \AtBeginDocument 和 \AtEndDocument 在 .sty 文件中不起作用……?](https://linux22.com/image/417010/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E7%9A%84%20%5CAtBeginDocument%20%E5%92%8C%20%5CAtEndDocument%20%E5%9C%A8%20.sty%20%E6%96%87%E4%BB%B6%E4%B8%AD%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8%E2%80%A6%E2%80%A6%EF%BC%9F.png)
我想建立一个类,允许我为老师(完整)和学生(带有空洞而不是文本)输入文档,并使用\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(免费版)