Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

Typst: image size in px is not converted when the image has fig-alt

オープン 初心者向け
#14,947 コメント 2 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
2/5
見積もり時間
1〜3時間
初心者へのやさしさ
75/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
lua
領域
cli, documentation

調査の方向性

バグは src/resources/filters/quarto-post/typst.lua の 218-225 行目と 262-273 行目にあります。まずフィルターコードを読み、fig-alt を持つ画像をどのように処理しているかを確認してください。修正には、おそらく PANDOC_WRITER_OPTIONS.dpi を使用して px 単位をインチに変換することが含まれます。これは、単純な数値が処理される方法と同様です。fig-alt と px サイズを持つ画像を含む最小限の .qmd ファイルを作成し、quarto render を実行して、生成された .typ ファイルに 'px' が含まれなくなったことを確認することでテストしてください。

索引モデルが issue の本文から書いたものです。

説明

accessibility bug typst
Bug description

When I render to Typst, an image with fig-alt keeps its size in px. Typst has no px unit, so compiling the document fails with invalid number suffix: px. The same image without fig-alt renders fine, because Quarto converts its size to inches.

The cause is in the Typst filter, quarto-post/typst.lua. When an image has alt text, the filter doesn't pass it on to Pandoc. It writes the Typst image() call itself as a RawInline and copies the height and width values across unchanged. The filter does convert sizes before that, but only when they're plain numbers. tonumber("200px") returns nil, so 200px ends up in the Typst code as it is.

This is where the filter builds the image() call for an image with alt text:

An image without alt text goes through Pandoc's Typst writer instead, and that writer turns pixel sizes into inches:

Sizes in % still work with fig-alt, because Typst understands %.

Checked against Pandoc

I also ran the same image through Pandoc on its own, and Pandoc isn't the cause. The Pandoc 3.10 bundled with Quarto converts the size and writes the alt text correctly:

printf 'A ![](https://quarto.org/quarto.png){height="200px" alt="Quarto logo."} b\n' | quarto pandoc -f markdown -t typst
# #box(image("https://quarto.org/quarto.png", height: 2.08333in, alt: "Quarto logo."))

A comment in the filter says the raw image() call is a workaround, because Pandoc used to leave alt text out of Typst output (jgm/pandoc#11394). Pandoc 3.10 writes alt: itself now, so the workaround might not be needed any more. For the moment, it's the code path that causes this bug.

Steps to reproduce
---
format: typst
keep-typ: true
---

![](https://quarto.org/quarto.png){height="200px"}

![](https://quarto.org/quarto.png){height="200px" fig-alt="Quarto logo."}
Actual behavior

The generated .typ file has these two lines:

#box(image("t3_files/mediabag/quarto.png", height: 2.08333in))
#box(image("t3_files/mediabag/quarto.png", alt: "Quarto logo.", height: 200px))

Typst then stops with this error:

error: invalid number suffix: `px`
Expected behavior

I'd expect the image with fig-alt to have its size converted just like the one without it:

#box(image("t3_files/mediabag/quarto.png", alt: "Quarto logo.", height: 2.08333in))

I can see two ways to fix it. The filter could convert px values to inches with PANDOC_WRITER_OPTIONS.dpi, as it already does for plain numbers. Or, now that Pandoc 3.10 writes the alt text itself, the filter could let Pandoc handle these images as well.

Your environment

I'm on macOS. The bug happens with Quarto 1.10.18 and with the current main branch at commit 03f0fdf586b066ffa81ebefa55e5dad21e08bec0.

Quarto check output

This output comes from the development build I used to confirm the bug on main.

[✓] Checking environment information...
      Quarto cache location: /Users/mcanouil/Library/Caches/quarto
[✓] Checking versions of quarto binary dependencies...
      Pandoc version 3.10.0: OK
      Dart Sass version 1.101.0: OK
      Deno version 2.7.14: OK
      Typst version 0.15.1: OK
[✓] Checking versions of quarto dependencies......OK
[✓] Checking Quarto installation......OK
      Version: 99.9.9
      commit: 03f0fdf586b066ffa81ebefa55e5dad21e08bec0
      Path: /Users/mcanouil/Projects/quarto-dev/quarto-cli/package/dist/bin

[✓] Checking tools....................OK
      TinyTeX: v2026.07
      Chrome Headless Shell: (not installed)
      VeraPDF: (not installed)

[✓] Checking LaTeX....................OK
      Using: TinyTex
      Path: /Users/mcanouil/Library/TinyTeX/bin/universal-darwin
      Version: 2026

[✓] Checking Chrome Headless....................OK
      Using: Chrome from QUARTO_CHROMIUM
      Path: /Applications/Brave Browser.app/Contents/MacOS/Brave Browser

[✓] Checking basic markdown render....OK

ℹ R version 4.6.1 (2026-06-24)
! Config '~/.Rprofile' was loaded!
[✓] Checking R installation...........OK
      Version: 4.6.1
      Path: /Library/Frameworks/R.framework/Versions/4.6/Resources
      LibPaths:
        - /Users/mcanouil/Projects/quarto-dev/quarto-playground/renv/library/macos/R-4.6/aarch64-apple-darwin23
        - /Users/mcanouil/Library/Caches/org.R-project.R/R/renv/sandbox/macos/R-4.6/aarch64-apple-darwin23/46003b10
      knitr: 1.51
      rmarkdown: 2.31

[✓] Checking Knitr engine render......OK

[✓] Checking Python 3 installation....OK
      Version: 3.9.6
      Path: /Library/Developer/CommandLineTools/usr/bin/python3
      Jupyter: (None)

      Jupyter is not available in this Python installation.
      Install with python3 -m pip install jupyter

      There is an unactivated Python environment in .venv. Did you forget to activate it?

[✓] Checking Julia installation...
主要言語
JavaScript
スター
6k
フォーク
458
平均マージ
1日 3時間
マージ済み PR(30日)
54

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

quarto-dev/quarto-cli のほかの issue

quarto-dev/quarto-cli の issue をすべて見る

似ている issue

JavaScript の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。