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