Typst: logo from _brand.yml is drawn on every page and logo: false does not remove it

Đang mở Phù hợp với người mới
#15,311 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
78/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
typescript, yaml
Lĩnh vực
backend

Hướng nghiên cứu

Bắt đầu tại src/core/brand/brand.ts, ở fillLogoPaths(), rồi theo dõi cách kết quả của nó được truyền đến resolveLogo() từ src/format/typst/format-typst.ts. Kiểm tra cách xử lý hiện có đối với logo: false và nền trang Typst trong src/resources/formats/typst/pandoc/quarto/page.typ. Công việc hoàn tất khi kết quả kết xuất có logo thương hiệu sẽ bỏ logo nếu dùng logo: false, đồng thời giữ nguyên màu sắc và phông chữ thương hiệu.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

brand bug typst
Bug description

When _brand.yml defines a logo, Typst output puts it in the page background of every page, and logo: false does not remove it, neither as a typst format option nor at the top level of the front matter.
revealjs honors logo: false with the same _brand.yml, and websites and books document it for navbar and sidebar (https://prerelease.quarto.org/docs/authoring/brand.html#disabling-the-logo).
For Typst, the only document-level switch I found is brand: false, which also drops the brand colors and fonts.

Steps to reproduce

_brand.yml

logo:
  images:
    mark:
      path: logo.svg
      alt: Logo
  small: mark

logo.svg

<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100"><rect width="100" height="100" fill="#d33"/></svg>

doc.qmd

---
title: Logo test
format:
  typst:
    logo: false
---

First page paragraph.

{{< pagebreak >}}

Second page paragraph.
quarto render doc.qmd -M keep-typ:true
grep "set page(background" doc.typ

Same result with logo: false at the top level instead of under typst, and without logo at all.

Actual behavior

doc.typ always contains

#set page(background: align(left+top, box(inset: 0.75in, image("/logo.svg", width: 1.5in, alt: "Logo"))))

and the red square is drawn on both pages of the PDF.

Expected behavior

logo: false removes the logo in Typst output, while the rest of _brand.yml still applies.

Cause

The Typst format passes the document logo through fillLogoPaths() before resolveLogo():

https://github.com/quarto-dev/quarto-cli/blob/d5e0617310ce240263f539c16bdd804dd952ed7d/src/format/typst/format-typst.ts#L122-L123

resolveLogo() handles false since #13922 (for navbar and sidebar):

https://github.com/quarto-dev/quarto-cli/blob/d5e0617310ce240263f539c16bdd804dd952ed7d/src/core/brand/brand.ts#L360-L373

but fillLogoPaths() turns any falsy value into undefined first:

https://github.com/quarto-dev/quarto-cli/blob/d5e0617310ce240263f539c16bdd804dd952ed7d/src/core/brand/brand.ts#L593-L595

So resolveLogo() receives undefined and falls back to the first brand logo of small, medium, large, which the page.typ partial then sets as page background:

https://github.com/quarto-dev/quarto-cli/blob/d5e0617310ce240263f539c16bdd804dd952ed7d/src/resources/formats/typst/pandoc/quarto/page.typ#L13-L14

We could let false pass through fillLogoPaths() unchanged so the existing check in resolveLogo() applies.

Workaround

A Typst file in include-in-header that wraps article() and resets the background before any content:

#let quarto-article = article
#let article(..args) = {
  set page(background: none)
  quarto-article(..args)
}
format:
  typst:
    include-in-header: no-logo.typ

It resets any other page background too. A plain #set page(background: none) in include-before-body comes after the title block and adds an extra page.

Your environment
  • Quarto 1.12.0 (prerelease), also 1.11.9
  • Windows 11
Ngôn ngữ chính
JavaScript
Star
6.1k
Fork
478
Merge trung bình
17 giờ 58 phút
Pull request đã merge (30 ngày)
135

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của quarto-dev/quarto-cli

Tất cả issue của quarto-dev/quarto-cli

Issue tương tự

Thêm issue về JavaScript

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.