pytex-preprocessor 0.4.6__tar.gz → 0.4.7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. {pytex_preprocessor-0.4.6/src/pytex_preprocessor.egg-info → pytex_preprocessor-0.4.7}/PKG-INFO +1 -1
  2. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/pyproject.toml +1 -1
  3. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/model/image.py +4 -1
  4. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_builder/variants.py +8 -0
  5. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/document.py +4 -0
  6. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/titlepage.py +10 -4
  7. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7/src/pytex_preprocessor.egg-info}/PKG-INFO +1 -1
  8. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/LICENSE +0 -0
  9. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/README.md +0 -0
  10. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/setup.cfg +0 -0
  11. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/__init__.py +0 -0
  12. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/commands/__init__.py +0 -0
  13. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/commands/biblatex.py +0 -0
  14. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/commands/builtin.py +0 -0
  15. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/commands/captions.py +0 -0
  16. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/commands/cleveref.py +0 -0
  17. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/commands/colors.py +0 -0
  18. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/commands/conditionals.py +0 -0
  19. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/commands/counters.py +0 -0
  20. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/commands/definitions.py +0 -0
  21. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/commands/floats.py +0 -0
  22. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/commands/font.py +0 -0
  23. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/commands/fontawesome.py +0 -0
  24. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/commands/fontspec.py +0 -0
  25. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/commands/geometry.py +0 -0
  26. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/commands/glossaries.py +0 -0
  27. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/commands/graphics.py +0 -0
  28. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/commands/hooks.py +0 -0
  29. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/commands/hyperref.py +0 -0
  30. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/commands/lengths.py +0 -0
  31. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/commands/listings.py +0 -0
  32. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/commands/mdframed.py +0 -0
  33. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/commands/picture.py +0 -0
  34. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/commands/setspace.py +0 -0
  35. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/commands/tables.py +0 -0
  36. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/helpers/__init__.py +0 -0
  37. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/helpers/coerce.py +0 -0
  38. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/helpers/parenting.py +0 -0
  39. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/helpers/sanitize.py +0 -0
  40. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/helpers/with_package.py +0 -0
  41. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/interface/__init__.py +0 -0
  42. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/interface/control_sequence.py +0 -0
  43. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/interface/package.py +0 -0
  44. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/interface/tex.py +0 -0
  45. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/model/__init__.py +0 -0
  46. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/model/color.py +0 -0
  47. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/model/comment.py +0 -0
  48. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/model/concat.py +0 -0
  49. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/model/control_sequence.py +0 -0
  50. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/model/document.py +0 -0
  51. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/model/document_class.py +0 -0
  52. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/model/empty.py +0 -0
  53. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/model/environment.py +0 -0
  54. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/model/include.py +0 -0
  55. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/model/length.py +0 -0
  56. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/model/math.py +0 -0
  57. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/model/package.py +0 -0
  58. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/model/raw.py +0 -0
  59. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/packages.py +0 -0
  60. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/registry.py +0 -0
  61. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex/template.py +0 -0
  62. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_analyze/__init__.py +0 -0
  63. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_analyze/analyze.py +0 -0
  64. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_analyze/optimize.py +0 -0
  65. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_builder/__init__.py +0 -0
  66. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_builder/build.py +0 -0
  67. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_builder/console.py +0 -0
  68. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_builder/render.py +0 -0
  69. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_builder/tectonic.py +0 -0
  70. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_builder/tex2py.py +0 -0
  71. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_builder/tree.py +0 -0
  72. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/__init__.py +0 -0
  73. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/assets/fonts/Blender/Blender-Bold.ttf +0 -0
  74. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/assets/fonts/Blender/Blender-BoldItalic.ttf +0 -0
  75. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/assets/fonts/Blender/Blender-Book.ttf +0 -0
  76. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/assets/fonts/Blender/Blender-BookItalic.ttf +0 -0
  77. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/assets/fonts/Blender/Blender-Medium.ttf +0 -0
  78. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/assets/fonts/Blender/Blender-MediumItalic.ttf +0 -0
  79. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/assets/fonts/Blender/Blender-Strong.ttf +0 -0
  80. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/assets/fonts/Blender/Blender-Thin.ttf +0 -0
  81. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/assets/fonts/Blender/Blender-ThinItalic.ttf +0 -0
  82. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/assets/fonts/DIN/DIN-Black.ttf +0 -0
  83. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/assets/fonts/DIN/DIN-Bold.ttf +0 -0
  84. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/assets/fonts/DIN/DIN-BoldItalic.ttf +0 -0
  85. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/assets/fonts/DIN/DIN-Italic.ttf +0 -0
  86. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/assets/fonts/DIN/DIN-Medium.ttf +0 -0
  87. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/assets/fonts/DIN/DIN-Regular.ttf +0 -0
  88. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/assets/fonts/Times New Roman.ttf +0 -0
  89. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/assets/logos/ASTA.svg +0 -0
  90. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/assets/logos/DUMMY.png +0 -0
  91. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/assets/logos/DUMMY_FOOT.png +0 -0
  92. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/assets/logos/ECHO.svg +0 -0
  93. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/assets/logos/HSRT.pdf +0 -0
  94. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/assets/logos/INF.pdf +0 -0
  95. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/assets/logos/MAKERS-Icon.svg +0 -0
  96. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/assets/logos/MAKERS-RAlign.svg +0 -0
  97. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/assets/logos/MAKERS.svg +0 -0
  98. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/assets/logos/STUPA.pdf +0 -0
  99. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/assets/logos/Skyline.pdf +0 -0
  100. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/boxes.py +0 -0
  101. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/citations.py +0 -0
  102. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/cleveref_names.py +0 -0
  103. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/colors.py +0 -0
  104. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/fonts.py +0 -0
  105. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/glossary.py +0 -0
  106. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/hyperref_config.py +0 -0
  107. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/listings.py +0 -0
  108. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/logos.py +0 -0
  109. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/pagebreak.py +0 -0
  110. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/pagesetup.py +0 -0
  111. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/tex/pagesetup.tex +0 -0
  112. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/variants.py +0 -0
  113. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/voting.py +0 -0
  114. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/watermark.py +0 -0
  115. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_hsrtreport/wordcount.py +0 -0
  116. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_koma/__init__.py +0 -0
  117. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_koma/commands.py +0 -0
  118. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_koma/document.py +0 -0
  119. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_markdown/__init__.py +0 -0
  120. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_markdown/convert.py +0 -0
  121. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_markdown/escape.py +0 -0
  122. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_markdown/frontmatter.py +0 -0
  123. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_markdown/protocol/__init__.py +0 -0
  124. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_markdown/protocol/convert.py +0 -0
  125. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_markdown/protocol/document.py +0 -0
  126. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_markdown/protocol/entries.py +0 -0
  127. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_markdown/protocol/header.py +0 -0
  128. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_markdown/protocol/shortcodes.py +0 -0
  129. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_markdown/protocol/signatures.py +0 -0
  130. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_preprocessor.egg-info/SOURCES.txt +0 -0
  131. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_preprocessor.egg-info/dependency_links.txt +0 -0
  132. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_preprocessor.egg-info/entry_points.txt +0 -0
  133. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_preprocessor.egg-info/requires.txt +0 -0
  134. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_preprocessor.egg-info/top_level.txt +0 -0
  135. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_protocol/__init__.py +0 -0
  136. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_protocol/frontmatter.py +0 -0
  137. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_tikz/__init__.py +0 -0
  138. {pytex_preprocessor-0.4.6 → pytex_preprocessor-0.4.7}/src/pytex_tikz/tikz.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pytex-preprocessor
