mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Update CHANGES for PR #11333
This commit is contained in:
parent
61576516d4
commit
e2f66cea49
3
CHANGES
3
CHANGES
@ -75,6 +75,9 @@ Bugs fixed
|
||||
|
||||
* #11079: LaTeX: figures with align attribute may disappear and strangely impact
|
||||
following lists
|
||||
* #11093: LaTeX: fix "multiply-defined references" PDF build warnings when one or
|
||||
more reST labels directly precede an :rst:dir:`py:module` or :rst:dir:`automodule`
|
||||
directive. Patch by Bénédikt Tran (picnixz)
|
||||
* #11110: LaTeX: Figures go missing from latex pdf if their files have the same
|
||||
base name and they use a post transform. Patch by aaron-cooper
|
||||
* LaTeX: fix potential color leak from shadow to border of rounded boxes, if
|
||||
|
@ -1504,14 +1504,14 @@ class LaTeXTranslator(SphinxTranslator):
|
||||
if node.get('ismod', False):
|
||||
# Detect if the previous nodes are label targets. If so, remove
|
||||
# the refid thereof from node['ids'] to avoid duplicated ids.
|
||||
def has_dup_label(sib: Element | None) -> bool:
|
||||
def has_dup_label(sib: Node | None) -> bool:
|
||||
return isinstance(sib, nodes.target) and sib.get('refid') in node['ids']
|
||||
|
||||
prev: Element | None = get_prev_node(node)
|
||||
prev = get_prev_node(node)
|
||||
if has_dup_label(prev):
|
||||
ids = node['ids'][:] # copy to avoid side-effects
|
||||
while has_dup_label(prev):
|
||||
ids.remove(prev['refid'])
|
||||
ids.remove(prev['refid']) # type: ignore
|
||||
prev = get_prev_node(prev)
|
||||
else:
|
||||
ids = iter(node['ids']) # read-only iterator
|
||||
|
@ -1720,18 +1720,21 @@ def test_duplicated_labels_before_module(app, status, warning):
|
||||
return content.count(text)
|
||||
|
||||
pattern = r'\\phantomsection\\label\{\\detokenize\{index:label-(?:auto-)?\d+[a-z]*}}'
|
||||
expect_labels = {match.group() for match in re.finditer(pattern, content)}
|
||||
result_labels = set()
|
||||
# labels found in the TeX output
|
||||
output_labels = frozenset(match.group() for match in re.finditer(pattern, content))
|
||||
# labels that have been tested and occurring exactly once in the output
|
||||
tested_labels = set()
|
||||
|
||||
# iterate over the (explicit) labels in the corresponding index.rst
|
||||
for rst_label_name in {
|
||||
for rst_label_name in [
|
||||
'label_1a', 'label_1b', 'label_2', 'label_3',
|
||||
'label_auto_1a', 'label_auto_1b', 'label_auto_2', 'label_auto_3',
|
||||
}:
|
||||
]:
|
||||
tex_label_name = 'index:' + rst_label_name.replace('_', '-')
|
||||
tex_label_code = r'\phantomsection\label{\detokenize{%s}}' % tex_label_name
|
||||
assert content.count(tex_label_code) == 1, f'duplicated label: {tex_label_name!r}'
|
||||
result_labels.add(tex_label_code)
|
||||
tested_labels.add(tex_label_code)
|
||||
|
||||
# sort the labels for a better visual diff, if any
|
||||
assert sorted(result_labels) == sorted(expect_labels)
|
||||
# ensure that we did not forget any label to check
|
||||
# and if so, report them nicely in case of failure
|
||||
assert sorted(tested_labels) == sorted(output_labels)
|
||||
|
Loading…
Reference in New Issue
Block a user