Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/command/render/output-tex.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import {
kPdfStandard,
kPdfStandardApplied,
kTargetFormat,
pdfStandardEnv,
} from "../../config/constants.ts";
import { Format } from "../../config/types.ts";
import { asArray } from "../../core/array.ts";
Expand Down Expand Up @@ -90,7 +91,8 @@ export function texToPdfOutputRecipe(
const pdfStandards = asArray(
pandocOptions.format.metadata?.[kPdfStandardApplied] ??
format.render?.[kPdfStandard] ??
format.metadata?.[kPdfStandard],
format.metadata?.[kPdfStandard] ??
pdfStandardEnv(),
) as string[];
if (pdfStandards.length > 0) {
await validatePdfStandards(pdfOutput, pdfStandards, {
Expand Down
7 changes: 5 additions & 2 deletions src/command/render/output-typst.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import {
kOutputFile,
kPdfStandard,
kVariant,
pdfStandardEnv,
} from "../../config/constants.ts";
import { error, warning } from "../../deno_ral/log.ts";
import { ErrorEx } from "../../core/lib/error.ts";
Expand Down Expand Up @@ -158,7 +159,8 @@ export function typstPdfOutputRecipe(
),
pdfStandard: normalizePdfStandardForTypst(
asArray(
format.render?.[kPdfStandard] ?? format.metadata?.[kPdfStandard],
format.render?.[kPdfStandard] ?? format.metadata?.[kPdfStandard] ??
pdfStandardEnv(),
),
),
};
Expand All @@ -185,7 +187,8 @@ export function typstPdfOutputRecipe(

// Validate PDF against specified standards using verapdf (if available)
const pdfStandards = asArray(
format.render?.[kPdfStandard] ?? format.metadata?.[kPdfStandard],
format.render?.[kPdfStandard] ?? format.metadata?.[kPdfStandard] ??
pdfStandardEnv(),
) as string[];
if (pdfStandards.length > 0) {
await validatePdfStandards(pdfOutput, pdfStandards, {
Expand Down
9 changes: 9 additions & 0 deletions src/config/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,15 @@ export const kKeepTex = "keep-tex";
export const kKeepTyp = "keep-typ";
export const kPdfStandard = "pdf-standard";
export const kPdfStandardApplied = "pdf-standard-applied";

/** Read QUARTO_PDF_STANDARD env var as a fallback for pdf-standard option. */
export function pdfStandardEnv(): string[] | undefined {
const val = Deno.env.get("QUARTO_PDF_STANDARD");
if (val) {
return val.split(",").map((s) => s.trim()).filter((s) => s.length > 0);
}
return undefined;
}
export const kKeepIpynb = "keep-ipynb";
export const kKeepSource = "keep-source";
export const kVariant = "variant";
Expand Down
4 changes: 3 additions & 1 deletion src/format/pdf/format-pdf.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ import {
kTblCapLoc,
kTopLevelDivision,
kWarning,
pdfStandardEnv,
} from "../../config/constants.ts";
import { warning } from "../../deno_ral/log.ts";
import { asArray } from "../../core/array.ts";
Expand Down Expand Up @@ -326,7 +327,8 @@ function createPdfFormat(

// Handle pdf-standard option for PDF/A, PDF/UA, PDF/X conformance
const pdfStandard = asArray(
format.render?.[kPdfStandard] ?? format.metadata?.[kPdfStandard],
format.render?.[kPdfStandard] ?? format.metadata?.[kPdfStandard] ??
pdfStandardEnv(),
);
if (pdfStandard.length > 0) {
const { version, standards, needsTagging } =
Expand Down
10 changes: 10 additions & 0 deletions tests/docs/render/pdf-standard-env.qmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
title: PDF Standard from Environment Variable
lang: en
format:
pdf:
keep-tex: true
---

This document does not set `pdf-standard` in its YAML.
It should only get PDF standard settings from the `QUARTO_PDF_STANDARD` environment variable.
30 changes: 30 additions & 0 deletions tests/smoke/render/render-pdf-standard-env.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*
* render-pdf-standard-env.test.ts
*
* Copyright (C) 2020-2022 Posit Software, PBC
*
* Tests that QUARTO_PDF_STANDARD environment variable is used as a fallback
* when no pdf-standard is set in the document YAML.
*/

import { docs, outputForInput } from "../../utils.ts";
import { ensureLatexFileRegexMatches } from "../../verify.ts";
import { testRender } from "./render.ts";

const input = docs("render/pdf-standard-env.qmd");
const output = outputForInput(input, "pdf");

// Test that QUARTO_PDF_STANDARD env var applies ua-2 even though
// the document has no pdf-standard in its YAML
testRender(input, "pdf", true, [
ensureLatexFileRegexMatches(
output.outputPath,
[/\\DocumentMetadata\{/, /pdfstandard=\{ua-2\}/, /tagging=on/],
[],
input,
),
], {
env: {
QUARTO_PDF_STANDARD: "ua-2",
},
});
Loading