3
- Version: 0.4.6
3
+ Version: 0.4.7
4
4
  Summary: Type-safe LaTeX document generation with Python
5
5
  Author-email: Frederik Beimgraben <frederik@beimgraben.net>
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pytex-preprocessor"
7
- version = "0.4.6"
7
+ version = "0.4.7"
8
8
  authors = [
9
9
  { name="Frederik Beimgraben", email="frederik@beimgraben.net" },
10
10
  ]
@@ -59,7 +59,10 @@ class IncludeImage(TeX):
59
59
  if src.suffix.lower() in PDF_COMPAT:
60
60
  return src
61
61
  if src.suffix.lower() == ".svg":
62
- digest = hashlib.sha1(src.resolve().as_posix().encode()).hexdigest()[:10]
62
+ # Content-address the cache: hash the SVG bytes, not its path, so an
63
+ # edited source reconverts instead of reusing a stale PDF that
64
+ # happens to live at the same path-derived name.
65
+ digest = hashlib.sha1(src.read_bytes()).hexdigest()[:10]
63
66
  return Path("build") / f"{src.stem}-{digest}.pdf"
64
67
  raise ValueError(f"unsupported image extension: {src.suffix}")
65
68
 
@@ -133,6 +133,14 @@ def _report(
133
133
  author=_escaped(_str(options, "author", "autor")),
134
134
  abstract=_escaped(_str(options, "abstract", "zusammenfassung")),
135
135
  keywords=_escaped(_keywords(options)),
136
+ abstract_heading=_escaped(
137
+ _str(options, "abstract_heading", "abstract_title", "zusammenfassung_titel")
138
+ )
139
+ or "Abstract",
140
+ keywords_heading=_escaped(
141
+ _str(options, "keywords_heading", "keywords_title", "schlagworte_titel")
142
+ )
143
+ or "Keywords",
136
144
  data_lines=_data_lines(options),
137
145
  # Map the shallowest heading in the body to \chapter, so headings nest
138
146
  # under it. Without this, a doc whose top level is `##` (because `#` was
@@ -131,6 +131,8 @@ class HSRTReport(KomaDocument):
131
131
  author: TeX | str | None = None
132
132
  abstract: TeX | str | None = None
133
133
  keywords: TeX | str | None = None
134
+ abstract_heading: str = "Abstract"
135
+ keywords_heading: str = "Keywords"
134
136
  data_lines: tuple[TitlePageDataLine, ...] = ()
135
137
 
136
138
  inline_logos: bool = True
@@ -228,6 +230,8 @@ class HSRTReport(KomaDocument):
228
230
  keywords=self.keywords or "",
229
231
  data_lines=self.data_lines,
230
232
  logo_names=default_logo_names(self.variant),
233
+ abstract_heading=self.abstract_heading,
234
+ keywords_heading=self.keywords_heading,
231
235
  )
