我对使用 LaTeX3 制作包很感兴趣,但是我无法 (a) 找到有关如何为其生成新 dtx 文件的文档,或者 (b) 找到使用 LaTeX3 (可能使用l3doc
) 为包创建 dtx 文件的模板。
是否有一个实用程序(例如dtxgen
LaTeX2e)或 LaTeX3 包的模板?
我所追求的那种事物的一个例子。
当制作 LaTeX 包(例如mynewpackage
)时,我的第一步通常是运行
$ dtxgen mynewpackage.sty
这将创建一个Makefile
and mynewpackage.dtx
(以及其他文件)。默认情况下,它使用 docstrip 并使用类进行ltxdoc
文档记录。这两个都很好,但 LaTeX3 引入了一些变化,包括:
- 用来引入新功能,
l3docstrip
如@@
被替换__<module name>
(来自expl3.pdf
https://www.ctan.org/pkg/l3kernel) - 用途
\ProvidesExplPackage
代替\ProvidesPackage
(来自使用 LaTeX2e 或 LaTeX3 编写新包) - 使用
l3doc
类而不是ltxdoc
(似乎很有意义,因为它支持清楚地记录 LaTeX3 函数)
目前,我无法找到完整的参考资料,其中包含实现完整 LaTeX3 支持所需进行的所有更改。
是否有一个脚本可以生成一个初始 dtx 文件,其中包含针对 LaTeX3 的所有建议更改和/或记录所有必要更改的地方?
答案1
我建议使用一个简单的结构,其中包含:
- 一个或多个
.dtx
文件 - 一个
.ins
文件 README.md
- 文件
CHANGELOG.ms
(参见https://keepachangelog.com/en/1.0.0/) - (可能)
LICENSE
作为 LPPL 的副本(用于例如GitHub)
以及更大的包装
- 单独的
.tex
用户文档 - (如果使用多个
.dtx
文件).tex
将所有代码文档合并为一个 PDF 文件
以该模型为例,.dtx
我建议如下
% \iffalse meta-comment
%
% File: <NAME>.dtx Copyright (C) <YYYY> <AUTHOR>
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
% license or (at your option) any later version. The latest version
% of this license is in the file
%
% https://www.latex-project.org/lppl.txt
%
% This file is part of the "<NAME> bundle" (The Work in LPPL)
% and all files in that bundle must be distributed together.
%
% The released version of this bundle is available from CTAN.
%
% -----------------------------------------------------------------------
%
% The development version of the bundle can be found at
%
% <SOURCE REPO>
%
% for those people who are interested.
%
% -----------------------------------------------------------------------
%
%<*driver>
\documentclass{l3doc}
% The next line is needed so that \GetFileInfo will be able to pick up
% version data
\usepackage{<NAME>}
\begin{document}
\DocInput{\jobname.dtx}
\end{document}
%</driver>
% \fi
%
% \GetFileInfo{<NAME>.sty}
%
% \title{^^A
% \pkg{<NAME>} -- <DESCRIPTION>^^A
% \thanks{This file describes \fileversion,
% last revised \filedate.}^^A
% }
%
% \author{^^A
% <AUTHOR>^^A
% \thanks{^^A
% E-mail:
% \href{mailto:<EMAIL>}
% {<EMAIL>}^^A
% }^^A
% }
%
% \date{Released \filedate}
%
% \maketitle
%
% \begin{documentation}
%
% \end{documentation}
%
% \begin{implementation}
%
% \section{\pkg{<NAME>} implementation}
%
% Start the \pkg{DocStrip} guards.
% \begin{macrocode}
%<*package>
% \end{macrocode}
%
% Identify the internal prefix (\LaTeX3 \pkg{DocStrip} convention).
% \begin{macrocode}
%<@@=<PREFIX>>
% \end{macrocode}
%
% \subsection{Initial set up}
%
% Load the essential support (\pkg{expl3}) \enquote{up-front}.
% \begin{macrocode}
\RequirePackage{expl3}
% \end{macrocode}
%
% Make sure that the version of \pkg{l3kernel} in use is sufficiently new.
% \begin{macrocode}
\@ifpackagelater {expl3}{<MINIMUM DATE>}
{}
{%
\PackageError {<NAME>} {Support package expl3 too old}
{%
You need to update your installation of the bundles 'l3kernel' and
'l3packages'.\MessageBreak
Loading~<NAME>~will~abort!%
}%
\endinput
}%
% \end{macrocode}
%
% Identify the package and give the over all version information.
% \begin{macrocode}
\ProvidesExplPackage {<NAME>} {<DATE>} {<VERSION>}
{<DESCRIPTION>}
% \end{macrocode}
%
% \begin{macrocode}
%</package>
% \end{macrocode}
%
% \end{implementation}
%
% \PrintIndex
在上面,我假设我们有一个源文件(一个较小的包):较大的分割只会加载expl3
一次。
同样,对于较大的来源,我会将@@
惯例分成几个子部分,以便每个部分.dtx
都是独立的。例如https://github.com/josephwright/siunitx举个例子。