[ADD] раздел ПРИЛОЖЕНИЕ и листинги длиннее страницы
ПРИЛОЖЕНИЕ добавлено к ненумерованным разделам с новой страницы и попадает
в содержание наравне с введением и заключением.
Листинг длиннее страницы больше не оборачивается в плавающий объект: LaTeX
не смог бы его разместить и вынес бы в конец документа. Рамка у такого
листинга снимается — она всё равно обрывается на границе страницы.
В приложении не плавает ни один листинг независимо от длины: там они идут
подряд и без текста вокруг, а плавающий объект переставлял короткий листинг
за длинный и ломал порядок. Чтобы обработчик знал раздел, составные
обработчики теперь получают рендерер — как и блочные.
Имя ненумерованного раздела ищется в исходном тексте, а не в готовом LaTeX:
у выделенного «==ПРИЛОЖЕНИЕ==» готовый текст — это \hlw{ПРИЛОЖЕНИЕ}, и
раздел нумеровался как обычный.
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import pytest
|
||||
|
||||
from md2gost.handlers.code import PAGE_LINES
|
||||
from md2gost.handlers.table import _STRETCH
|
||||
from md2gost.latex.titlepages import TITLEPAGES
|
||||
from md2gost.parser import Parser
|
||||
@@ -518,6 +519,45 @@ def test_abbreviation_column_is_as_wide_as_the_abbreviation() -> None:
|
||||
assert "\\begin{tabularx}{\\linewidth}" in tex
|
||||
|
||||
|
||||
def test_appendix_starts_a_new_page_and_reaches_the_contents() -> None:
|
||||
tex = render("# ПРИЛОЖЕНИЕ\n\nЛистинг 1 — Код\n\n```cpp\nint x;\n```\n")
|
||||
assert "\\section{" not in tex
|
||||
assert "\\clearpage" in tex
|
||||
assert "\\addcontentsline{toc}{section}{ПРИЛОЖЕНИЕ}" in tex
|
||||
|
||||
|
||||
def test_marked_unnumbered_heading_is_still_recognised() -> None:
|
||||
"""В «==ПРИЛОЖЕНИЕ==» имя раздела не должно теряться за разметкой."""
|
||||
tex = render("# ==ПРИЛОЖЕНИЕ==\n\nТекст.\n")
|
||||
assert "\\section{" not in tex
|
||||
assert "\\clearpage" in tex
|
||||
assert "\\hlw{ПРИЛОЖЕНИЕ}" in tex
|
||||
|
||||
|
||||
def test_long_listing_does_not_float() -> None:
|
||||
"""Листинг длиннее страницы не помещается в плавающий объект."""
|
||||
code = "\n".join(f"int x{i};" for i in range(PAGE_LINES + 1))
|
||||
tex = body(render(f"Листинг 1 — Длинный\n\n```cpp\n{code}\n```\n"))
|
||||
assert "caption={Длинный}" in tex
|
||||
assert "float=" not in tex
|
||||
assert "frame=none" in tex
|
||||
|
||||
|
||||
def test_listing_in_appendix_does_not_float() -> None:
|
||||
"""В приложении плавающий объект переставил бы листинги местами."""
|
||||
tex = body(render(
|
||||
"# ПРИЛОЖЕНИЕ\n\nЛистинг 1 — Короткий\n\n```cpp\nint x;\n```\n"
|
||||
))
|
||||
assert "float=" not in tex
|
||||
assert "frame=none" in tex
|
||||
|
||||
|
||||
def test_short_listing_keeps_the_frame() -> None:
|
||||
tex = body(render("Листинг 1 — Короткий\n\n```cpp\nint x;\n```\n"))
|
||||
assert "float=htbp" in tex
|
||||
assert "frame=none" not in tex
|
||||
|
||||
|
||||
def test_cpp_uses_extended_dialect() -> None:
|
||||
"""Встроенный C++ в listings не знает auto, nullptr и override."""
|
||||
tex = body(render("```cpp\nauto x = nullptr;\n```\n"))
|
||||
|
||||
Reference in New Issue
Block a user