So erstellen Sie mit LaTeX3 eine Boilerplate-dtx-Datei für ein Paket (ähnlich wie dtxgen für LaTeX2e)

So erstellen Sie mit LaTeX3 eine Boilerplate-dtx-Datei für ein Paket (ähnlich wie dtxgen für LaTeX2e)

Ich möchte ein Paket mit LaTeX3 erstellen, kann aber (a) keine Dokumentation zum Generieren einer neuen dtx-Datei hierfür finden und (b) keine Vorlage zum Erstellen einer dtx-Datei für ein Paket mit LaTeX3 (wahrscheinlich mit l3doc).

Gibt es ein Dienstprogramm (wie dtxgenfür LaTeX2e) oder eine Vorlage für LaTeX3-Pakete?


Ein Beispiel für die Art von Dingen, nach denen ich suche.

Wenn ich ein LaTeX-Paket erstelle (z. B. mynewpackage), besteht mein erster Schritt normalerweise darin,

$ dtxgen mynewpackage.sty

Dadurch wird (unter anderem) ein Makefileund erstellt mynewpackage.dtx. Standardmäßig wird Docstrip verwendet und die Klasse ltxdocfür die Dokumentation. Beide sind gut, aber LaTeX3 führt einige Änderungen ein, darunter:

  • Die Verwendung von l3docstripzur Einführung neuer Funktionen, wie z. B. @@ersetzt durch __<module name>(erhalten von expl3.pdfvonhttps://www.ctan.org/pkg/l3kernel)
  • Verwendet \ProvidesExplPackagestatt \ProvidesPackage(erhalten vonNeues Paket mit LaTeX2e oder LaTeX3 schreiben)
  • Verwenden Sie l3docclass anstelle von ltxdoc(erscheint einfach sinnvoll, da es die klare Dokumentation von LaTeX3-Funktionen unterstützt).

Derzeit ist es mir nicht gelungen, eine vollständige Referenz aller Änderungen zu finden, die vorgenommen werden müssen, um die vollständige LaTeX3-Unterstützung zu aktivieren.

Gibt es ein Skript zum Generieren einer ersten DTX-Datei mit allen empfohlenen Änderungen für LaTeX3 und/oder einen Ort, an dem alle erforderlichen Änderungen dokumentiert sind?

Antwort1

Ich empfehle die Verwendung einer einfachen Struktur mit:

  • Eine oder mehrere .dtxDateien
  • Eine .insDatei
  • README.md
  • Eine CHANGELOG.msDatei (siehehttps://keepachangelog.com/en/1.0.0/)
  • (Möglicherweise) LICENSEals Kopie der LPPL (fürz.B(auf GitHub)

und für größere Pakete

  • Eine separate .texBenutzerdokumentation
  • (Bei Verwendung mehrerer .dtxDateien) Eine .texDatei, um die gesamte Codedokumentation in einer PDF-Datei zu kombinieren

Basierend auf diesem Modell .dtxwürde ich Folgendes empfehlen:

% \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

Oben bin ich davon ausgegangen, dass wir eine Quelldatei (ein kleineres Paket) haben: Eine größere Aufteilung würde expl3nur einmal geladen.

Bei größeren Quellen würde ich die Konvention wiederum @@in Unterteile aufteilen, so dass jeder .dtxin sich abgeschlossen ist. Siehe zum Beispielhttps://github.com/josephwright/siunitxzum Beispiel.

verwandte Informationen