tectonic 0.5.0
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 thisThe 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_xdvcrate 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 watchcommand to auto-rebuild documents when their
source files get updated (#719, #734, @jeffa5) - Add an
--openoption totectonic -X buildto open the document(s)
after the build finishes (#109, #733, @jeffa5) - The usual updates to dependencies, build fixes, and documentation tweaks