创建 LaTeX3 包/类的最佳实践项目架构

创建 LaTeX3 包/类的最佳实践项目架构

我想将我的.cls文件重构为本地使用的包。具体来说,我想:

  1. 将其分成多个文件以便于阅读(关注点分离)。
  2. 将其作为文档使用\documentclass{mypackage}(不是包,通过)。
  3. 只需一步即可轻松编译,以便在编辑文档时可以并行开发。

我正在看一个定义明确的项目示例,例如希尼奇作为参考实现并注意一些事项。

  • .dtx用于将文档与代码合并的文件。
  • build.lua因为它看起来像是使用版本构建包。
  • install.sh对于 travisci 来说(对我的情况来说没有必要)。
  • 单个.ins文件,不确定这是做什么用的(“安装程序”)。

根据本维基,创建包大约需要 5 个步骤。

  1. 解压文件
  2. 创建文档
  3. 安装文件
  4. 更新索引(计算机上的软件包数据库)
  5. 如果使用任何字体,请更新字体映射

我想以某种方式创建一个工作流程,将此过程简化为单个 cli 命令,这样每当包发生变化时,我只需运行它并刷新我的文档即可。

在其他编程环境(例如 Node.js)中,您可以简单地创建一个包含特定配置文件的文件夹,然后使用节点包管理器的 cli 对其进行符号链接。然后,您只需在项目中导入该包即可,因为它是动态编译的,因此无需编译。

想知道社区对此推荐的方法是什么。所以最后我会有一个类似这样的包结构:

src
src/a.tex
src/b.tex
src/c.tex
index.tex # loads a, b, c perhaps maybe via `\include`
build.sh
install.sh
package.config.something?

不确定社区最佳实践是否如此做,希望学习一种好的方法。

其他一些参考实现如下:

所以看起来似乎没有真正的标准。答案是如何创建 LaTeX 包?更多的是关于乳胶编程和包发布,而不是构建和开发包的工作流程。本维基说你需要创建一个.sty文件,但并非所有上面链接的包都有一个文件,所以似乎没有必要的。这也很有帮助:我应该将自己的 .sty 或 .cls 文件放在哪里,以使它们可供我的所有 .tex 文件使用?

到目前为止我所尝试的基本上是这种 MWE:

CWD := $(shell pwd)
# DIR := $(shell kpsewhich -var-value=TEXMFHOME)/tex/latex/$(NAME)
DIR := $(HOME)/texmf/tex/latex

#
# Install.
#
# NAME=myclass make install
#

install:
  @mkdir -p $(DIR)
  @ln -sf $(CWD)/index.cls $(DIR)/$(NAME).cls
.PHONY: install

#
# Test.
#

test:
  @pdflatex -shell-escape ./test.tex
  @rm ./test.aux ./test.log ./test.out
.PHONY: test

带有index.cls文件:

\NeedsTeXFormat{LaTeX2e}[2018/03/16 My Class]
\ProvidesClass{myclass}
\LoadClass{article}
\RequirePackage{expl3}
\ExplSyntaxOn

test.tex归档:

\documentclass{myclass}
\begin{document}
Hello world.
\end{document}

想知道这是否是一个合适的配置,如果不是,那么最佳实践是什么。

答案1

这也许不是一个答案,而是一个扩展的评论。你没有这么说,但我认为你想要的包不是单独使用的。

我是该类的最初创建者,该类本质上是、和类以及许多包(其中大部分是我以前编写的)的memoir串联。bookreportarticle

各个包之间存在一些交互,当我在类中编码时,我能够有效地处理这些交互;例如,在某些情况下,代码在两个或多个包中重复,这些包可以作为类中的“公共”包提供。

在开发memoir代码时,我使用了常规的“LaTeX 包文档工具”(“LaTeX Companion”中的第 14 章)方法。在memoir.dtx提供注释类代码的文件中,“包”被视为单独的部分(无需调用外部代码)。要更改包,只需编辑相应的部分(在类文件中)。

本质上,我建议不要将代码分散到多个文件中,而是将其全部放在一个文件中,但放在不同的区域。这样,升级时只需要处理一个文件,而不必处理多个文件。

相关内容