diff --git a/doc/Doxyfile-mcss b/doc/Doxyfile-mcss
index f5ac3fe5f..a2f31e0e6 100644
--- a/doc/Doxyfile-mcss
+++ b/doc/Doxyfile-mcss
@@ -16,6 +16,11 @@ TAGFILES = ../../corrade/build/doc-mcss/corrade.tag=../../../../co
## marked with m-doc-external CSS class to avoid ugly underline.
## Important: keep this in sync with Doxyfile and Doxyfile-public!
+## Note: Doxygen is unable to replace \1\2 in the alias, leaving \2 verbatim in
+## the output. Probably some STUPID off-by-one error somewhere. To work around
+## that, is used in plain HTML and a ZWNJ Unicode character (which is
+## invisible!) in XML attributes. Currently the case is fn_gl_extension and
+## fn_gl_extension_keyword.
ALIASES = \
"debugoperator{1}=@relatesalso \1 @brief Debug output operator @xrefitem debugoperators \"Debug output operator\" \"Debug output operators for custom types\" Allows printing @ref \1 with @ref Corrade::Utility::Debug and friends." \
"debugoperatorenum{1}=@brief Debug output operator @xrefitem debugoperators \"Debug output operator\" \"Debug output operators for custom types\" Allows printing @ref \1 with @ref Corrade::Utility::Debug and friends." \
@@ -92,7 +97,7 @@ ALIASES = \
"m_enum_values_as_keywords=@xmlonly@endxmlonly" \
"fn_gl_keyword{1}=@xmlonly@endxmlonly @fn_gl{\1}" \
"fn_gl2_keyword{2}=@xmlonly@endxmlonly @fn_gl2{\1,\2}" \
- "fn_gl_extension_keyword{3}=@xmlonly@endxmlonly @fn_gl_extension{\1,\2,\3}" \
+ "fn_gl_extension_keyword{3}=@xmlonly@endxmlonly @fn_gl_extension{\1,\2,\3}" \
"def_gl_keyword{1}=@xmlonly@endxmlonly @def_gl{\1}" \
"def_gl_extension_keyword{3}=@xmlonly@endxmlonly @def_gl_extension{\1,\2,\3}" \
"fn_vk_keyword{1}=@xmlonly@endxmlonly @fn_vk{\1}" \
diff --git a/doc/Doxyfile-public b/doc/Doxyfile-public
index cc2b0e4a9..a8f824656 100644
--- a/doc/Doxyfile-public
+++ b/doc/Doxyfile-public
@@ -12,6 +12,11 @@ TAGFILES = ../../corrade/build/doc-public/corrade.tag=https://doc.
## Doxyfile-mcss, with @todoc changed to be just an alias to @todo so it also
## gets removed. Keep it in sync, please.
+## Note: Doxygen is unable to replace \1\2 in the alias, leaving \2 verbatim in
+## the output. Probably some STUPID off-by-one error somewhere. To work around
+## that, is used in plain HTML and a ZWNJ Unicode character (which is
+## invisible!) in XML attributes. Currently the case is fn_gl_extension and
+## fn_gl_extension_keyword.
ALIASES = \
"debugoperator{1}=@relatesalso \1 @brief Debug output operator @xrefitem debugoperators \"Debug output operator\" \"Debug output operators for custom types\" Allows printing @ref \1 with @ref Corrade::Utility::Debug and friends." \
"debugoperatorenum{1}=@brief Debug output operator @xrefitem debugoperators \"Debug output operator\" \"Debug output operators for custom types\" Allows printing @ref \1 with @ref Corrade::Utility::Debug and friends." \
@@ -88,7 +93,7 @@ ALIASES = \
"m_enum_values_as_keywords=@xmlonly@endxmlonly" \
"fn_gl_keyword{1}=@xmlonly@endxmlonly @fn_gl{\1}" \
"fn_gl2_keyword{2}=@xmlonly@endxmlonly @fn_gl2{\1,\2}" \
- "fn_gl_extension_keyword{3}=@xmlonly@endxmlonly @fn_gl_extension{\1,\2,\3}" \
+ "fn_gl_extension_keyword{3}=@xmlonly@endxmlonly @fn_gl_extension{\1,\2,\3}" \
"def_gl_keyword{1}=@xmlonly@endxmlonly @def_gl{\1}" \
"def_gl_extension_keyword{3}=@xmlonly@endxmlonly @def_gl_extension{\1,\2,\3}" \
"fn_vk_keyword{1}=@xmlonly@endxmlonly @fn_vk{\1}" \