From 58fea803e70f2206ebde2c9c76d5435f27d98251 Mon Sep 17 00:00:00 2001 From: kapsner Date: Fri, 6 Feb 2026 16:36:32 +0100 Subject: [PATCH 1/2] fix: sanitize docstring anchors --- quartodoc/renderers/md_renderer.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/quartodoc/renderers/md_renderer.py b/quartodoc/renderers/md_renderer.py index af91252..02dcca7 100644 --- a/quartodoc/renderers/md_renderer.py +++ b/quartodoc/renderers/md_renderer.py @@ -394,7 +394,8 @@ def render_header(self, el: layout.Doc) -> str: # TODO: support anchors that are not fully qualified paths? # e.g. get_object, rather than quartodoc.get_object - _anchor = f"{{ #{el.obj.path} }}" + anchor_part = _sanitize_title(str(el.obj.path).lower()) + _anchor = f"{{ #{anchor_part} }}" return f"{'#' * self.crnt_header_level} {_str_dispname} {_anchor}" @dispatch From a2c1cade88504efe5bb4798980e110d43cc7b06b Mon Sep 17 00:00:00 2001 From: kapsner Date: Fri, 6 Feb 2026 16:46:05 +0100 Subject: [PATCH 2/2] fix: reverted prev change and escape underscore on dispname --- quartodoc/renderers/md_renderer.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/quartodoc/renderers/md_renderer.py b/quartodoc/renderers/md_renderer.py index 02dcca7..8f40f29 100644 --- a/quartodoc/renderers/md_renderer.py +++ b/quartodoc/renderers/md_renderer.py @@ -390,12 +390,11 @@ def signature( @dispatch def render_header(self, el: layout.Doc) -> str: """Render the header of a docstring, including any anchors.""" - _str_dispname = el.name + _str_dispname = str(el.name).replace("_", "\\_") # TODO: support anchors that are not fully qualified paths? # e.g. get_object, rather than quartodoc.get_object - anchor_part = _sanitize_title(str(el.obj.path).lower()) - _anchor = f"{{ #{anchor_part} }}" + _anchor = f"{{ #{el.obj.path} }}" return f"{'#' * self.crnt_header_level} {_str_dispname} {_anchor}" @dispatch