Skip to main content

A package to author, build, and deploy PreTeXt projects.

Project description

PreTeXt-CLI

A package for authoring and building PreTeXt documents.

Documentation and examples for authors/publishers

Most documentation for PreTeXt authors and publishers is available at:

Authors and publishers may also find the examples catalog useful as well:

We have a few notes below (TODO: publish these in the Guide).

Installation

Installing Python

PreTeXt-CLI requires the Python version specified in pyproject.toml.

To check your version, type this into your terminal or command prompt:

python -V

If your version is 2.x, try this instead (and if so, either replace all future references to python in these instructions with python3).

python3 -V

If you don't have a compatible Python available, try one of these:

Installing PreTeXt-CLI

Once you've confirmed that you're using a valid version of Python, just run (replacing python with python3 if necessary):

python -m pip install --user pretext

(It's also possible you may get an error like error: invalid command 'bdist_wheel' — good news, you can ignore it!)

After installation, try to run:

pretext --help

If that works, great! Otherwise, it likely means that Python packages aren't available on your “PATH”. In that case, replace all pretext commands with python -m pretext instead:

python -m pretext --help

Either way, you're now ready to use the CLI, the --help option will explain how to use all the different subcommands like pretext new and pretext build.

External dependencies

We install as much as we can with the pip install command, but depending on your machine you may require some extra software:

Upgrading PreTeXt-CLI

If you have an existing installation and you want to upgrade to a more recent version, you can run:

python -m pip install --upgrade pretext

Custom XSL

Custom XSL is not encouraged for most authors, but (for example) developers working bleeding-edge XSL from core PreTeXt may want to call XSL different from that which is shipped with a fixed version of the CLI. This may be accomplished by adding an <xsl/> element to your target with a relative (to project.ptx) or absolute path to the desired XSL. (Note: this XSL must only import other XSL files in the same directory or within subdirectories.)

For example:

<target name="html">
  <format>html</format>
  <source>source/main.ptx</source>
  <publication>publication/publication.ptx</publication>
  <output-dir>output/html</output-dir>
  <xsl>../pretext/xsl/pretext-html.xsl</xsl>
</target>

If your custom XSL file needs to import the XSL shipped with the CLI (e.g. pretext-common.xsl), then use a ./core/ prefix in your custom XSL's xsl:import@href as follows:

<xsl:import href="./core/pretext-common.xsl"/>

Similarly, entities.ent may be used:

<!DOCTYPE xsl:stylesheet [
    <!ENTITY % entities SYSTEM "./core/entities.ent">
    %entities;
]>

Note: previously this was achieved with a pretext-href attribute - this is now deprecated and will be removed in a future release.


Development

Note. The remainder of this documentation is intended only for those interested in contributing to the developement of this project. Anyone who simply wishes to use the PreTeXt-CLI can stop reading here.

From the "Clone or Download" button on GitHub, copy the REPO_URL into the below command to clone the project.

git clone [REPO_URL]
cd pretext-cli

Using a valid Python installation

Developers and contributors must install a version of Python that matching the requirements in pyproject.toml.

Using pyenv and poetry (Mac/Linux)

The pyenv tool for Linux automates the process of running the correct version of Python when working on this project (even if you have other versions of Python installed on your system).

Run the following, replacing PYTHON_VERSION with your desired version.

pyenv install PYTHON_VERSION

Then follow these instructions to install poetry.

Then you should be able to install dependencies into a virtual environment with this command.

poetry install

Then to use the in-development package, you can either enter a poetry shell:

pretext --version # returns system version
poetry shell
pretext --version # returns version being developed
exit
pretext --version # returns system version

Or use the runner (as long as you remain within the package directory):

pretext --version             # returns system version
poetry run pretext --version  # returns version being developed

If you run echo 'alias pr="poetry run"' >> ~/.bashrc then restart your shell, this becomes less of a mouthful:

pretext --version     # returns system version
pr pretext --version  # returns version being developed

Steps on Windows

In windows, you can either use the bash shell and follow the directions above, or try pyenv-win. In the latter case, make sure to follow all the installation instructions, including the Finish the installation. Then proceed to follow the directions above to install a version of python matching .pyproject.toml. Finally, you may then need to manually add that version of python to your path.

Updating dependencies

To add dependencies for the package, run

poetry add DEPENDENCY-NAME

If someone else has added a dependency:

poetry install

Syncing untracked updates

Updates to certain files tracked to the repository will need to be rebuilt by each user when pulled from GitHub.

The file pretext/__init__.py tracks the upstream commit of core PreTeXt XSL/Python code we're developing against (from PreTeXtBook/pretext). To fetch these updates from upstream, run:

poetry run python scripts/fetch_core.py

If you instead want to point to a local copy of PreTeXtBook/pretext, try this instead to set up symlinks:

poetry run python scripts/symlink_core.py path/to/pretext

Updates to templates/ must be zipped and moved into pretext/templates/resources. This is done automatically by running:

poetry run python scripts/zip_templates.py

Testing

Sets are contained in tests/. To run all tests:

poetry run pytest

To run a specific test, say test_name inside test_file.py:

poetry run pytest -k name

Tests are automatically run by GitHub Actions when pushing to identify regressions.

Packaging

To check if a successful build is possible:

poetry run python scripts/build_package.py

To publish a new alpha release, first add/commit any changes. Then the following handles bumping versions, publishing to PyPI, and associated Git management.

poetry run python scripts/release_alpha.py

Publishing a stable release is similar:

poetry run python scripts/release_stable.py # patch +0.+0.+1
poetry run python scripts/release_stable.py minor # +0.+1.0
poetry run python scripts/release_stable.py major # +1.0.0

About

PreTeXt-CLI Lead Developers

A note and special thanks

A pretext package unrelated to the PreTeXtBook.org project was released on PyPI several years ago by Alex Willmer. We are grateful for his willingness to transfer this namespace to us.

As such, versions of this project before 1.0 are released on PyPI under the name pretextbook, while versions 1.0 and later are released as pretext.

About PreTeXt

The development of PreTeXt's core is led by Rob Beezer.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pretext-1.0.6.dev20221106.tar.gz (1.3 MB view details)

Uploaded Source

Built Distribution

pretext-1.0.6.dev20221106-py3-none-any.whl (1.3 MB view details)

Uploaded Python 3

File details

Details for the file pretext-1.0.6.dev20221106.tar.gz.

File metadata

  • Download URL: pretext-1.0.6.dev20221106.tar.gz
  • Upload date:
  • Size: 1.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.2.2 CPython/3.8.5 Linux/5.15.0-1022-azure

File hashes

Hashes for pretext-1.0.6.dev20221106.tar.gz
Algorithm Hash digest
SHA256 0bbd9831eeface05d726cb0e55b44e4cda285dc6bcc545b01d5467771e6b715b
MD5 7dd4033fc69004d8aa02d5a7f05e9d80
BLAKE2b-256 77389e6b36e476cfbbffaf23d13df396cb3b52ca47e58f003d8f0918c6fe8cbe

See more details on using hashes here.

File details

Details for the file pretext-1.0.6.dev20221106-py3-none-any.whl.

File metadata

File hashes

Hashes for pretext-1.0.6.dev20221106-py3-none-any.whl
Algorithm Hash digest
SHA256 22cc196e09b6d130ec1608e86012dee9b3d143a8e74c783b0541a5d5d5f18fb3
MD5 5ba64d7605d296ec44015f4678b5cb12
BLAKE2b-256 46545a49fa04b28c8963b264a59eb15fc0f4a4976271c584d56c0fc3404cc659

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page