PDF-TOC-Links: \phantomsection vor \addcontentsline für unnummerierte Überschriften
Pandoc generiert für {-}-Überschriften \section* + \addcontentsline,
aber ohne \phantomsection davor. Die TOC-Links zeigen dann auf die
falsche Position — erst ab der ersten nummerierten \section (Notation
und Abkürzungen) stimmen sie wieder, weil diese ihren hyperref-Anker
automatisch bekommt.
Fix in baue_pdf(): nach dem Pandoc-Lauf jeden \addcontentsline{toc}
ein \phantomsection voranstellen; eine zweite Sub verhindert Dopplung
beim Stichwortregister, das bereits eines hat.
This commit is contained in:
parent
1070baad7a
commit
141178f4a1
3 changed files with 21 additions and 0 deletions
BIN
OR_HTML_04/Operations_Research_mit_Python_Version_04.pdf
generated
BIN
OR_HTML_04/Operations_Research_mit_Python_Version_04.pdf
generated
Binary file not shown.
Binary file not shown.
|
|
@ -1175,6 +1175,27 @@ def baue_pdf() -> None:
|
|||
print("Erzeuge LaTeX ...")
|
||||
subprocess.run(befehl, cwd=BASIS, check=True)
|
||||
|
||||
# Pandoc generiert fuer unnummerierte Ueberschriften ({-}) \section* +
|
||||
# \addcontentsline, aber OHNE \phantomsection dazwischen. Die TOC-Links
|
||||
# zeigen dann alle auf die falsche Position (auf den zuletzt von hyperref
|
||||
# gesetzten Anker statt auf die eigene Seite). Ab der ersten nummerierten
|
||||
# \section stimmt es wieder, weil diese ihren Anker automatisch bekommt.
|
||||
# Fix: \phantomsection vor jedes \addcontentsline setzen, das auf eine
|
||||
# unnummerierte Ueberschrift folgt. Das Stichwortregister hat es bereits
|
||||
# (siehe _STICHWORTREGISTER_BLOCK) - die zweite Sub verhindert Dopplung.
|
||||
with open(tex, encoding="utf-8") as f:
|
||||
tex_inhalt = f.read()
|
||||
tex_inhalt = re.sub(
|
||||
r"(\\addcontentsline\{toc\})",
|
||||
r"\\phantomsection\n\1",
|
||||
tex_inhalt)
|
||||
tex_inhalt = re.sub(
|
||||
r"\\phantomsection\s*\\phantomsection",
|
||||
r"\\phantomsection",
|
||||
tex_inhalt)
|
||||
with open(tex, "w", encoding="utf-8") as f:
|
||||
f.write(tex_inhalt)
|
||||
|
||||
print("Uebersetze mit xelatex (3 Durchlaeufe, dazwischen texindy fuer "
|
||||
"das Stichwortregister) ...")
|
||||
for durchlauf in range(1, 4):
|
||||
|
|
|
|||
Loading…
Reference in a new issue