feat(tex): section-aware multi-file .tex ingest (R-C)
Flatten multi-file arXiv LaTeX (\input/\include) in arxiv.fetch_source so the full body is assembled rather than just the primary file's include skeleton, and add section-aware chunking (tex.chunk_sections) so .tex chunks never span a \section boundary and are labelled by their real heading. The ingest .tex path now produces (section, chunk) pairs, quality-gated together so labels stay aligned; the stored 'section' column gains genuine signal instead of mostly 'body' (serves DQ-3 fidelity + audit R-12). Adds scripts/rc_tex_reingest.py to re-ingest arXiv papers from .tex (dry-run by default; replaces chunks). Tests: flatten_inputs, chunk_sections, multi-file fetch_source, section-label ingest, is_arxiv_id. Full suite 365 passed; ruff + mypy clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -53,6 +53,39 @@ def test_fetch_source_returns_latex(monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
assert "Hello world" in result
|
||||
|
||||
|
||||
def test_fetch_source_flattens_multifile(monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
"""Multi-file projects: \\input/\\include directives are inlined so the body
|
||||
from the included files is returned, not just the primary skeleton (R-C)."""
|
||||
main = (
|
||||
b"\\documentclass{article}\\begin{document}"
|
||||
b"\\input{sections/intro}\\include{proof}\\end{document}"
|
||||
)
|
||||
tar_bytes = _make_tar_gz(
|
||||
{
|
||||
"main.tex": main,
|
||||
"sections/intro.tex": b"INTRODUCTION BODY TEXT",
|
||||
"proof.tex": b"PROOF BODY TEXT",
|
||||
}
|
||||
)
|
||||
|
||||
def mock_get(
|
||||
url: str,
|
||||
*,
|
||||
timeout: int = 60,
|
||||
follow_redirects: bool = True,
|
||||
) -> httpx.Response:
|
||||
return httpx.Response(200, content=tar_bytes)
|
||||
|
||||
monkeypatch.setattr(httpx, "get", mock_get)
|
||||
|
||||
result = arxiv.fetch_source("2301.07041")
|
||||
|
||||
assert result is not None
|
||||
assert "INTRODUCTION BODY TEXT" in result # \input was inlined
|
||||
assert "PROOF BODY TEXT" in result # \include was inlined
|
||||
assert "\\input" not in result and "\\include" not in result
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# fetch_source — 404 → None
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user