我想将我的.cls
文件重构为本地使用的包。具体来说,我想:
- 将其分成多个文件以便于阅读(关注点分离)。
- 将其作为文档使用
\documentclass{mypackage}
(不是包,通过)。 - 只需一步即可轻松编译,以便在编辑文档时可以并行开发。
我正在看一个定义明确的项目示例,例如希尼奇作为参考实现并注意一些事项。
.dtx
用于将文档与代码合并的文件。build.lua
因为它看起来像是使用版本构建包。install.sh
对于 travisci 来说(对我的情况来说没有必要)。- 单个
.ins
文件,不确定这是做什么用的(“安装程序”)。
根据本维基,创建包大约需要 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?
不确定社区最佳实践是否如此做,希望学习一种好的方法。
其他一些参考实现如下:
- https://github.com/josephwright/siunitx(构建.lua)
- https://github.com/josephwright/beamer(build.lua,这可能是最接近我想要做的)
- https://github.com/raphink/moderntimeline(使用 ruby 进行编译)
- https://github.com/circuitikz/circuitikz(生成文件?)
- https://github.com/alecjacobson/coloremoji.sty(
texhash coloremoji.sty
) - https://github.com/wilbowma/mttex(这
ln -s mttex/*.sty .
似乎使用了动态编译,看起来很简洁:)) - https://github.com/drayside/graphviz.sty(.sty 的 makefile?)
- https://github.com/battlesnake/neural(.麦粒肿)
- https://github.com/astoeckel/smart-thesis(documentclass,使用 makefile)
所以看起来似乎没有真正的标准。答案是如何创建 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
串联。book
report
article
各个包之间存在一些交互,当我在类中编码时,我能够有效地处理这些交互;例如,在某些情况下,代码在两个或多个包中重复,这些包可以作为类中的“公共”包提供。
在开发memoir
代码时,我使用了常规的“LaTeX 包文档工具”(“LaTeX Companion”中的第 14 章)方法。在memoir.dtx
提供注释类代码的文件中,“包”被视为单独的部分(无需调用外部代码)。要更改包,只需编辑相应的部分(在类文件中)。
本质上,我建议不要将代码分散到多个文件中,而是将其全部放在一个文件中,但放在不同的区域。这样,升级时只需要处理一个文件,而不必处理多个文件。