Re: Does the doctree reader work?

MatÄ›j Cepl <[email protected]> Mon, 26 Jan 2026 15:56:15 +0100
Newsgroups gmane.text.docutils.user
Message-ID <[email protected]>
--===============4649412321442891136==
Content-Type: multipart/signed;
 boundary=72db0260669e99dd1abf26075a68575fbc04c7f21d760db71f86a1669b91;
 micalg=pgp-sha1; protocol="application/pgp-signature"

--72db0260669e99dd1abf26075a68575fbc04c7f21d760db71f86a1669b91
Content-Type: multipart/mixed;
 boundary=9ccbbb31a19696897f555d24b4cdfa2dceb37c940b5f46af8b99386d8fda

--9ccbbb31a19696897f555d24b4cdfa2dceb37c940b5f46af8b99386d8fda
Content-Type: multipart/alternative;
 boundary=a1059b2654d292d10bbe39178adbbd913035c463293fb16ba5b48ece22e7

--a1059b2654d292d10bbe39178adbbd913035c463293fb16ba5b48ece22e7
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
Content-Type: text/plain; charset=UTF-8

On Mon Jan 26, 2026 at 11:42 AM CET, Guenter Milde via Docutils-users wrote=
:
> On 2026-01-24, Mat=C4=9Bj Cepl wrote:
> Docutils supports the use of 3rd party parsers like "MySt" with the
> "generic front-end":
>
> To generate a HTML5 document from Markdown input, use
>
>   docutils --parser=3Dmyst
>
> To get ODT output from Markdown documents, try
>
>   docutils --parser=3Dmyst --writer=3Dodt

I see! Thank you, I missed that, it makes much more sense. Unfortunately
for me, is it correct to say that docutils odt writer doesn=E2=80=99t suppo=
rt
vector images? Which format is supported?

See text of my yesterday=E2=80=99s sermon on https://git.sr.ht/~mcepl/2026-=
01-25-adulthood/tree

When running suggested command `docutils --parser=3Dmyst --writer=3Dodt
becoming_adult.md becoming_adult.odt` I get this error:

$ docutils --verbose --traceback --parser=3Dmyst --writer=3Dodt bec
oming_adult.md becoming_adult.odt
Traceback (most recent call last):
  File "/home/matej/.bin/docutils", line 8, in <module>
    sys.exit(main())
             ~~~~^^
  File "/usr/lib/python3.13/site-packages/docutils/__main__.py", line 84, i=
n main
    publish_cmdline(reader=3Dargs.reader,
    ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
                    parser=3Dargs.parser,
                    ^^^^^^^^^^^^^^^^^^^
    ...<2 lines>...
                    description=3Ddescription,
                    ^^^^^^^^^^^^^^^^^^^^^^^^
                    argv=3Dremainder)
                    ^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/site-packages/docutils/core.py", line 442, in p=
ublish_cmdline
    output =3D publisher.publish(
        argv, usage, description, settings_spec, settings_overrides,
        config_section=3Dconfig_section, enable_exit_status=3Denable_exit_s=
tatus)
  File "/usr/lib/python3.13/site-packages/docutils/core.py", line 272, in p=
ublish
    output =3D self.writer.write(self.document, self.destination)
  File "/usr/lib/python3.13/site-packages/docutils/writers/__init__.py", li=
ne 97, in write
    self.translate()
    ~~~~~~~~~~~~~~^^
  File "/usr/lib/python3.13/site-packages/docutils/writers/odf_odt/__init__=
.py", line 511, in translate
    self.document.walkabout(self.visitor)
    ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/site-packages/docutils/nodes.py", line 232, in =
walkabout
    if child.walkabout(visitor):
       ~~~~~~~~~~~~~~~^^^^^^^^^
  File "/usr/lib/python3.13/site-packages/docutils/nodes.py", line 232, in =
walkabout
    if child.walkabout(visitor):
       ~~~~~~~~~~~~~~~^^^^^^^^^
  File "/usr/lib/python3.13/site-packages/docutils/nodes.py", line 232, in =
walkabout
    if child.walkabout(visitor):
       ~~~~~~~~~~~~~~~^^^^^^^^^
  File "/usr/lib/python3.13/site-packages/docutils/nodes.py", line 224, in =
walkabout
    visitor.dispatch_visit(self)
    ~~~~~~~~~~~~~~~~~~~~~~^^^^^^
  File "/usr/lib/python3.13/site-packages/docutils/writers/odf_odt/__init__=
