![从头开始编写类文件并收到“缺少 \begin{document}”错误](https://linux22.com/image/460529/%E4%BB%8E%E5%A4%B4%E5%BC%80%E5%A7%8B%E7%BC%96%E5%86%99%E7%B1%BB%E6%96%87%E4%BB%B6%E5%B9%B6%E6%94%B6%E5%88%B0%E2%80%9C%E7%BC%BA%E5%B0%91%20%5Cbegin%7Bdocument%7D%E2%80%9D%E9%94%99%E8%AF%AF.png)
出于一些原因,我想编写自己的类文件,但我的主要兴趣是更好地理解 LaTeX 及其工作原理。我知道我可能不会需要定义我自己的类来做任何我想做的事情,但我感兴趣的是学习 LaTeX 文档需要从 A 到 Z 的知识,以便正确编译(并且尽量减少脆弱性)。
到目前为止,我找到的用于创建课程的资源似乎遗漏了关键信息。Overleaf 指南似乎表明您只需要\NeedsTeXFormat
和\ProvidesClass
命令即可拥有工作类。通过反复试验,我还发现\normalsize
还需要定义。
我发现的其他资源和示例使用\LoadClass
命令,我确信它复制了常见的设置和命令,使得添加到类中更容易,但我找不到其他资源不做这个。
这是我目前拥有的代码:
%%% myclass.cls %%%
% Required per Overleaf
% https://www.overleaf.com/learn/latex/Writing_your_own_class
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{myclass}[2023/01/31 Version 0.1 by Me]
% Required Font Sizes
\renewcommand{\normalsize}{10pt}
%%% example.tex %%%
\documentclass{myclass}
\begin{document}
Hello World!
\end{document}
这会产生错误:
example.tex:4:LaTeX 错误:缺少 \begin{document}。
我的理解是,类文件中缺少某些内容,导致编译器无法查看example.tex
,但我不确定是什么。搜索此错误会出现很多解决编写不当的软件包或修复初学者错误的结果,但对于如何编写好的包(或者类)。
任何帮助或资源都将不胜感激!
答案1
如果你看一下你的定义\normalsize
:
$ latexdef normalsize
\normalsize:
macro:->\protect \normalsize
\normalsize :
\long macro:->\@setfontsize \normalsize \@xpt \@xiipt \abovedisplayskip 10\p@ \@plus 2\p@ \@minus 5\p@
\abovedisplayshortskip \z@ \@plus 3\p@ \belowdisplayshortskip 6\p@ \@plus 3\p@ \@minus 3\p@ \belowdisplayskip \abovedisplayskip \let
\@listi \@listI
您正在将其更改为文本“10 pt”,当按照格式调用它时\begin{document}
,会创建一个意外的文本,从而导致错误。
答案2
虽然你引用的 Overleaf Guide 看起来相当不错,但我还是喜欢重读“LaTeX 伴侣”以此目的。
首先,它提供了一个很好的结构,我将其作为注释纳入我可能尝试的任何课程中,并且根据上述指南,这对我来说有点不清楚:
% ~~~ identification ~~~~~~~~~
% ~~~ initial code ~~~~~~~
% ~~~ declaration of options ~~~~~~~~~
% ~~~ execution of options ~~~~~~
% ~~~ package loading ~~~~~~~~~~
% === main code ==========
其次,理解/回忆背后的逻辑很重要。根据我的经验,坚持这个顺序可以最大限度地减少麻烦。
第三,它阐明了与包和/或类文件一起使用的特殊命令。