I also don’t see anything “wrong” with typst for publishing - in fact I came here to figure out how to make it work. One possible conflict that could arise in an offline compilation environment is if an author specifically has a dependency on package_a version 1.1.2 but we only have 1.1.1 installed in our system at the time that our Docker image was built. Presumably in this case it’s not going to compile. This is not unlike what happens when people upload their LaTeX files, though in that case it’s usually because the author is using an older distribution of TeX rather than a newer one. If they are truly depending on features of a new version, they can always request that the publisher add this, but it’s more likely that the author would just revert to an older version so they could get their article to compile.
It’s also possible that an author would include a dependency that we don’t support. Our LaTeX docker image was built mostly to include everything unless it had a specific feature we would not support. Examples include anything that requires calling out to a shell, or tcolorbox (because it doesn’t coexist with the lineno package), or savetrees. ACM is far more restrictive in what LaTeX packages they support. They only support things in their official list. I don’t have any way to evaluate whether a typst package should be supported, unless it made modifications to layout that were inconsistent with our journal style. The first thing I found in this category is hydra, which we would not support. It would be painful to go through the entire list of typst packages.
In our LaTeX document class, we have a few \@ifpackageloaded macros to flag packages that we definitely do not support (like natbib). That way we warn authors early in their authoring process not to start using something that they can’t submit. I don’t know how to accomplish that in typst, but it would be very annoying to authors if they invested a lot of time in using a package that turned out to be unsupported. It’s like what authors face now if they invest a lot of effort in writing their document in typst, only to discover that they have to convert it to LaTeX for the publisher. We should be more respectful of authors. There have been a lot of complaints about the ACM system when an author uses a package that they later discover is not supported. We only want to block packages if they are inconsistent with the style of the journal, but we’re not going to spend the time checking over all of the packages (or checking for things in the document that would violate the style). We literally only have to spend 5-10 minutes per article doing copy editing because LaTeX does a lot of the work for us.
The problem of fonts might come up. Luckily we have not seen authors try to typeset their entire article in comic sans.
On the other hand, they might use variations on a greek font to achieve some specific mathematical notation. We would only use FOSS fonts and we would distribute those with our template. One question is whether there is any way to warn the author that they are using an unapproved font in their document at runtime. These runtime checks are quite important to help the author comply with journal style. If we wait until they upload their article then it’s too late and we’ve just annoyed the author. I asked gemini and it suggested the following (ignore their actual font selections):
#let approved-fonts = (
serif: "Libertinus Serif",
sans: "Fira Sans",
mono: "Fira Code",
math: "Libertinus Math"
)
#let project(body) = {
// Enforce the approved fonts globally
set text(font: (approved-fonts.serif, "linux libertine"), fallback: false)
set math.equation(font: approved-fonts.math)
// You can also restrict show rules to prevent unauthorized overrides
show text: it => {
// Logic to verify font usage could go here
it
}
body
}
It argued that having fallback: false would be enough to enforce font restrictions. Since I’m not yet a typst programmer I will have to rely heavily on these kind of suggestions. Unfortunately gemini asserted that there is no way to control whether a document loads a package like hydra unless we control the compilation environment.