.py", line 1554, in dispatch_visit
    nodes.GenericNodeVisitor.dispatch_visit(self, node)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
  File "/usr/lib/python3.13/site-packages/docutils/nodes.py", line 2734, in=
 dispatch_visit
    return method(node)
  File "/usr/lib/python3.13/site-packages/docutils/writers/odf_odt/__init__=
.py", line 2187, in visit_image
    self.generate_image(node, source, destination, el2)
    ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/site-packages/docutils/writers/odf_odt/__init__=
.py", line 2414, in generate_image
    width, height =3D self.get_image_scaled_width_height(node, source)
                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/site-packages/docutils/writers/odf_odt/__init__=
.py", line 2270, in get_image_scaled_width_height
    with PIL.Image.open(filename, 'r') as img:
         ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^
  File "/home/matej/.local/lib/python3.13/site-packages/PIL/Image.py", line=
 3580, in open
    raise UnidentifiedImageError(msg)
PIL.UnidentifiedImageError: cannot identify image file 'parent_and_child.sv=
g'
$=20

If it is a known limitation of the ODT writer, is there a ticket for it?
I cannot find anything on https://sourceforge.net/p/docutils/bugs/

The minimal reproducer can be:

```markdown
    ----
    date: 2026-01-25T11:00:00
    category: faith
    tags: [innerHealing, sermon, PCF]
    ----

    # Becoming adult

    ```{image} parent_and_child.png
    :alt: A schematic image of large adult facing a child
    :width: 50%
    :align: center
    ```
```

Any thoughts?

Best,

Mat=C4=9Bj

--=20
http://matej.ceplovi.cz/blog/, @[email protected]
GPG Finger: 3C76 A027 CA45 AD70 98B5  BC1D 7920 5802 880B C9D8
=20
I love deadlines. I like the whooshing sound they make as they
fly by.
  -- Douglas Adams, The Salmon of Doubt


--a1059b2654d292d10bbe39178adbbd913035c463293fb16ba5b48ece22e7--

--9ccbbb31a19696897f555d24b4cdfa2dceb37c940b5f46af8b99386d8fda
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=E09FEF25D96484AC.asc
Content-Type: application/pgp-keys; charset=UTF-8

LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUdpQkQyZzVUMFJCQUNaZG5H
LzlUNEpTMm1seHNIZUZiZXgxS1d3ZUtQdVlUcG5idThGZTdyTllNV1ovQUtjCjlWbStSdW9WRXJt
NEhHc2IwcEw1WlBubmNBK204MFc4RXpRbTJyczhQRDJtSE5zVWhET0duayswZm0rMjVXU1UKNllM
emQ4bHR0eFBpYTc1QTVPcUJFQW1KbHlKVVNtb1dLakFLL3ExVGo1SFczKy83WHFXWVlDSnpBd0Nn
alIyRAppcnc4UVA4R0NvVVVYeGVOcElPVHF6TUQvajY2VlRsbityeFlUMTJVNGp4TGxzT3M1WTBM
VlFmVWJwREZFWXk5Cm1rV1g4aU5UVVpzeCttNnVoeWxhbW0zRWtOL2RXMGIyc1E0RDNvY1pla3Jp
TFBEUi9YMFAxWFBVZGN5MjhhNm8KV1pvVkFLTjI2WCtQd3hTcTNKQ2lRRUpnUEplS3hpTGlFeGgz
bERpdE55QVMwV1VEL3hRT3FyeUVGYjlrc0d4TApSOVVDQS85V1VRTXdnUXZFVWh1VkI3cVNuUkVv
MytrczM0S2x0cDcxdVVqdU1qTGszeWtTcHR5bjhvVitYWmd4CnJ4UEFEK1dPSm41MXlGeGJvK09Q
TmRINndHMlphWEZqNDdyWDZHUTlXNndJN0swUWhkeVFUcHM4S05sc0p1RFEKcHo3WE1FOThvYjhT
c3pzdmtQUG0vZ1gwb1dkT0lxSGlwSG5NbEw2ODRqUkhDV0hWanJRZFRXRjBaV29nUTJWdwpiQ0E4
YldGMFpXcEFZMlZ3Ykc5MmFTNWplajZJWUFRVEVRSUFJQUllQVFJWGdBSVpBUVVDUlNvV0FnWUxD
UWdICkF3SUVGUUlJQXdRV0FnTUJBQW9KRU9DZjd5WFpaSVNzcjVzQW9JQXFzTmNzMVNsOWpybXF2
N3ZKekw0UUc2OFYKQUo5KzMwTm1CQ2xRd3BtcW5BMjZuQ2E0K1dTNWFiUWJUV0YwWldvZ1EyVndi
Q0E4WTJWd2JDNXRRRzVsZFM1bApaSFUraUdBRUV4RUNBQ0FDR3dNQ0hnRUNGNEFGQWtVcUZna0dD
d2tJQndNQ0JCVUNDQU1FRmdJREFRQUtDUkRnCm4rOGwyV1NFckFVTEFKb0M4eXJwdE9nb29KT3pM
em1MeERjMW16ZUdEQUNkRkJ3Wmx2RmNqMVQyZG1DUk5kbjUKY0VyUnlCZTBHMDFoZE1TYmFpQkRa
WEJzSUR4dFkyVndiRUJqWlhCc0xtVjFQb2hpQkJNUkFnQWlCUUpRaXhwdwpBaHNEQmdzSkNBY0RB
Z1lWQ0FJSkNnc0VGZ0lEQVFJZUFRSVhnQUFLQ1JEZ24rOGwyV1NFckJNWUFKOWVRRXBpCmJMNlZt
N3NVT2h1cHhEL1VzSGlXbFFDZEhZaStVTnB6QzFtS1l0RFNXYTFvY2ZPMVE3NjBIRTFoZEdWcUlF
TmwKY0d3Z1BHTmxjR3h0UUhObGVtNWhiUzVqZWo2SVlBUVRFUUlBSUFJYkF3SWVBUUlYZ0FVQ1JT
b1dDUVlMQ1FnSApBd0lFRlFJSUF3UVdBZ01CQUFvSkVPQ2Y3eVhaWklTc1AxNEFuaTZVODdoU1VY
RFUrM1pUYURSWEl3YXNUdHRsCkFKMFFXaGpTbWFKVGRra3BmcW1SQjliUmk5cEFRYlFmVFdGMHhK
dHFJRU5sY0d3Z1BHTmxjR3hBYzNWeVptSmwKYzNRdWJtVjBQb2hnQkJNUkFnQWdBaHNEQWg0QkFo
ZUFCUUpGS2hZSkJnc0pDQWNEQWdRVkFnZ0RCQllDQXdFQQpDZ2tRNEovdkpkbGtoS3dCQndDYkJP
b1RZNTJoWWVLbkt1VS91UmpPVHNVTWczSUFualRUclhZSEQ0OXh5THM4ClQvVnBzdWs2WlAvaHRD
Rk5ZWFJsYWlCRFpYQnNJRHh0WVhSbGFpNWpaWEJzUUdkdFlXbHNMbU52YlQ2SVlBUVQKRVFJQUlB
SWJBd0llQVFJWGdBVUNSU29XQ1FZTENRZ0hBd0lFRlFJSUF3UVdBZ01CQUFvSkVPQ2Y3eVhaWklT
cwpraTBBbjBHdzFNalpKQVR0VnExMVN1MG1qZDNyRFFDaEFKMGVlUEUwYW1Td1lWR1NwU05iMjY0
K1hqVW90clFzClRXRjBaV29nUTJWd2JDQW9VbVZrU0dGMElFTjZaV05vS1NBOGJXTmxjR3hBY21W
a2FHRjBMbU52YlQ2SVlBUVQKRVFJQUlBVUNSU3ljaXdJYkF3WUxDUWdIQXdJRUZRSUlBd1FXQWdN
QkFoNEJBaGVBQUFvSkVPQ2Y3eVhaWklTcwpieVFBbmlxdzFQWDI0QmxiQkQyMnpOcVl3emZJUERo
d0FKNG0vM3l0dUp6c2Z4ckVhYzF0U29FYjIrSDl2clE1ClRXRjBaV29nUTJWd2JDQThZMlZ3YkMx
YVR6UkdNRXR1YlVORVNHc3hkVTFLVTBKclVXMVJRSEIxWW14cFl5NW4KYldGdVpTNXZjbWMraUdB
RUV4RUNBQ0FDR3dNQ0hnRUNGNEFGQWtVcUZna0dDd2tJQndNQ0JCVUNDQU1FRmdJRApBUUFLQ1JE
Z24rOGwyV1NFckFuOUFKOWJPME5VcUxuTURUQ2NjaHRWeks2eUVPTGtDZ0NmWHdrdHkxdUVBelFJ
CjVrdDlHZWM4eVFweERsaTBHazFoZEdWcUlFTmxjR3dnUEcxalpYQnNRSE4xYzJVdVpHVStpR01F
RXhFQ0FDTUYKQWxyNjVDc0NHd01IQ3drSUJ3TUNBUVlWQ0FJSkNnc0VGZ0lEQVFJZUFRSVhnQUFL
Q1JEZ24rOGwyV1NFckhqTwpBSjQ3eUY5U1RYL0VzNHFzSlBqVzk2MUhlOUgzYmdDZEVzak9ndDdj
ekU4N0d5MEQxS1hXV05UZFR0VzBHMDFoCmRHVnFJRU5sY0d3Z1BHMWpaWEJzUUhOMWMyVXVZMjl0
UG9oakJCTVJBZ0FqQlFKYSt1US9BaHNEQndzSkNBY0QKQWdFR0ZRZ0NDUW9MQkJZQ0F3RUNIZ0VD
RjRBQUNna1E0Si92SmRsa2hLd3NRUUNkR21HWFc3M082UTNUQjBWMAp4UDl5THdNakR0RUFuaktX
RFc4UEtPOTBueDhJa1BvZHhyMW5DdkpidEJwTllYUmxhaUJEWlhCc0lEeHRZMlZ3CmJFQnpkWE5s
TG1ONlBvaGpCQk1SQWdBakJRSmErdVJQQWhzREJ3c0pDQWNEQWdFR0ZRZ0NDUW9MQkJZQ0F3RUMK
SGdFQ0Y0QUFDZ2tRNEovdkpkbGtoS3lLdFFDZEhEcG9sSGcvMXFEYXcvNENReVV6QWZOdkhrMEFu
aUVZTDZCRgpyZHlvbmhnUWYvWlh6WGpuS3pTZXVRRU5CRDJnNVVFUUJBQ2Z4b3oybm16R0p6NnVl
S0hrVGVYY1Fadks0V3pLClROL3VKSmhFbVN1UW1PS3ltYklrR0w2dkJRYitXNEt4dkxsMmxBYk5s
ZklnTEdETENzMVlBd2ZTcEo0dlM0bXQKbGlQZ0EyT3RaNWoxV1NPcXB4ZWRRUEdWYmE1Z1ZvN0hO
U09NVXRaS1R6N1ZzQ3ZSOTR2MDVjb21oTzFHb2s3NQpaeEh0WXlWSHVrNVY4d0FEQlFQL2Z0K1c0
RjB0Y2N3c2x6ejhPL2M5L01qOEtaRFltZk15TmI3aWVsVDJXZVEzCmlGRjlBeE1UNk92T3hBUWJE
SnZ1cmZLZVlseWRjWExzNmN5NGxLY2UxaEZhSjRpK01PRkxWVjFablpERENoUlAKcFE2S3JSQ0hM
YittTFkrU1lEMzdPN3Awc3BRQSs5Z3NFRS90bW4rNXNXN0xFOGhxU09vUFZkZjdZNXlVRGo2SQpS
Z1FZRVFJQUJnVUNQYURsUVFBS0NSRGduKzhsMldTRXJFVVNBSjQyVDFsLzJURnlrYlVMQnFxQXRu
YkM2a1IwCnd3Q2RFblJsQ0dsdm5PNzhSMEZnS1hsdDNSeXpHdUU9Cj1zeG9XCi0tLS0tRU5EIFBH
UCBQVUJMSUMgS0VZIEJMT0NLLS0tLS0K
--9ccbbb31a19696897f555d24b4cdfa2dceb37c940b5f46af8b99386d8fda--

--72db0260669e99dd1abf26075a68575fbc04c7f21d760db71f86a1669b91
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iIgEABECAEgWIQSJ70vGKIq/QxurJcPgn+8l2WSErAUCaXeAjxsUgAAAAAAEAA5t
YW51MiwyLjUrMS4xMSwyLDIOHG1jZXBsQGNlcGwuZXUACgkQ4J/vJdlkhKzscgCf
Qm5WdfSTkvBcXytqGNt2o9PIP/MAn0PZu6KyksJ1ct5BEgOQT/8IzaUW
=rzx1
-----END PGP SIGNATURE-----

--72db0260669e99dd1abf26075a68575fbc04c7f21d760db71f86a1669b91--


--===============4649412321442891136==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline


--===============4649412321442891136==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline