Skip to content

Latest commit

 

History

History
1481 lines (1203 loc) · 72.2 KB

CHANGELOG.md

File metadata and controls

1481 lines (1203 loc) · 72.2 KB

tectonic 0.15.0 (2024-02-05)

This release contains a grab-bag of nice improvements:

  • The port of Tectonic’s BibTeX engine to a pure-Rust implementation has been completed by @CraftSpider (#1077, #1083, #1127, #1129)! It continues to be the case that this change should be invisible to users, but it shows that large chunks of Tectonic’s legacy C/C++ code can be migrated to cleaner, safer, more maintainable Rust over time.
  • The official Linux builds of Tectonic now link against OpenSSL 3.x, instead of the old 1.1 series (#1092, @pkgw). This should improve binary compatibility on mainstream platforms. If you need a build that uses the older series, you’ll have to compile it yourself.
  • The --web-bundle flag can now be used in more situations, specifically tectonic -X new and tectonic -X init (#1132, @bryango).
  • As part of the above work, you can now activate the "V2" interface with the -X flag in more places on the Tectonic command line.
  • The Tectonic.toml file used by the "V2" interface now supports a [metadata] section for arbitrary structured user metadata (#1120, @rm-dr). This is useful for custom tools that build on top of Tectonic, where you might want to have some custom pieces of information about each document in a group.
  • The "V2" interface also now supports external commands (#1103, @rm-dr). If you have a program named tectonic-blah in your search path, running tectonic -X blah will execute it.
  • Running tectonic -Z help (as opposed to tectonic -Zhelp) now actually works (#1064, #1084, @pkgw).

Build changes:

  • You can now cross-compile Tectonic to the aarch64-unknown-linux-musl target (#1089, @pkgw).
  • MIPS is no longer supported as a build target (#1076, @CraftSpider). It dropped to Tier 3 support by the Rust language, which makes it difficult to support in our continuous integration systems. Sorry, MIPS!

Documentation fixes:

tectonic 0.14.1 (2023-06-15)

This is a bugfix release:

  • @giammirove wins the prize for discovering the first bug in the Rust translation of the BibTeX engine (issue #1054) — no small feat since our test suite includes nearly 8000 ArXiv submissions! Correcting a line of code that resizes an internal buffer fixes the problem (#1055, @CraftSpider).
  • The updated “watch” implementation failed if the path to the Tectonic executable contained whitespace (issue #1003, reported by @m-haug). Proper quoting addresses the issue (#1053, @xinslu).

tectonic 0.14.0 (2023-06-12)

This release features a significant, but hopefully invisible, change: Tectonic’s BibTeX engine has been partially translated from C to Rust (#1032, #1037, #1039, @CraftSpider). The intention is that the engine’s behavior should be completely unchanged, and there are not plans to make any significant alterations in the near future, but this effort demonstrates how Tectonic’s legacy C/C++ code can be migrated to cleaner, safer, more maintainable Rust over time.

There are also a few new features:

  • Add a new --target option to tectonic -X build allowing you to specify which output to build (#1043, @xinslu).
  • Add a new unstable option, -Z deterministic-mode, that turns on some features that help create fully deterministic outputs (#1036, @Mrmaxmeier). These settings aren’t desirable for day-to-day use, but they help create byte-for-byte reproducible outputs for automated testing. This option is part of further work by @Mrmaxmeier to bring the valuable tectonic-on-arXiv testing service back into regular operation.

As well as some developer improvements and bugfixes:

  • Fix some corner-case bugs in the HTML output (#1052, @pkgw).
  • Update the vendored version of Harfbuzz to the latest upstream release, version 7.3.0 (#1042, @pkgw).

Thanks to our new contributor @xinslu and everyone else contributing to this release!

tectonic 0.13.1 (2023-05-22)

  • Fix a bug introduced in the previous release where custom commands in the tectonic -X watch mode broke (reported by @LudvigHz in #1040, fixed by @CraftSpider in #1041).
  • Update the version of the vendored Harfbuzz library to the latest, 7.3.0 (@pkgw, #1042), and a general update of Cargo dependencies

Big thanks to @LudvigHz and @CraftSpider for the prompt report and solution!

tectonic 0.13.0 (2023-05-18)

This release of Tectonic adds some quality-of-life features and improves the project's technical infrastructure in several important ways.

On the infrastructure side:

  • Update many developer dependencies to newer versions (#1033, #1038, @CraftSpider). Namely, md-5 and sha2 are now at 0.10, open is at 4.0, quick-xml is at 0.28, toml is at 0.7, watchexec is at 2.3, and zip is at 0.6. In the test suite, hyper is brought up to 0.14. Many thanks to @CraftSpider for taking on this arduous task!
  • Builds on Windows using cargo-vcpkg to manage vcpkg-based dependencies now default to a custom target triplet named x64-windows-static-release that only builds release executables, significantly speeding up builds (#961, @pkgw). You may need to set an environment variable VCPKGRS_TRIPLET to this value to satisfy the cargo-vcpkg build system.
  • Internally, there were massive updates to the spx2html engine to improve Tectonic's still-experimental support for HTML output (#1016, @pkgw). This support is still not exposed usefully in the main Tectonic program, however. The current work is in support of the prototype Tectonopedia project. Note that these changes break the current version of the tt-weave program, which will need updates to fix up its behavior.
  • There were also many internal code tweaks to satisy the latest versions of cargo clippy.

Thank you to our new contributors @caiogeraldes and @CraftSpider! You will also note that this release marks Tectonic’s 1000th pull-request-or-issue on GitHub. Here’s looking to the next thousand!

tectonic 0.12.0 (2022-10-27)

This release has only a few code updates:

  • Partial support for the dvipdfmx:config special has been added (#953, @vlasakm). This should fix some aspects of PDF generation, including named anchors created by hyperref. Other fixes might help with the attachfile package, although that is awaiting further confirmation.
  • A dumb crash was fixed when attempting to create HTML output with an input that has not been set up for the Tectonic HTML compilation framework (#955, @pkgw). Note, however, that generic documents will still fail to build in HTML mode. The program just won't crash now. As of this release, the only example of working HTML output from Tectonic is the tt-weave system (see below).

More noteworthy are several non-code improvements!

  • A preliminary official build for the Apple Metal platform (aarch64-apple-darwin) is now available (#959, @pkgw). Due to lack of support in the continuous integration system we can't test the build thoroughly, but it appears to work.
  • @KaranAhlawat contributed a how-to guide for using Tectonic in Emacs AucTeX.
  • @mnrvwl has done a fantastic job reviewing our GitHub issues, gathering more information when needed, and closing out ones that have been solved.
  • @pkgw has published XeTeX: A Pseudoprogram, a digital book that derives from Knuth's TeX: The Program. This book is generated from the reference XeTeX code underlaying Tectonic’s typesetting using a new processor called tt-weave. See the book’s preface for more information.

Thank you to all of our contributors!

tectonic 0.11.0 (2022-10-04)

  • Many updates to the experimental, unstable spx2html engine for creating HTML output (#941, @pkgw). They will not be documented here because there are a lot and the aforementioned experimental-ness and instability. This work is in service of the tt-weave demo, which is almost ready for a preliminary release.
  • Add a tweak to the Harfbuzz build script that should hopefully fix builds on macOS against old SDKs, as seen in conda-forge (#944, @pkgw).

tectonic 0.10.0 (2022-10-03)

This release updates Tectonic to support TeXLive 2022.0! There are not many code changes in the engines, so the primary user-visible changes will stem from the many package updates incorporated into the new TeXLive 2022.0 bundle. To switch a preexisting Tectonic document to use the new bundle, update the doc.bundle field in Tectonic.toml to https://data1.fullyjustified.net/tlextras-2022.0r0.tar. Newly-created documents will use this bundle (or subsequent updates) by default.

This release also adds a new “drop-in” installation method. This adds a way to quickly install Tectonic in the popular curl/sh style. On a Unix-like operating system, run:

curl --proto '=https' --tlsv1.2 -fsSL https://drop-sh.fullyjustified.net |sh

... to drop a system-appropriate tectonic binary in the current working directory. On Windows, run the following in a PowerShell terminal:

[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString('https://drop-ps1.fullyjustified.net'))

Other changes:

  • Make it so that running tectonic -Zhelp works (#929, @pkgw). Before it would error out because the argument parser wanted an input filename.
  • Fix -Z continue-on-errors (#917, @vlasakm). This was broken in an earlier refactoring.
  • Add a -Z shell-escape-cwd=<dir> unstable option (#909, @0x00002a). This can work around issues in Tectonic's handing of shell-escape processing, which is very conservative about defaulting to launching programs in a limited environment. In particular, if you set the directory to the document source directory, commands like \inputminted can work.
  • It is possible for one .tex file to generate multiple .aux files. Even if more than one of those files should have triggered its own bibtex run, Tectonic only ran bibtex once. This is now fixed (#906, #907, @Starrah).
  • Give some more context in the error message if an external (shell-escape) tool tries to open a file that's missing (#899, @matz-e).

The known issue relating to OpenSSL 3 is believed to still be relevant:

  • The generic prebuilt Tectonic binaries for Linux are built for the version 1.1 series of OpenSSL. The latest Ubuntu release, 22.04 (Jammy Jellyfish), now targets OpenSSL 3, with no compatibility fallback, which means that the prebuilt binaries won’t run. To run Tectonic on these systems, compile it yourself, use the “semistatic” MUSL Linux builds, or install a package built specifically for this OS. To be clear, there are no actual issues with OpenSSL 3 compatibility — we just need to provide an alternative set of builds. See #892 for updates.

Thank you to everyone who contributed to this release!

tectonic 0.9.0 (2022-04-27)

This release updates Tectonic to correspond with TeXLive 2021.3, jumping forward from the previous sync point of TeXLive 2020.0.

  • The primary user-visible changes will stem from the many package updates incorporated into the new TeXLive 2021.3 bundle. We don't actually have a listing of all of the updates, but they are numerous. To switch a preexisting Tectonic document to use the new bundle, update the doc.bundle field in Tectonic.toml to https://data1.fullyjustified.net/tlextras-2021.3r1.tar. Newly-created documents will use this bundle (or subsequent updates) by default.
  • The XeTeX engine has mostly low-level updates, but there was a significant rework of OpenType math kerning and sub/super-scripting. There is a new \tracingstacklevels integer parameter. See the changelog for the tectonic_engine_xetex Rust crate for more details.
  • The xdvipdfmx engine has numerous updates including improvements for Japanese font fallbacks. See the changelog for the tectonic_engine_xdvipdfmx Rust crate for more details.

Separately, the “GitHub Discussions” feature for the Tectonic repository has been activated:

@pkgw has found himself unable to pay proper attention to the tectonic.newton.cx Discourse service, which has been fairly moribund. The intention is to sunset it.

We have one known issue worth highlighting:

  • The generic prebuilt Tectonic binaries for Linux are built for the version 1.1 series of OpenSSL. The latest Ubuntu release, 22.04 (Jammy Jellyfish), now targets OpenSSL 3, with no compatibility fallback, which means that the prebuilt binaries won’t run. To run Tectonic on these systems, compile it yourself, use the “semistatic” MUSL Linux builds, or install a package built specifically for this OS. To be clear, there are no actual issues with OpenSSL 3 compatibility — we just need to provide an alternative set of builds. See #892 for updates.

Other improvements include:

  • Some TeX packages attempt to read input from external processed using a “pipe” syntax. This capability is not currently implemented in Tectonic. Such uses now trigger a warning (#859, #888, @pkgw).
  • The location of the Tectonic cache is now customizable by setting the TECTONIC_CACHE_DIR environment variable (#884, @wischi-chr). People are encouraged to use the default whenever possible, but flexibility here can be useful in some circumstances.
  • Document the V2 -X flag better in the documentation and CLI output (#877, @clbarnes).
  • Some memory leaks during failed builds have been plugged as part of an ongoing (albeit slow) effort to get it so that Tectonic can be used with modern input fuzzing tools (@pkgw).
  • Allow basic \openin of un-closed \openout files to succeed (#882, @pkgw). This should get hyperxmp working (#862).

tectonic 0.8.2 (2022-03-02)

No code changes here. This release uses the newly-released version 0.1.4 of the pinot font parsing crate, which includes what were previously Tectonic-specific extensions (#870, @pkgw). The "patching" build feature that we were using turned out to break cargo install tectonic. Thanks to @dfrg for prompt follow-up!

tectonic 0.8.1 (2022-02-28)

  • The most important change in this release is a fix for issue #844, wherein due to an implementation oversight Tectonic could obliterate biber input files whose locations were given as absolute paths (#868, @pkgw). This should now be solved.
  • This release also includes improved (i.e., "not broken") handling of biber inputs in subdirectories (#843, #845, @KevoSoftworks)
  • A long-standing issue where outputs could vary slightly from one platform to the next, depending on system-dependent floating-point rounding with PNG images, was fixed (#847, @pkgw).

There are also two big under-the-hood changes that won't make a noticeable difference for now, but lay the groundwork for future work:

  • The internal parameters and definitions of the Tectonic/XeTeX engine are now introspectable thanks to a new crate, tectonic_xetex_format. This crate is now used to emit the C/C++ headers used to compile the engine. It is also able to introspect the "format files" that store engine state, adding the capability to answer questions such as "What are the definitions of all of the control strings defined by this format?" This should enable some really interesting supporting tools in the future!
  • Very preliminary support for native HTML output has been added (#865, @pkgw). This support isn't yet generally useful since it's undocumented and requires a suite of support files that's still being developed, but prototyping indicates that the generated output has promise for very high-quality mathematical rendering. The new tectonic_engine_spx2html crate provides the main new implementation. Hopefully there will be more to report soon!

This release also includes the usual updates to internal dependencies, build and testing infrastructure, and so on.

tectonic 0.8.0 (2021-10-11)

This release fixes a showstopping issue introduced by recent changes to the archive.org PURL (persistent URL) service. All users are advised to upgrade immediately, although it is possible to continue using older releases in some limited circumstances.

By default, Tectonic downloads (La)TeX resource files from the internet as needed. Before this release, Tectonic would query a PURL in order to know where to locate the most recent “bundle” of resource files. On Wednesday, archive.org updated the implementation of its service in a way that interacted catastrophically with the way that Tectonic processes URL redirections. The result was that Tectonic became unable to download any of its resource files, breaking essential functionality. Thanks to @rikhuijzer for providing early reporting and diagnosis of the problem.

This release fixes the redirection functionality (#832, @pkgw), but more importantly it switches from querying archive.org to using a new dedicated webservice hosted on the domain fullyjustified.net (#833, @pkgw). The motivation for this switch is that besides this particular incident, archive.org has had low-level reliability problems in the past, and more important, it is blocked in China, preventing a potentially large userbase from trying Tectonic.

The new URL that is queried is:

https://relay.fullyjustified.net/default_bundle.tar

The redirection is implemented with a simple nginx server defined in the new tectonic-relay-service repo and hosted on Microsoft Azure cloud infrastructure defined in Terraform configuration in the tectonic-cloud-infra repo. @pkgw owns the domain name and Azure subscription.

Along with the above change, this release contains the following improvements:

  • Add the tectonic -X dump V2 CLI command, which runs a partial document build and outputs a requested intermediate file. This can help integrate external tools into a Tectonic-based document processing workflow (#810, @pkgw)
  • Add support for custom support file search directories with the -Z search-path=<path> unstable option (#814, @ralismark)
  • Fix the watch V2 CLI command on Windows (#828, @Sinofine)
  • Fix repeated updates in the watch V2 CLI command (#807, @jeffa5)
  • Fix an incorrect error message when running V2 CLI commands outside of a workspace (#813, @ralismark)
  • Add a more helpful warning if an input produces empty output (#817, @ralismark)
  • Prevent an incorrect warning when reading some kinds of EXIF metadata (#822, @korrat)
  • Reject -Z shell-escape=false, which would be parsed as enabling shell-escape (#823, @ratmice)

tectonic 0.7.1 (2021-07-04)

  • Improve launching of biber by parsing the .run.xml file to find out which resource files are needed. This should hopefully allow Tectonic to process many more documents that use biblatex (#796, #804, @pkgw).
  • Avoid misplaced newlines in warning output (#803, @ralismark).
  • Fix the build on Rust 1.46, which will be helpful for the conda-forge package. We really ought to define and monitor a Minimum Supported Rust Version (MSRV) for Tectonic, but we haven't set that up just yet (#802, @pkgw).

tectonic 0.7.0 (2021-06-19)

This release of Tectonic, at long last, adds support for biber to enable full use of biblatex! Biber is a complex Perl program, so, unlike the other Tectonic “engines,” we can’t practically embed it within the Tectonic program. This means that document builds using biber will have lessened reproducibility and portability, but it’s better to have that than to fail to build the document at all.

Here's a sample document that should now get fully processed:

% adapted from https://tex.stackexchange.com/a/34136/135094:
\documentclass{article}
\usepackage[autostyle]{csquotes}
\usepackage[
    backend=biber,
    style=authoryear-icomp,
    sortlocale=de_DE,
    natbib=true,
    url=false,
    doi=true,
    eprint=false
]{biblatex}
\addbibresource{biblatex-examples.bib}

\usepackage[]{hyperref}
\hypersetup{
    colorlinks=true,
}

\begin{document}

Lorem ipsum dolor sit amet~\citep{kastenholz}. At vero eos et accusam et justo
duo dolores et ea rebum~\citet{sigfridsson}.

\printbibliography
\end{document}

Tectonic’s new support detects a need to run biber by checking for the creation of a file whose name ends in .bcf, and executes the biber program inside a temporary directory, slurping any files that it creates into Tectonic’s virtualized I/O subsystem. We’ll probably need to add a few new “knobs” to allow users to control how and when biber is run — please file an issue if you run into any limitations!

Under the hood, the implementation includes the beginnings of a more generic subsystem for including external tool programs in document builds. This may turn out to be more generally useful going forward.

tectonic 0.6.4 (2021-06-17)

  • Yet another new release to try to fix the docs.rs build. I think this one may get it right.

tectonic 0.6.3 (2021-06-17)

  • Another attempt to fix the docs.rs build.
  • Update Cargo dependencies while we're at it.

tectonic 0.6.2 (2021-06-16)

  • Attempt to fix the i686 Arch Linux package specification
  • Attempt to fix the docs.rs build, hopefully. We might have to try a few different approaches here before we find one that works.

tectonic 0.6.1 (2021-06-15)

  • No code changes; the attempt to publish 0.6.0 to Crates.io failed spuriously, so we're retriggering the release automation.

tectonic 0.6.0 (2021-06-15)

This release adds some helpful new utilities and internal cleanups, which involve breaking API changes (see below).

  • New V2 command tectonic -X show user-cache-dir to print out the location of the per-user cache directory. FAQ, answered! (@pkgw, #786)
  • New V2 command tectonic -X bundle search to print out listings of files contained in the "bundle" of TeX support files. If run in a workspace containing a Tectonic.toml file, the workspace’s bundle is queried; otherwise, the default bundle is queried. (@pkgw, #786)
  • New V2 command tectonic -X bundle cat to print out one of the support files, with the same general behavior as the search command. You could also use this to ensure that a particular file has been loaded into the local cache. (@pkgw, #786).
  • Improved security model regarding the "shell-escape" feature, which has the potential to be abused by untrusted inputs. A new --untrusted argument to the V1 CLI and tectonic -X build disables the use of shell-escape, and any other known-insecure features, regardless of the presence of -Z shell-escape or any other options. Therefore, if you're writing a script that processes untrusted input, if you make sure to run tectonic --untrusted ... you can be confident that further command-line arguments can't undo your sandboxing. Furthermore, if the environment variable $TECTONIC_UNTRUSTED_MODE is set to a non-empty value, the effect is as if --untrusted had been provided. (@pkgw, #787)
  • You know what ... get rid of the "beta" message in the V1 CLI.
  • Fix SyncTeX output, we hope (e.g., #720, #744; @hulloanson, @pkgw, #762). Tectonic's SyncTeX files should now include correct, absolute filesystem paths when appropriate.
  • Fix some broken low-level XeTeX built-ins, reported by @burrbull (@pkgw, #714, #783)

A few more more words on the security model: the terminology is a bit slippery here since we of course never intend to deliver a product that has security flaws. But features like shell-escape, while providing useful functionality, can certainly be abused to do malicious things given a hostile input. The default UX aims to be conservative about these features, but if a user wants to enable them, we'll allow them -- in the same way that Rust/Cargo will compile and run build.rs scripts that in principle could do just about anything on your machine. Our main security distinction is therefore whether the input is trusted by the user running Tectonic. The decision of whether to "trust" an input or not is something that fundamentally has to be made at a level higher above Tectonic itself. Therefore the goal of Tectonic in this area is to provide the user with straightforward and effective tools to express that decision.

For developers, this release adds two new Cargo crates to the Tectonic ecosystem: tectonic_docmodel, allowing manipulation of Tectonic.toml files and their related data structures; and tectonic_bundles, allowing manipulation of the Tectonic support file bundles. In both cases, third-party tools might wish to use these formats without having to pull in all of the heavyweight dependencies of the main tectonic crate. And in both cases, the separation has led to many API improvements and cleanups that greatly improve the overall code structure. These changes break the API of the tectonic crate by removing some old modules and changing the particular traits and types used to implement these systems. (@pkgw, #785, #786)

tectonic 0.5.2 (2021-06-08)

  • Update dependencies, including watchexec. We believe that this should fix the issues with the official Windows executables that have been reported (#780, #782, @pkgw)

tectonic 0.5.1 (2021-06-07)

Note: we have reports that the official 0.5.0 Windows executables don’t work, or don’t always work (#780). This is under investigation but hasn’t been addressed yet.

  • No code changes to the main crate
  • Update the Arch Linux specification files to comply better with guidelines (#779, @lmartinez-mirror)

tectonic 0.5.0 (2021-06-06)

This is an exciting release! After literally years of requests, Tectonic now supports the TeX “shell escape” mechanism required by some packages like the minted code highlighter (#708). This is chiefly thanks to @ralismark who put in the work to deliver a solid implementation and track ongoing changes to the Tectonic backend. Thank you, @ralismark!

Shell-escape remains disabled by default because it is, frankly, a hack that detracts from the reproducibility and portability of document builds. It also has significant security implications — you should never process untrusted input with shell-escape enabled. But in those cases where shell-escape is necessary, you can activate it with an unstable option in the “V1” command-line interface:

tectonic -Z shell-escape my-shell-escape-document.tex

In the “V2” model, you can activate shell-escape by adding the following line to one or more [output] sections in your Tectonic.toml file:

[output]
name = 'default'
type = 'pdf'
shell_escape = true  # <== add this

The other major change associated with this release is for developers. The Tectonic implementation has now been split into a number of specialized Rust crates, each focusing on a specific piece of the overall Tectonic functionality. Besides helping clarify and organize the large amount of code that goes into Tectonic, this will make it easier for developers to create Tectonic-based tools that use part of the codebase without having to depend on every piece of it.

This change was made possible by adopting a new release automation tool called Cranko that project lead @pkgw created last summer. Cranko is based on a novel “just-in-time versioning” release workflow and extensive use of Azure Pipelines continuous integration and deployment services — together these make it feasible to manage versioning and releases of the 20 different crates that now live within the Tectonic monorepo. This may not sound like the most exciting kind of code to write, but Cranko has made it possible to almost entirely automate the Tectonic release processes in a way that’s been nothing short of transformative.

This change comes with a bit of a downside, in that there have been a lot of API breaks in the tectonic crate, as numerous internal APIs have been improved and rationalized. If you only use the tectonic::driver module, changes should be minimal, but lots of support systems have changed. It is likely that there will be additional breaks in subsequent releases as a few remaining subsystems are split out. The good news is that the APIs in the new sub-crates should be much better designed and better documented than many of their former incarnations in the main crate.

There’s the usual collection of smaller improvements as well:

  • If a document referenced a filename that corresponded to a directory that lived on the filesystem, you could get a hard-to-interpret error. Now, directories are ignored when looking for files. (#754, #759, @pkgw)
  • A floating-point precision issue was fixed that broke the reproducibility of builds on 32-bit versus 64-bit systems (#749, #758, @pkgw)
  • Fix potential undefined behavior in the tectonic_xdv crate reported by @sslab-gatech (#752, #753, @pkgw)
  • Add the ability to customize the preamble, postamble, and index files in V2 documents (#745, #746, @jeffa5)
  • Add a V2 tectonic -X watch command to auto-rebuild documents when their source files get updated (#719, #734, @jeffa5)
  • Add an --open option to tectonic -X build to open the document(s) after the build finishes (#109, #733, @jeffa5)
  • The usual updates to dependencies, build fixes, and documentation tweaks

tectonic 0.4.1 (2021-01-03)

  • Add support for aarch64-apple-darwin when building with vcpkg
  • Prototype release automation infrastructure to update the new tectonic-bin AUR package.

tectonic 0.4.0 (2020-12-28)

  • Introduce a prototype new “V2” command line interface, accessible by running Tectonic with an initial -X argument: tectonic -X new. This interface is oriented around a new document model defined by a Tectonic.toml definition file. Documentation is under development in the book. Eventually, this new interface will become the default, after a migration period. It is currently fairly basic, but will be fleshed out in the 0.4.x release series.
  • Handle USV 0xFFFF in print() (#678, #682, @burrbull, @pkgw)
  • Update the Arch Linux makedepends definitions (#691, @snowinmars)
  • Update various Cargo dependencies.

tectonic 0.3.3 (2020-11-16)

  • When testing whether the engine needs rerunning, compare the new file to the entire old file, not just the part that was read by the engine. Should fix unnecessary reruns in some less-common cases. (#679, #681, @pkgw)

tectonic 0.3.2 (2020-11-14)

  • Slightly alter how some filenames are looked up. Before, if the TeX code requested a file whose name contained an extension, e.g. foo.bar, if no such file was available in the bundle we gave up immediately. Now we also check for foo.bar.tex and friends. This fixes the lipsum package in TeXLive 2020.0 (#669, #680, @pkgw), and quite possibly some other miscellaneous packages as well.

tectonic 0.3.1 (2020-11-02)

  • Fix compilation on Windows/MSVC (sys/time.h is not available)
  • Don't print an empty error: line in the CLI (#665, #670)

tectonic 0.3.0 (2020-11-01)

The 0.3 series updates the core Tectonic engines to align with the code in TeXLive 2020.0. The default “bundle” of support files will soon be updated to match TeXLive 2020.0 as well. Standard usages should work if you use an older version of Tectonic with the new bundle, and vice versa, but we recommend that you update your installations to the 0.3 promptly if you can.

This release introduces a straightforward but breaking change to the API of the tectonic Rust crate, documented below.

For context, Tectonic’s core TeX implementation is forked from the XeTeX engine. Accumulated changes to XeTeX are periodically reviewed and imported into Tectonic, a process that must be done manually because Tectonic’s modernized developer and user experiences demand a huge amount of customization. (The scripts to support the first stage of this process may be found in the tectonic-staging repository.) It has been a while since the last synchronization, but this release incorporates the new changes introduced between the last update and the release of TeXLive 2020.0.

The changes for TeXLive 2020.0 include:

  • New low-level primitives including \filemoddate, \filedump, \uniformvariate, \elapsedtime, and a few others.
  • Tweaks to how font design sizes are mapped to TeX values
  • New magic numbers used in PDF last x/y position accounting, instead of cur_[hv]_offset.
  • Don't print_raw_char in show_context with trick_buf
  • Back up cur_cs in scan_keyword and compare_strings.
  • Handle XETEX_MATH_GIVEN in scan_something_internal
  • If encountering an unexpandable primitive in scan_something_internal, try to deal with it. Ditto for scan_int.
  • Do something different with active characters in str_toks_cat
  • Rework how file names are scanned.
  • Defend against undefined eTeX registers in main_control
  • Some uc_hyph tweak deep in the linebreaking algorithm

There are also numerous changes in Tectonic’s included xdvipdfmx.

The implementation of the \filemoddate API required a breaking change to the API of the tectonic Rust crate:

  • We needed to add more data to the data structures of the MemoryIo provider. Migration should be pretty easy: instead of files containing a bunch of Vec<u8>s, it now contains a bunch of MemoryFileInfo structs that contain a Vec<u8> field named data. So you just need to add some .data field accessors to existing code. This API clearly needs some polish to allow greater stability going forward.

Other changes:

  • Issue a warning if xdvipdfmx needs to translate a VF font to PK format, which is unimplemented in Tectonic (it relies on mktexpk) and so causes failures on certain documents that work with XeTeX.
  • The Windows vcpkg-based build is temporarily disabled, as vcpkg currently has a debilitating issue relating to SSL on Windows.
  • There is a new -Z continue-on-errors unstable option that tells the engine to emulate the classic TeX style of plunging on ahead even in the face of severe errors. This is a nice example of the possibilities unlocked by the new -Z infrastructure introduced in 0.2!

tectonic 0.2.0 (2020-10-21)

The 0.2 series finally adds "unstable" -Z flags! These allow you to configure engine options that are relatively low-level. The hope is to eventually set these kinds of things in a Tectonic.toml file, so their use is mildly discouraged, and long-term availability is not guaranteed. But there are plenty of times when such flags can be helpful. The currently supported options are:

  • -Z min-crossrefs=<num> controls the -min-crossrefs option of standalone bibtex
  • -Z paper-size=<spec> lets you control the output paper size, rather than hardcoding it to be US Letter.

Enormous thanks to @ralismark for finally implementing this! (#657) Now that the infrastructure is in place, suggestions for additional flags are more than welcome.

tectonic 0.1.17 (2020-10-13)

  • Fix source-based installation by updating to cbindgen 0.15, after later releases in the 0.14 series were yanked (@qtfkwk, #656)
  • Fix unreachable code in the CID/Type0 code (@burrbull, @pkgw, #639, #646)
  • Update the cargo vcpkg build process to use a newer version of vcpkg, fixing Windows builds when msys2.org is unreliable (@pkgw).

tectonic 0.1.16 (2020-10-02)

  • Add a "plain" backend for reporting status, used when the program is not attached to a TTY. It will print out reports with colorization. (#636, @ralismark)
  • Start adding infrastructure to automate the creation of bindings from the C/C++ code to the Rust code, using cbindgen. (#643, @ralismark)
  • Update the code-coverage infrastructure to gather coverage information from invocations of the CLI executable inside the test suite (@pkgw)
  • Fully automated deployment should really actually totally work this time.

tectonic 0.1.15 (2020-09-10)

  • Building on the work done in 0.1.13, we now capture and report diagnostics nearly everywhere! Great work contributed by @ralismark (#635).
  • Yet more revisions to the automated deployment system. Maybe this will be the time that it all works (@pkgw, #637).

tectonic 0.1.14 (2020-09-08)

  • No code changes from 0.1.13. Just trying to iron out some of the automated deployment systems. Is this the time that the Arch Linux auto-deployment finally works??

tectonic 0.1.13 (2020-09-07)

It has once more been a long time since the last release. But this new release features a move to a new release automation framework, Cranko, which is intended to promote a more aggressive release policy going forward. Cranko is the result of a lot of careful thinking and design — resulting in a scheme called just-in-time versioning — and it should offer a tractable and low-friction framework for making releases even when there are many crates in one repository.

User-facing improvements:

  • Select core TeX warnings — notably, over/underfull boxes — are now surfaced as Tectonic warnings, and not just reported in the detailed log files! The infrastructure is now available to capture many more such warnings as needed. (#625; @ralismark, @pkgw)
  • Fix a few algorithmic mistakes introduced in manual editing of the C code. Great catches by @burrbull! (#617, #624)
  • Improve log formatting with backticks around filenames and human-friendly file sizes (#539; @as-f)
  • Fix segfaults (!) upon errors (#579, #606; @fmgoncalves)
  • Default bibtex's min_crossrefs to 2, not 0 (#534; @jneem)
  • Help debug "lost characters" with their detailed hex codes (#600; @pkgw)

Developer-facing improvements:

  • CI system has been completely revamped to use Cranko and route entirely through Azure Pipelines. Maintainability should be massively improved (@pkgw)
  • Releases should now include pre-built binaries for a variety of architectures (@pkgw).
  • Switched to app_dirs2, since app_dirs is unmaintained (#620; @kornelski)
  • Enable reproducible-ish builds through cargo vcpkg (#593; @mcgoo)
  • Update to the 0.9 series of the rust-crypto packages (#596; @pkgw)
  • Attempt to fix automated Arch Linux build (#587; @thomaseizinger)
  • Fix a memory leak (#536; @elliott-wen)
  • The usual large number of dependency updates with DependaBot.

0.1.12 (2019 Dec 6)

It has been just more than a year since the last Tectonic release, mainly because I (@pkgw) started a new job that has massively restructured how I spend my time. But that is not to say that things have been quiet for Tectonic! I count 81 pull requests merged since 0.1.11. (Ignoring automated ones issued by Dependabot.)

User-facing improvements:

  • Thanks to @efx we now have the beginnings of a Tectonic book! It is currently very sparse, but we hope to gradually flesh it out. The book is updated automatically upon merges to master and with tagged releases as well (if @pkgw wired up the infrastructure correctly). (#427, #444, #445, #447, #505; @efx @PHPirates @pkgw)
  • Tectonic’s caching scheme is now much smarter, saving a local copy of the table-of-contents file associated with each online bundle. This means that Tectonic doesn’t need to hit the network at all if a new file is referenced that is not present in the bundle, and saves a large download if a new needed file is present in the bundle. (#431; @rekka)
  • Performance has been improved by avoiding the computation of SHA256 hashes for read-only files. Since these files are known not to change, we don’t have to monitor their contents. (#453; @rekka)
  • Warnings are only flagged if they occur on the final pass of the TeX engine, since sometimes ones that occur in the first pass get fixed by subsequent reruns. (#458; @rekka)

There have been a ton of developer-facing improvements:

  • Tectonic is now built using the Rust 2018 edition! (#388; @Mrmaxmeier)
  • @Mrmaxmeier built an amazing system to start doing crater-like runs of Tectonic on the arxiv.org corpus, yielding bug fixes across the codebase including issues with obscure PNG formats. (#401; @Mrmaxmeier)
  • It is now possible to build various statically-linked versions of Tectonic. One way to accomplish this is to turn off the new serialization Cargo feature. This eliminates the use of Rust “procedural macros” in the build process which in turn allows Tectonic to be built on statically-linked platforms. (Note, however, that it is possible to build Tectonic for statically-linked platforms with the serialization feature by cross-compiling it from a dynamically-linked platform. This is the tactic used by the Tectonic CI build system.) @efx also wrote instructions for how to accomplish a mostly-static build on macOS using vcpkg as well as how to do it on Linux/musl using Docker (#260, #261, #325, #425, #451; @efx, @malbarbo, @pkgw)
  • Tectonic now distributes a continuous-deployment AppImage build. (#283, #285; @pkgw, @probonopd, @xtaniguchimasaya)
  • The size of the binary has decreased somewhat by using a smaller collection of compression libraries; avoiding the use of exceptions and RTTI in the compiled C++ code; avoiding the use of the aho_corasick crate; and making the toml crate optional. (#428, #439, #440, #491; @malbarbo)
  • Tectonic now uses the reqwest crate as its HTTP backend instead of direct use of hyper. Reqwest offers a simpler interface and adds better support for things like HTTP proxies and cookie handling. These new features do increase the binary size somewhat. (#330, @spl)
  • Tectonic can now be built on x86_64-pc-windows-msvc by using vcpkg to discover dependent libraries. This can be activated by setting the new environment variable TECTONIC_DEP_BACKEND=vcpkg during the build process. (#420; @mcgoo)
  • Potential issues with cross-compilation are fixed by properly respecting CARGO_TARGET_* environment variables rather than using cfg!() macros, which have the wrong values in the build.rs script. This support is provided by a new tectonic_cfg_support crate that may be of interest to other projects. (#477; @pkgw @ratmice)
  • Tectonic now comes with beta-level fuzzing support using cargo-fuzz. It is hoped that eventually this infrastructure will help identify and close some truly obscure and gnarly bugs in the Tectonic language implementation. At present, the usefulness of the fuzzer is limited by memory leaks within multiple reruns of the Tectonic engine, although in the process of setting up the fuzzer several egregious leaks were fixed. (#315; @cyplo @pkgw)
  • The Rust codebase is now formatted according to rustfmt and generates no clippy complaints, and the CI system now checs for these. (#282, #336, #337, #338, #339, #340, #341, #342, #343, #344, #345, #346, #347, #348, #349, #352, #353; @pkgw @spl)
  • A new profile feature allows building a debug version of the program suitable for profiling. (#511; @ratmice)
  • The test suite now covers the bibtex tool. (#407; @Mrmaxmeier)
  • The test suite also now covers the local cache and tar bundle code. (#441; @rekka)
  • The CLI client now parses arguments using the structopt crate. (#465, #474; @efx @Mrmaxmeier)
  • A new DirBundle bundle backend provides a simple way for the engine to access a bunch of files in a directory, although it is not yet wired up to the CLI interface in a convenient way. (#492; @malbarbo)
  • The current date tracked by the TeX engine is now settable from the Rust level. (#486; @Mrmaxmeier).
  • More cleanups and symbolification of the C/C++ code (#317, #327, #350, #398; @Mrmaxmeier @pkgw @spl)
  • C++ compilation on certain versions of g++ was fixed (#265; @pkgw)
  • Fix deprecation warnings from the error_chain crate (#351; @spl)
  • Improvements to the Travis CI infrastructure, output clarity, and reliability. (#354, #360, #362, #394, #424, #443; @efx @rekka @spl)
  • Attempts were made to increase the reliability of the Circle CI build, which uses QEMU to compile Tectonic for a big-endian architecture. Unfortunately it still just times out sometimes. (#290, #296; @pkgw)
  • The deprecated tempdir crate has been replaced with tempfile. (#387; @ratmice)
  • Usage of app_dirs directories is now encapsulated better. (#429, #432; @malbarbo @rekka)
  • Bugs in reading unusual PDF files were fixed. (#396; @pkgw)
  • A missing space in bibtex error messages is now back. (#485; @jneem)
  • A memory corruption issue in the bibtex engine was fixed. (#493; @jneem)

0.1.11 (2018 Nov 5)

This release is mainly about the following change:

  • The URL embedded in the code that points to the default bundle has been changed to point to the archive.org domain. Hopefully this will result in more reliable service — there have been problems with SSL certificate updates on purl.org in the past (#253).

Developer-facing improvements:

  • The main crate now provides an all-in-one function, tectonic::latex_to_pdf(), that does what it says, using “sensible” defaults. Run a full TeX processing session, end-to-end, in a single function call! (#252)
  • In support of the previous change, the behavior of the Rust code was changed to use a static global mutex to serialize invocations of the C/C++ engine implementations, which currently include massive amounts of global state and thus cannot be run in a multithreaded fashion. The recommended approach used to be for users of the library to provide such a mutex themselves. @pkgw was initially reluctant to include such a mutex at the crate level since he feared the possibility of weird surprising behavior … but the real weird surprising behavior is when you try to run the engine in a multithreaded program and it blows up on you!
  • Also in support of the previous change, the framework for running the test suite has been revamped and improved. We can now run doctests that invoke the full engine, and the tests of the executable artifacts now activate a special debug mode that prevents accesses of the network and/or the calling user’s personal resource file cache.
  • The usual work on tidying the C/C++ code, and also more work towards the planned HTML output mode. Activating the experimental “semantic pagination” mode now alters the engine behavior in two key ways: it disables the linebreaker and custom output routines. This breaks processing of all extant documents, but @pkgw believes that these changes are important steps toward reliable generation of HTML output. (#237, #239, #245, #250)

0.1.10 (2018 Sep 28)

This release is mainly about upgrading a dependency related to SSL/TLS to increase the range of systems on which Tectonic can be compiled.

User-facing improvements:

  • Tectonic now correctly handles Unicode filenames — even ones containing emoji! — without crashing (#165).

Developer/packager-facing improvements:

  • Tectonic now depends on the 0.3.x series of hyper-native-tls, which can build against the 1.1.x series of OpenSSL.

0.1.9 (2018 Sep 15)

User-facing improvements:

  • Tectonic is now available on Windows! (#210, #231). There are likely to be rough edges to both the developer and user experience, but the test suite passes and Windows is now included in the CI infrastructure. Big thanks to new contributor @crlf0710 who really got the ball rolling on this important milestone.
  • Fully offline operation is now much improved:
    • There is a new --only-cached (AKA -C) option that will avoid all Internet connections (#203). While Tectonic takes pains to avoid needing an Internet connection when compiling documents, there are still times when you can get more done by explicitly preventing it from even trying to talk to the network.
    • The --bundle and --web-bundle options finally work again. The switch to on-the-fly generation of format files broke them due to an internal implementation problem; this has now been fixed ([#181).
    • If you put a file:// URL into your Tectonic configuration file as your default bundle, Tectonic will now load it correctly (#211).

Internal improvements:

  • Tectonic now avoids panicking from Rust into C code, which is not supported behavior (#91). Thanks to @rekka for persistence in getting this one across the finish line.
  • Tectonic now avoids crashing when trying to open empty filenames (#212).

Developer-facing improvements:

  • Tectonic is now more up-front about the fact that it requires Harfbuzz version 1.4 or higher.
  • Much of the code that drives compilation for the CLI tool has been moved into the Tectonic library and has been made (more) reusable (#184). Thanks to new contributor @jneem for doing this!

0.1.8 (2018 Jun 17)

This release contains a variety of bugfixes and features-in-development.

User-facing improvements:

  • A prominent warning is now emitted when missing characters are encountered in a font. The hope is that this will help un-confuse users who include Unicode characters in their input files without loading a Unicode-capable font. Before this change, such characters would just not appear in the output document.
  • Fix the implementation of the DVI “POP” operator, which was broken due to a typo. This should fix various corner-case failures to generate output.
  • The .toc and .snm output files emitted by Beamer are now treated as intermediate files, and therefore not saved to disk by default (contributed by Norbert Pozar).
  • Various hardcoded bibtex buffer sizes are increased, allowing larger bibliographies to be handled.
  • Format files are now stored uncompressed. The compression did not save a ton of disk space, but it did slow down debug builds significantly (contributed by @Mrmaxmeier).
  • The C code has been synchronized with XeTeX as of its Subversion revision 46289. The chief difference from before is the use of newer Harfbuzz features for rendering OpenType math fonts, which should substantially improve “Unicode math” output.

Work towards HTML output:

  • The first steps have been taken! In particular, the engine now has an internal flag to enable output to a new “SPX” format instead of XDV. SPX stands for Semantically Paginated XDV — based on my (PKGW’s) research, to achieve the best HTML output, the engine will have to emit intermediate data that are incompatible with XDV. At the moment, SPX is the same as XDV except with different identifying bytes, but this will change as the work towards excellent HTML output continues. The command-line tool does not provide access to this output format yet, so this work is currently purely internal.
  • In addition, there is a stub engine called spx2html that will translate SPX to HTML. At the moment it is a barely-functional proof-of-concept hook, and it is not exposed to users.
  • A new internal crate, tectonic_xdv, is added. It can parse XDV and SPX files, and is used by the spx2html engine.

Test suite improvements:

  • The test suite now supports reliable byte-for-byte validation of PDF output files, through the following improvements:
    • It is now possible for the engine to disable PDF compression (contributed by @Mrmaxmeier).
    • xdvipdfmx gained a mode to reproducibly generate the “unique tags” associated with fonts.
  • The testing support code is now centralized in a single crate (contributed by @Mrmaxmeier).
  • Continuous integration (CI) coverage now includes Linux and a big-endian platform.
  • The CI coverage now includes code coverage monitoring.

Internal improvements:

  • Much of the command-line rebuild code has been moved inside the tectonic crate so that it can be reused in a library context (contributed by @jneem).

Improvements to the C code. As usual, there has been a great deal of tidying that aims to make the code more readable and hackable without altering the semantics. Many such changes are omitted below.

  • Tectonic’s synchronization with XeTeX is now tracked in version control formally, by referencing the tectonic_staging repository as a Git submodule. It is not actually necessary to check out this submodule to build Tectonic, however.
  • The C code now requires, and takes advantage of, features in the C11 revision of the language standard.
  • All remaining pieces of C code that needed porting to the Rust I/O backend have been ported or removed.
  • Virtually all hardcoded strings in the string pool have been removed (contributed by @Mrmaxmeier).
  • The C code has been split into a few more files. Some subsystems, like the “shipout” code, use a lot of global variables that have been made static thanks to the splitting.
  • A big effort to clarify the pervasive and unintuitive memory_word structure.
  • Effort to tidy the line_break() function and significantly increase its readability. This is in support of the goal of producing HTML output, for which I believe it is going to be necessary to essentially defuse this function.

0.1.7 (2017 Nov 15)

(Copy-pasted from the relevant forum post).

This is a fairly modest release — things have been very quiet lately as real life and the day job have dominated my time.

The most visible change is that I just figured out how to fix issue #58 — Tectonic would fail to parse certain PDF images if one tried to include them in a document. There was a bit of a silly bug in the Rust I/O layer that was not getting exposed except in fairly specialized circumstances. It’s squashed now! So certain documents that used to fail to compile should work now.

There’s also been yet more nice work behind the scenes by some of our indefatigable contributors:

  • @Mrmaxmeier contributed a whole bunch of cleanups to the C code as well as fixes that should allow you to generate multiple PDFs inside a single process.
  • Ronny Chevalier updated the compilation infrastructure to work in parallel and in the end contributed some features to Rust’s upstream [gcc] crate!

There have been intermittent problems lately with the SSL certificate to the purl.org domain which we use to seed the default “bundle” of LaTeX files. It’s working for me at the moment, so it’s not totally busted, but the problem seems to have come and gone over the past few weeks. See this thread for more information and a workaround.

0.1.6 (2017 Jul 9)

(Copy-pasted from the relevant forum post).

The version increment may be small but the project has seen an enormous amount of work since the previous release, thanks to an awesome group of new contributors. Here are some of the highlights:

  • Tectonic is now available for installation on Arch Linux as an AUR package and on macOS as a Homebrew formula, thanks to the hard work of Alexander Bauer, Alexander Regueiro, Jan Tojnar, Kevin Yap, and @ilovezfs.
  • The web fetching is more robust and safer, using HTTPS by default (#69, Ronny Chevalier) and more properly handling CDN redirections (#114, @Mrmaxmeier)
  • Input and output filenames with spaces and non-local paths are now handled much better all around (#44, Alexander Bauer; #89, Norbert Pozar; #94, Peter Williams)
  • SyncTeX output is now fully supported, activated with the new --synctex option (#55, #73, Norbert Pozar)
  • The output files can be placed in a directory other than the input directory if the new --outdir or -o option is specified (#104, Felix Döring)
  • Tectonic will cleanly process TeX code provided on standard input if the input path argument is - (#94, Peter Williams)
  • Tectonic's first new primitive, \TectonicCodaTokens, has been added to allow boilerplate-free document processing (Peter Williams).
  • The API docs can be, and are, built on docs.rs as of this release.

Furthermore, I've launched a Tectonic forum site (running an instance of the Discourse.org software). This is a bit of an experiment since the project is so young and there are of course other venues, like GitHub issues and the TeX StackExchange, for having relevant discussions. But, by launching the Discourse site, we gain a venue for project news (like this announcement!), more open-ended technical discussions, Tectonic-specific tips and tricks that may not fit the StackExchange model, and a knowledge base of answers to the roadblocks that are so common in the TeX/LaTeX ecosystem. We hope that the forums will become a valuable complement to the other community areas that are already out there.

Here are some more improvements since the 0.1.5 release:

  • Some early work has occurred to make it possible to build Tectonic on Android (#105, Marco Barbosa)
  • The project’s build infrastructure is now more efficient (#60, Norbert Pozar; #116, Ronny Chevalier)
  • The style of the translated C code has been improved enormously thanks to both manual interventions and the use of the neat tool Coccinelle, reducing warnings and increasing cleanliness and portability (#66, #76, #83, #92, #107, #112, Ronny Chevalier; #105, Norbert Pozar; #94, #98, Peter Williams )
  • The test suite now covers behaviors of the Tectonic command-line program itself (#84, Alexander Bauer)
  • We now correctly run bibtex when using the amsrefs package (#48, Norbert Pozar)
  • Tectonic will correctly try a wider variety of file extensions when trying to open resources (#93, Marek Šuppa; #100, Norbert Pozar)
  • Cached bundle files are now made read-only (#55, Alexander Bauer)
  • We’ve fixed a subtle path handling issue that was harming generation of the standard LaTeX format (#77, Norbert Pozar)
  • Very large bibliographies are now better supported (#87, Marek Šuppa)
  • The UI now makes it clearer that network failures are not likely Tectonic’s fault (#88, Marek Šuppa)
  • It is now theoretically possible to load Omega font metrics files (#97, Peter Williams)
  • Output log files are now produced if --keep-logs is specified and an error occurs (#103, Norbert Pozar)

There are a few known problems with this release:

  • Tectonic doesn’t support HTTP proxies, and in some parts of the world you can’t access the purl.org website that Tectonic checks for its bundle. You can work around this by creating a custom configuration file.
  • Tectonic doesn’t have a mechanism to invoke the biber tool, so it cannot easily work for anyone that uses biblatex. This is a common complaint so it would be great to see a workaround be devised (relevant issue)!

Enormous thanks are in order to everyone who’s started contributing to the project.

Previous releases

Are not documented here. Consult the Git history.