Hacky python scripts to simplify LaTeX package writing, in particular the ones at https://git.abstractnonsen.se/latex/latex-packages.
Find a file
2021-12-17 15:34:59 +01:00
base refactor files into better module structure 2021-10-22 14:45:32 +02:00
build fix handling extra header correctly 2021-12-17 15:34:59 +01:00
config handle header correctly, i.e. do not only expand on macro 2021-10-22 19:29:23 +02:00
default_formatters handle package naming style 2021-12-17 15:09:04 +01:00
formatter handle package naming style 2021-12-17 15:09:04 +01:00
macros handle header correctly, i.e. do not only expand on macro 2021-10-22 19:29:23 +02:00
.gitignore format project correctly as python module with corresponding submodules 2021-10-18 15:08:58 +02:00
__init__.py format project correctly as python module with corresponding submodules 2021-10-18 15:08:58 +02:00
LICENSE Initial commit 2021-10-06 18:34:42 +02:00
README.md better readme 2021-10-07 14:27:15 +02:00

PyTeX

Some hacky python scripts to simplify my LaTeX package writing.

Usage

Write packages in .pytex format. The PackageFormatter class will then - given author and name of the package - read in and format the file to produce a ready to use LaTeX package .sty file.

As an example, see the LatexPackages repository where this is used.

Macros

Here is a (possibly incomplete) list of the PyTeX macros currently supported. The examples assume that we create a package called example.sty, written by myself:

macro name explanation example
__HEADER__(< package description>) inserts package header, including license and LaTeX package header \NeedsTexFormat{LaTeX2e}
\ProvidesPackage{mkessler-example}[2021/10/07 - <description>]
__PACKAGE_NAME__ inserts package name mkessler-example
__PACKAGE_PREFIX__ inserts package prefix mkessler@example@
__PACKAGE_MACRO__(<macro-name>) declares internal package macro \mkessler@example@<macro-name>
__FILE_NAME__ inserts package file name mkessler-example.sty
__AUTHOR__ inserts package author Maximilian Keßler
__DATE__ inserts compilation date in format %Y/%m/%d 2021/10/07
__NEW_IF__(<name>,<value>) declares a new LaTeX if \ifmkessler@example@<name>\mkessler@example@<name><value>
__SET_IF__(<name>,<value>) sets the value of a LaTeX if \mkessler@example@<name><value>
__IF__(<name>) starts conditional \ifmkessler@example@<name>
__LANGUAGE_OPTIONS__ inserts default language options \newif\mkessler@example@english\mkessler@example@englishtrue
\DeclareOption{german}{\mkessler@example@englishfalse}
\DeclareOption{ngerman}{\mkessler@example@englishfalse}
\DeclareOption{english}{\mkessler@example@englishtrue}
__LANGUAGE_OPTIONS_X__ inserts default language options with xkeyval \newif\mkessler@example@english\mkessler@example@englishtrue
\DeclareOptionX{german}{\mkessler@example@englishfalse}
\DeclareOptionX{ngerman}{\mkessler@example@englishfalse}
\DeclareOptionX{english}{\mkessler@example@englishtrue}
__END_OPTIONS__ process options and handle wrong options \DeclareOption*{\PackageWarning{mkessler-example}{Unknown '\CurrentOption'}
\ProcessOptions\relax
__END_OPTIONS_X__ process options with xkeyval \DeclareOptionX*{\PackageWarning{mkessler-example}{Unknown '\CurrentOption'}
\ProcessOptionsX\relax
__ERROR__(<message>) output package error \PackageError{mkessler-example}{<message>}
__WARNING__(<message>) output package warning \PackageWarning{mkessler-example}{<message>}
__INFO__(<message>) output package info \PackageInfo{mkessler-example}{<message>}