232
236
  if self.show_toc:
233
237
  yield Raw(r"\newpage\tableofcontents")
@@ -4,7 +4,6 @@ from typing import Final, override
4
4
 
5
5
  from pytex.commands.builtin import (
6
6
  Blenderfont,
7
- HspaceStar,
8
7
  Newline,
9
8
  Noindent,
10
9
  Rule,
@@ -69,6 +68,8 @@ class TitlePage(TeX):
69
68
  keywords: Final[TeX | str] = ""
70
69
  data_lines: Final[tuple[TitlePageDataLine, ...]] = ()
71
70
  logo_names: Final[tuple[str, ...]] = ()
71
+ abstract_heading: Final[str] = "Abstract"
72
+ keywords_heading: Final[str] = "Keywords"
72
73
  _parent: "TeX | None" = field(default=None, init=False, compare=False, repr=False)
73
74
 
74
75
  def __post_init__(self) -> None:
@@ -98,7 +99,12 @@ class TitlePage(TeX):
98
99
  Concat(
99
100
  Blenderfont(),
100
101
  HugeBig(),
101
- HspaceStar("-2.5pt"),
102
+ # A plain control-word terminator, not an optical kern:
103
+ # the old \hspace*{-2.5pt} shifted only the first line,
104
+ # leaving a wrapped title's later lines misaligned with
105
+ # it and the rule. The space just ends \Huge (TeX gobbles
106
+ # it) so the title's first word is not read as a macro.
107
+ Raw(" "),
102
108
  self.title,
103
109
  )
104
110
  ),
@@ -119,13 +125,13 @@ class TitlePage(TeX):
119
125
  # Abstract and keywords are optional — skip the labels when empty
120
126
  # (e.g. a meeting protocol has neither).
121
127
  if not _is_blank(self.abstract):
122
- yield SectionStar("Abstract")
128
+ yield SectionStar(self.abstract_heading)
123
129
  yield Vspace("-1em")
124
130
  yield self.abstract
125
131
  yield VspaceStar("1em")
126
132
  if not _is_blank(self.keywords):
127
133
  yield Raw(r"\par\noindent ")
128
- yield Textbf("Keywords")
134
+ yield Textbf(self.keywords_heading)
129
135
  yield Raw(r"\par\noindent ")
130
136
  yield self.keywords
131
137
  yield Vfill()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pytex-preprocessor
3
- Version: 0.4.6
3
+ Version: 0.4.7
4
4
  Summary: Type-safe LaTeX document generation with Python
5
5
  Author-email: Frederik Beimgraben <frederik@beimgraben.net>
6
6
  License: GNU GENERAL PUBLIC LICENSE