如何在 LaTeX 类中修补 `\LoadClass` 以更改父类而不修改 .cls 文件?

如何在 LaTeX 类中修补 `\LoadClass` 以更改父类而不修改 .cls 文件?

我目前正在尝试使用 .dtx 文件为我的大学文档开发一些样式。这样做,我将l3doc类用作 dtx 文件的文档对应部分中的文档类。但是,我同时使用 KOMA-Script,使用我生成的 sty 文件中的命令并将其用作未来文档的类,并且我想使用为 dtx 文档本身生成的 sty 文件。

由于l3doc基于article类,默认情况下不提供 KOMA-Script 特定命令。我目前所做的是获取l3doc dtx 文件,并更改\LoadCLass要使用的参数scrartcl

有没有办法在不改变 cls 文件本身的情况下修补该类?

我尝试使用etoolbox\patchcmd,但没有成功。

\makeatletter
  \patchcmd{\LoadClass}
  {article}
  {scrreprt}
  {} ^^A Success code (empty for this example)
  {\@latex@error{Patching \string\LoadClass\space failed}}
\makeatother

参考。https://framagit.org/sortion/mus(看这次提交更具体地说,例如)

我也尝试过,\usepackage{scrextend}但没有成功。

答案1

这种方式无法修补,因为的定义中\LoadClass没有(仅在内部的使用中)。如果 是 ,则可以使用类名参数的测试重新定义并替换它。但有一种更简单的方法:article\LoadClass\LoadClassl3doc.cls\LoadClassscrartcl

koma-script-source-doc.clsIHMO 您想要的正是通过加载scrartcl而不是article使用时完成的ltxdoc

\IfFileExists{scrartcl.cls}{%
  \declare@file@substitution{article.cls}{scrartcl.cls}
  \PassOptionsToClass{fontsize=10pt}{scrartcl}
}{%
  \ClassWarningNoLine{koma-script-source-doc}{%
    Usually this class should be used with KOMA-Script\MessageBreak
    scrartcl. But as that class is not available we use\MessageBreak
    standard class article as emergency fallback.\MessageBreak
    It is recommended to repeat this LaTeX run after\MessageBreak
    build/installation of a complete KOMA-Script%
  }%
}
\LoadClassWithOptions{ltxdoc}[2021/12/07]

重要的代码行是:

\declare@file@substitution{article.cls}{scrartcl.cls}

\declare@file@substitution记录在ltfilehook-doc.pdf

另一个建议是加载scrlfile。它提供了一个命令\ReplaceClass。这也适用于旧版本的 LaTeX。

请注意:我不知道为什么\usepackage{scrextend}在您的情况下使用没有成功。我已测试scrextend在以下情况下加载l3doc

\documentclass{l3doc}

\usepackage{scrextend}

\begin{document}
\dictum{Works}
\end{document}

并且成功了。但也许你的意思是,它scrextend没有提供你想要使用的命令之一。所以下次请更具体一点。

相关内容