我花了一些时间使用 LaTeX,所以我决定创建自己的 LaTeX 课程来简化我的序言,顺便学习一些我还没有做过的事情。为了开始,我查找了一些指南:
- Overleaf 指南:创建课程
- cls指南.pdf
- 还有一些 (我忘记保留的)。
但我仍然有几个问题,我认为指南中没有回答这些问题,而且大多数创建课程的人可能都有这些问题,所以我们也可以将它们汇总到一个问题上。我会提出一些问题,您可以随意回答任何您想回答的问题,甚至可以添加一些问题。
问题
- 为什么我应该使用
docstrip
.cls,而不是仅仅编写我自己的 .cls? - 如果我想在课堂上包含一些在stackchange我该如何正确给予信用?
- 如果我只想使用软件包中的某些功能,直接接受命令(使用正确的信用)是否太不礼貌?还是我必须使用整个软件包?
- 当我将我的课程提交给 CTAN 时,它是否可以在 Overleaf 上使用(只需说明
\documentclass{myclass}
不导入 .cls)?如果不能,有什么办法吗? - 我怎样才能使该课程在我的所有计算机上可用,而不关心目录?
@
在类的内部命令中使用该符号是否正确?- 最后,您还有什么建议想提供给这方面的初学者吗?
答案1
我尝试对您的一些问题给出我的意见,并对其他问题给出答案。
docstrip
观点
这其实并不重要。这些docstrip
文件将您的源代码和文档保存在一个文件中。有些人可能会发现这更容易维护。它允许在排版文档中进行格式整齐的实现注释,同时将生产代码精简到最低限度(删除除一些许可内容之外的所有注释,ETC.)。话虽如此,您不必编写文件docstrip
。我自己维护了几个包和三个类(由于范围非常有限/兴趣小组很小,并非所有的包和类都在 CTAN 上)。这些类都没有用 编写docstrip
,但有些(大多数?)包是用 编写的。这实际上只是一个品味问题。
TeX.SX 代码的许可
回答(但我不是律师)
TeX.SX 上的内容是根据 CC BY-SA 许可的,这意味着如果您使用来自此站点的代码,则必须根据相同(或兼容?)许可证共享它,并且您必须说明您从哪里获得代码(或从谁那里获得代码)。通常,在代码中(可能会被删除docstrip
)告诉用户并给出答案的链接就足够了,因此类似于(截至撰写本文时网络上最新的答案):
% code from Mico (https://tex.stackexchange.com/a/627712/117050)
\usepackage{array}
\newcolumntype{P}{>{$\displaystyle}p{0.333\textwidth}<{$}}
话虽如此,我们中的一些人也根据不同的许可证重新授权了他们在这个网站上的代码(在这种情况下,你可以选择你选择的许可证,无论是 CC BY-SA 还是其他)。这些信息可以在个人资料页面或此主题。
从包中挑选
答案/意见
这些软件包都有许可证(通常是 LPPL,有时是其他许可证,您必须检查这一点)。如果许可证允许从软件包中获取代码(无论是否注明出处),您可以从中获取代码。但请记住,您从中派生的代码必须得到维护。这意味着你。过去,这会导致不兼容和错误的包/类。所以我的建议是:在 99% 的情况下,使用整个包是更好的主意。
CTAN 和 Overleaf 准备好了吗?
回答
Overleaf 运行 TeX Live 安装,它会不时更新(每年一到两次,不会保持最新状态)。因此,如果您的课程最终使用 CTAN 并使用自由许可证(如 LPPL),它将在 TeX Live 中结束,并最终找到进入 Overleaf 的方法(但这可能需要一年时间)。
观点
您是否认为您的课程与许多人相关和/或提供了尚未实现的可能性?如果您不回答“是”,请不要将您的包放入 TeX Live(因此不要在 CTAN 上发布它)。TeX Live 已经因为其他课程而变得臃肿不堪,可能只有 2 个人使用。
本地安装 Class
回答
您的主文件夹中应该有一个texmf
文件夹。在其中创建(如有必要)路径<texmf>/tex/latex/<name-of-class>/
并将文件的符号链接(或副本).cls
放入该目录中。
l3build
或者,您可以为您的课程设置该工具,l3build install
只要您的课程处于生产就绪状态,就可以从课程文件夹运行该工具,在本地安装它。然后l3build uninstall
删除本地安装。还l3build
允许单元测试,总之,在我看来,这是一个您应该研究的出色工具。
内部命令
回答
在内部命令名称中使用@
LaTeX 和纯 TeX 约定可能遵循。从技术上讲,没有什么强迫你这样做。但由于 TeX 没有(内置)名称空间,你可以利用这一点来降低冲突的可能性。当我创建新包时,我通常会搜索我的 TeX Live 安装并检查是否有任何以\<pkg-abbreviation>@
(使用grep
或类似工具)开头的命令。如果没有,则成为我所有内部命令的前缀。
另一种可能性是在 LaTeX3 的编程层 ( expl3
) 中进行编码,该层不使用@
名称,而是使用 来构造宏(和变量)名称_
。