SF.net SVN: docutils:[10318 ] trunk/docutils
milde--- via Docutils-checkins <[email protected]> Thu, 30 Apr 2026 19:17:28 +0000
| Newsgroups | gmane.text.docutils.cvs |
|---|---|
| Message-ID | <[email protected]> |
Revision: 10318
http://sourceforge.net/p/docutils/code/10318
Author: milde
Date: 2026-04-30 19:17:27 +0000 (Thu, 30 Apr 2026)
Log Message:
-----------
latex-footnotes: Fix self-referencing footnote.
Register processed footnotes before handling the content
so that a self-referencing footnote is not printed twice.
Modified Paths:
--------------
trunk/docutils/docutils/writers/latex2e/__init__.py
trunk/docutils/test/test_writers/test_latex2e.py
Modified: trunk/docutils/docutils/writers/latex2e/__init__.py
===================================================================
--- trunk/docutils/docutils/writers/latex2e/__init__.py 2026-04-30 19:17:18 UTC (rev 10317)
+++ trunk/docutils/docutils/writers/latex2e/__init__.py 2026-04-30 19:17:27 UTC (rev 10318)
@@ -2408,22 +2408,23 @@
# footnote is already set, just insert a reference:
self.out.append(r'\footref{%s}' % href)
raise nodes.SkipNode
- self.footnote_queue.append(href)
- if len(self.footnote_queue) > 1:
+ if self.footnote_queue:
# nested footnote: insert reference now and text later
self.out.append(r'\footref{%s}' % href)
+ self.footnote_queue.append(href)
raise nodes.SkipNode
- # if we reach this point, the first queue item is a top level note
+ # node refers to a new top-level footnote:
footnote_cmd = r'\footnote'
+ self.footnote_queue.append(href)
while self.footnote_queue:
ID = self.footnote_queue[0]
footnote = self.document.ids[ID]
+ self.processed_footnotes.add(ID) # keep ID for re-references
self.out += [footnote_cmd, r'{\label{', ID, '}%']
footnote.walkabout(self) # visit/depart footnote & content
self.out.append('}')
- # update queue, keep ID in case the note is referred to again
- self.processed_footnotes.add(self.footnote_queue.pop(0))
- # remaining items have the footnote-reference already set:
+ self.footnote_queue.pop(0)
+ # next items are nested notes (reference already set):
footnote_cmd = '%\n\\refstepcounter{footnote}\\footnotetext'
raise nodes.SkipNode # ignore content (footnote number/symbol)
Modified: trunk/docutils/test/test_writers/test_latex2e.py
===================================================================
--- trunk/docutils/test/test_writers/test_latex2e.py 2026-04-30 19:17:18 UTC (rev 10317)
+++ trunk/docutils/test/test_writers/test_latex2e.py 2026-04-30 19:17:27 UTC (rev 10318)
@@ -1018,12 +1018,6 @@
automatically using a \textquotedbl{}\#\textquotedbl{}-prefixed label. This footnote has a
label so it can be referred to from multiple places, both as a
footnote reference (\footref{label}) and as a \hyperref[label]{hyperlink reference}.
-}%
-\refstepcounter{footnote}\footnotetext{\label{label}%
-Footnotes may be numbered, either manually or
-automatically using a \textquotedbl{}\#\textquotedbl{}-prefixed label. This footnote has a
-label so it can be referred to from multiple places, both as a
-footnote reference (\footref{label}) and as a \hyperref[label]{hyperlink reference}.
}, or symbolic\footnote{\label{footnote-3}%
With \textquotedbl{}latex-footnotes\textquotedbl{}, symbolic footnotes and numbered footnotes
are merged, the choice of symbol vs. number is done by LaTeX styling.
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.