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 ...")
|
print("Erzeuge LaTeX ...")
|
||||||
subprocess.run(befehl, cwd=BASIS, check=True)
|
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 "
|
print("Uebersetze mit xelatex (3 Durchlaeufe, dazwischen texindy fuer "
|
||||||
"das Stichwortregister) ...")
|
"das Stichwortregister) ...")
|
||||||
for durchlauf in range(1, 4):
|
for durchlauf in range(1, 4):
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue