如何使用 LaTeX3 为包创建样板 dtx 文件(类似于 LaTeX2e 的 dtxgen)

如何使用 LaTeX3 为包创建样板 dtx 文件(类似于 LaTeX2e 的 dtxgen)

我对使用 LaTeX3 制作包很感兴趣,但是我无法 (a) 找到有关如何为其生成新 dtx 文件的文档,或者 (b) 找到使用 LaTeX3 (可能使用l3doc) 为包创建 dtx 文件的模板。

是否有一个实用程序(例如dtxgenLaTeX2e)或 LaTeX3 包的模板?


我所追求的那种事物的一个例子。

当制作 LaTeX 包(例如mynewpackage)时,我的第一步通常是运行

$ dtxgen mynewpackage.sty

这将创建一个Makefileand mynewpackage.dtx(以及其他文件)。默认情况下,它使用 docstrip 并使用类进行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举个例子。

相关内容