rxiv-maker 1.17.0__tar.gz → 1.18.1__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.
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/CHANGELOG.md +90 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/PKG-INFO +1 -1
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/__version__.py +1 -1
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/framework/workflow_commands.py +3 -1
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/exporters/docx_citation_mapper.py +3 -84
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/exporters/docx_content_processor.py +5 -23
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/exporters/docx_exporter.py +14 -28
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/exporters/docx_writer.py +201 -75
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/processors/template_processor.py +10 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/templates/registry.py +52 -12
- rxiv_maker-1.18.1/src/rxiv_maker/utils/accent_character_map.py +150 -0
- rxiv_maker-1.18.1/src/rxiv_maker/utils/author_affiliation_processor.py +128 -0
- rxiv_maker-1.18.1/src/rxiv_maker/utils/citation_range_formatter.py +118 -0
- rxiv_maker-1.18.1/src/rxiv_maker/utils/comment_filter.py +46 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/docx_helpers.py +4 -117
- rxiv_maker-1.18.1/src/rxiv_maker/utils/label_extractor.py +185 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/tex/template.tex +2 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/cli/test_changelog_command.py +26 -2
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/cli/test_init_command.py +38 -27
- rxiv_maker-1.18.1/tests/fixtures/docx_export/sample_manuscript/2025__unknown_et_al__rxiv.docx +0 -0
- rxiv_maker-1.17.0/tests/fixtures/docx_export/sample_manuscript/2025__unknown_et_al__rxiv.docx +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/.gitignore +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/LICENSE +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/README.md +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/pyproject.toml +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/docs/api/README.md +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/docs/api/index.md +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/logo/logo-rxiv-maker.afdesign +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/logo/logo-rxiv-maker.png +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/logo/logo-rxiv-maker.svg +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/__init__.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/__init__.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/__main__.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/__init__.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/arxiv.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/bibliography.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/build.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/cache_management.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/changelog.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/check_installation.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/clean.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/completion.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/config.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/create_repo.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/docx.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/figures.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/get_rxiv_preprint.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/init.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/install_deps.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/repo_init.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/repos.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/repos_search.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/setup.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/track_changes.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/upgrade.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/validate.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/version.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/framework/__init__.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/framework/base.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/framework/cache_commands.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/framework/config_commands.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/framework/content_commands.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/framework/decorators.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/framework/utility_commands.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/framework.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/interactive.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/interactive_prompts.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/main.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/config/defaults.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/config/validator.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/__init__.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/citation_processor.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/code_processor.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/comment_processor.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/custom_command_processor.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/figure_processor.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/html_processor.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/list_processor.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/math_processor.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/md2tex.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/python_executor.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/section_processor.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/supplementary_note_processor.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/table_processor.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/text_formatters.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/types.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/url_processor.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/cache/__init__.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/cache/advanced_cache.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/cache/bibliography_cache.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/cache/cache_utils.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/cache/doi_cache.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/cache/secure_cache_utils.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/content_processor.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/environment_bootstrap.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/environment_manager.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/error_codes.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/error_recovery.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/logging_config.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/managers/__init__.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/managers/cache_manager.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/managers/config_manager.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/managers/dependency_manager.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/managers/execution_manager.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/managers/file_manager.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/managers/install_manager.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/managers/state_manager.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/managers/unified_config_manager.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/managers/validation_manager.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/managers/workflow_manager.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/path_manager.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/progress_framework.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/repo_config.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/repository.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/session_optimizer.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/validation_framework.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/data/tips.yaml +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/engines/__init__.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/engines/operations/__init__.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/engines/operations/add_bibliography.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/engines/operations/build_manager.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/engines/operations/cleanup.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/engines/operations/fix_bibliography.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/engines/operations/generate_docs.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/engines/operations/generate_figures.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/engines/operations/generate_preprint.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/engines/operations/prepare_arxiv.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/engines/operations/setup_environment.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/engines/operations/track_changes.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/engines/operations/validate.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/engines/operations/validate_pdf.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/exporters/__init__.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/install/__init__.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/install/dependency_handlers/__init__.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/install/dependency_handlers/latex.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/install/dependency_handlers/r_lang.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/install/dependency_handlers/system_libs.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/install/platform_installers/__init__.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/install/platform_installers/base.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/install/platform_installers/linux.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/install/platform_installers/macos.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/install/platform_installers/windows.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/install/utils/__init__.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/install/utils/logging.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/install/utils/progress.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/install/utils/verification.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/manuscript_utils/__init__.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/manuscript_utils/figure_utils.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/processors/__init__.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/processors/author_processor.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/processors/markdown_preprocessor.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/processors/yaml_processor.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/rxiv_maker_cli.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/scripts/__init__.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/scripts/custom_doc_generator.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/scripts/validate_manuscript.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/services/__init__.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/services/base.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/services/build_service.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/services/configuration_service.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/services/manuscript_service.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/services/publication_service.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/services/validation_service.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/templates/__init__.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/templates/manager.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/tex/python_execution_section.tex +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/__init__.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/author_name_formatter.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/bibliography_checksum.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/bibliography_parser.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/bst_generator.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/changelog_parser.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/citation_utils.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/dependency_checker.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/doi_resolver.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/email_encoder.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/figure_checksum.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/file_helpers.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/github.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/homebrew_checker.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/install_detector.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/operation_ids.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/pdf_splitter.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/pdf_utils.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/performance.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/platform.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/python_execution_reporter.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/retry.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/rich_upgrade_notifier.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/text_utils.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/tips.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/title_sync.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/unicode_safe.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/update_checker.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/url_to_doi.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/validate.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/validators/__init__.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/validators/base_validator.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/validators/citation_validator.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/validators/doi/__init__.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/validators/doi/api_clients.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/validators/doi/metadata_comparator.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/validators/doi_validator.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/validators/figure_validator.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/validators/latex_error_parser.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/validators/math_validator.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/validators/pdf_validator.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/validators/reference_validator.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/validators/syntax_validator.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/tex/style/rxiv_maker_style.bst +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/tex/style/rxiv_maker_style.cls +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/__init__.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/cli/__init__.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/cli/test_build.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/cli/test_main.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/conftest.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/e2e/__init__.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/e2e/test_dummy_manuscript_generator.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/e2e/test_figure_workflow_validation.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/fixtures/00_CONFIG.yml +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/fixtures/01_MAIN.md +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/fixtures/03_REFERENCES.bib +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/fixtures/FIGURES/Fig1.png +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/fixtures/FIGURES/Fig2.png +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/fixtures/FIGURES/Fig3.png +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/fixtures/README.md +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/fixtures/docx_export/sample_manuscript/01_MAIN.md +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/fixtures/docx_export/sample_manuscript/02_SUPPLEMENTARY_INFO.md +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/fixtures/docx_export/sample_manuscript/03_REFERENCES.bib +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/fixtures/docx_export/sample_manuscript/sample_manuscript.docx +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/__init__.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_article_generation.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_bibliography_author_format_docx.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_binary_distribution.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_centralized_components.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_citation_injection.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_comment_system_integration.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_docx_export_integration.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_doi_fallback_integration.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_doi_validation_integration.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_example_manuscript.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_guillaume_fixtures.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_homebrew_workflow_validation.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_infrastructure_suite.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_init_build_workflow.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_install_verification_integration.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_latex_dependency_integration.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_manuscript_directory_integration.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_manuscript_python_execution_reporting.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_practical_manuscript_workflows.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_pypi_package_integration.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_python_execution_integration.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_repository_cli_integration.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_supplementary_formatting.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_user_reported_issue.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_validation_workflow.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/regression/README.md +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/regression/conftest.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/regression/test_cli_argument_parsing.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/regression/test_discord_reported_issues.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/regression/test_error_message_quality.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/regression/test_google_colab_integration.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/regression/test_guillaume_edge_cases.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/regression/test_guillaume_pr131_rewrite.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/regression/test_path_resolution.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/regression/test_widget_author_behavior.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/regression/test_widget_interactions_playwright.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/smoke/__init__.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/smoke/test_basic_functionality.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/smoke/test_cli_smoke.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/system/__init__.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/system/test_ci_matrix.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/system/test_cli_workflows.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/system/test_end_to_end.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/test_homebrew_checker.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/test_install_detector.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/__init__.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/exporters/__init__.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/exporters/test_docx_citation_mapper.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/exporters/test_docx_content_processor.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_add_bibliography.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_arxiv_command.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_async_execution_manager.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_author_name_formatter.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_author_processor.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_bst_generator.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_build_command.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_build_manager.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_build_manager_manuscript_path.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_cache_security.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_cache_utils.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_check_installation_command.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_citation_processor.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_citation_rendering.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_citation_style.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_citation_utils.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_cli_cleanup_integration.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_cli_structure.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_comment_processor.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_conda_installation_manager.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_conda_platform_detection.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_cross_platform_optimizations.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_custom_command_processor.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_dependency_manager.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_dependency_package_names.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_docx_doi_resolution.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_docx_helpers.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_doi_fallback_system.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_doi_resolver.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_doi_validator.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_email_encoder.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_environment_manager.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_error_handling_scenarios.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_execution_manager_comprehensive.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_figure_generator.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_figure_processor.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_figure_processor_error_handling.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_file_helpers.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_fix_bibliography.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_generate_docs.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_generate_preprint.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_github.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_github_actions_integration.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_importlib_edge_cases.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_install_platform_installers.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_install_system_libs.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_install_verification.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_interactive_path_change.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_interactive_validators.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_latex_dependency_handler.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_manuscript_figure_utils.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_manuscript_repository.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_math_processor.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_md2tex.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_mermaid_fallback.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_path_manager.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_pdf_validator.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_platform_comprehensive.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_platform_detector.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_processor_suite.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_python_execution_reporter.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_python_executor.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_release_orchestrator.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_repository_manager.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_rich_upgrade_notifier.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_rxiv_setup_command.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_security_features.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_security_scanner.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_setup_environment.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_style_file_resolution.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_supplementary_note_processor.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_table_rotation.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_template_processor.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_text_formatters.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_text_utils.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_tips.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_title_sync.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_title_sync_validation.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_track_changes.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_trailing_slash_regression.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_upgrade_command.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_url_to_doi.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_utils.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_validate_backticks.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_validate_command_fixed.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_validate_manuscript.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_validation_suite.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_validators.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_yaml_processor.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/visual/README.md +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/visual/figure-positioning/00_CONFIG.yml +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/visual/figure-positioning/01_MAIN.md +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/visual/figure-positioning/03_REFERENCES.bib +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/visual/figure-positioning/FIGURES/Figure__positioning_test.png +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/visual/figure-positioning/FIGURES/Figure__positioning_test.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/visual/figure-positioning/FIGURES/ReadyFig.png +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/visual/figure-positioning/FIGURES/ReadyFig.py +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/visual/figure-positioning/README.md +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/visual/methods-placement/00_CONFIG.yml +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/visual/methods-placement/01_MAIN.md +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/visual/methods-placement/02_SUPPLEMENTARY_INFO.md +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/visual/methods-placement/03_REFERENCES.bib +0 -0
- {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/visual/methods-placement/README.md +0 -0
|
@@ -7,6 +7,96 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [1.18.1] - 2024-12-24
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **Complete Template Sections**: All standard manuscript sections now included by default in `rxiv init`
|
|
15
|
+
- Data Availability: Repository information and DOI guidance
|
|
16
|
+
- Code Availability: GitHub links, software versions, licensing details
|
|
17
|
+
- Author Contributions: Role descriptions with author initials
|
|
18
|
+
- Acknowledgements: Non-author contributors and assistance
|
|
19
|
+
- Funding: Grant information and funding declarations
|
|
20
|
+
- Competing Interests: Conflict of interest statements
|
|
21
|
+
- Ensures manuscripts include all sections required by most journals
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
|
|
25
|
+
- **Template Standardization**: Consistent section structure across all template types
|
|
26
|
+
- Journal template now includes all standard sections (Data/Code Availability, Author Contributions, Acknowledgements)
|
|
27
|
+
- Preprint template now includes Acknowledgements section
|
|
28
|
+
- All templates use same section ordering for consistency
|
|
29
|
+
|
|
30
|
+
### Fixed
|
|
31
|
+
|
|
32
|
+
- **Funding Section in PDF**: Funding section now correctly appears in generated PDFs
|
|
33
|
+
- Added `<PY-RPL:FUNDING-BLOCK>` placeholder to LaTeX template
|
|
34
|
+
- Added funding block generation logic to template processor
|
|
35
|
+
- Funding environment was defined in style file but not used in pipeline
|
|
36
|
+
- **DOCX Figure Width**: Figures no longer exceed text line width in DOCX output
|
|
37
|
+
- Changed from hardcoded 6.5" width to dynamic calculation from document dimensions
|
|
38
|
+
- Calculates available width from page width minus left/right margins
|
|
39
|
+
- Ensures figures fit properly regardless of page size or margin settings
|
|
40
|
+
- **Template Clarity**: Removed confusing "References" heading from all templates
|
|
41
|
+
- Eliminates confusion between manual References heading and auto-generated Bibliography section
|
|
42
|
+
- Users no longer see duplicate or conflicting reference-related headings
|
|
43
|
+
|
|
44
|
+
### Documentation
|
|
45
|
+
|
|
46
|
+
- Template placeholder text provides clear guidance on what content to include in each section
|
|
47
|
+
- Section ordering follows standard scientific manuscript structure
|
|
48
|
+
|
|
49
|
+
## [1.18.0] - 2024-12-23
|
|
50
|
+
|
|
51
|
+
### Added
|
|
52
|
+
|
|
53
|
+
- **DOCX Configuration Options**: New manuscript config options for enhanced control
|
|
54
|
+
- `docx.hide_highlighting`: Disable colored highlighting of references (default: false)
|
|
55
|
+
- `docx.hide_comments`: Disable comment inclusion in output (default: false)
|
|
56
|
+
- Provides flexibility for different journal submission requirements
|
|
57
|
+
- **Co-First Author Support**: Full support for co-first authors in DOCX export
|
|
58
|
+
- Dagger markers (†) for co-first authors
|
|
59
|
+
- "These authors contributed equally" note section
|
|
60
|
+
- Automatic detection based on author metadata
|
|
61
|
+
- **Corresponding Author Support**: Enhanced author metadata handling
|
|
62
|
+
- Asterisk markers (*) for corresponding authors
|
|
63
|
+
- Dedicated correspondence section with email information
|
|
64
|
+
- Email decoding for both plain `email` and base64-encoded `email64` fields
|
|
65
|
+
- **Centralized Utilities**: Five new shared utility modules to reduce code duplication
|
|
66
|
+
- `utils/accent_character_map.py`: LaTeX accent → Unicode conversion (60+ mappings)
|
|
67
|
+
- `utils/comment_filter.py`: Metadata comment filtering logic
|
|
68
|
+
- `utils/citation_range_formatter.py`: Citation range formatting ([1][2][3] → [1-3])
|
|
69
|
+
- `utils/label_extractor.py`: Cross-reference label extraction for figures, tables, equations
|
|
70
|
+
- `utils/author_affiliation_processor.py`: Author and affiliation processing logic
|
|
71
|
+
- Ensures consistency between DOCX and PDF/LaTeX generation
|
|
72
|
+
- Single source of truth reduces bug surface area and improves maintainability
|
|
73
|
+
|
|
74
|
+
### Changed
|
|
75
|
+
|
|
76
|
+
- **DOCX Typography**: Professional font and sizing improvements
|
|
77
|
+
- Arial as default font for entire document (Normal style + all heading styles 1-9)
|
|
78
|
+
- Standardized 8pt font size for affiliations, correspondence, co-first notes, and legends
|
|
79
|
+
- All headings now explicitly use black font color (RGBColor(0, 0, 0))
|
|
80
|
+
- Improved readability and professional appearance
|
|
81
|
+
|
|
82
|
+
### Fixed
|
|
83
|
+
|
|
84
|
+
- **Init Command Environment Variable**: Fixed test isolation issue in init command
|
|
85
|
+
- Init command no longer uses `MANUSCRIPT_PATH` environment variable
|
|
86
|
+
- Environment variable is for finding existing manuscripts, not initialization
|
|
87
|
+
- Prevents test failures where multiple tests tried to use the same directory
|
|
88
|
+
- All 25 init command tests now pass reliably in CI
|
|
89
|
+
- **Init Command CI Compatibility**: Fixed subprocess execution in nox environments
|
|
90
|
+
- Changed from `["rxiv"]` to `[sys.executable, "-m", "rxiv_maker.cli"]`
|
|
91
|
+
- Ensures init command tests work in CI nox environments where `rxiv` may not be in PATH
|
|
92
|
+
- Improves test reliability across different execution contexts
|
|
93
|
+
|
|
94
|
+
### Documentation
|
|
95
|
+
|
|
96
|
+
- **Code Reduction**: Removed ~100 lines of duplicate code from DOCX exporter through centralization
|
|
97
|
+
- **Backward Compatibility**: All changes maintain existing behavior with default configuration
|
|
98
|
+
- **Testing**: All 37 DOCX tests pass (26 passed, 9 skipped, 2 warnings)
|
|
99
|
+
|
|
10
100
|
## [1.17.0] - 2025-12-22
|
|
11
101
|
|
|
12
102
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: rxiv-maker
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.18.1
|
|
4
4
|
Summary: Write scientific preprints in Markdown. Generate publication-ready PDFs efficiently.
|
|
5
5
|
Project-URL: Homepage, https://github.com/HenriquesLab/rxiv-maker
|
|
6
6
|
Project-URL: Documentation, https://github.com/HenriquesLab/rxiv-maker#readme
|
|
@@ -30,8 +30,10 @@ class InitCommand(BaseCommand):
|
|
|
30
30
|
self.engine = "local" # Only local engine is supported
|
|
31
31
|
|
|
32
32
|
# Store manuscript path without PathManager validation since we're creating the directory
|
|
33
|
+
# NOTE: For init command, we should NOT use environment variable MANUSCRIPT_PATH
|
|
34
|
+
# as it's meant for finding existing manuscripts, not determining where to initialize
|
|
33
35
|
if manuscript_path is None:
|
|
34
|
-
manuscript_path =
|
|
36
|
+
manuscript_path = "MANUSCRIPT"
|
|
35
37
|
|
|
36
38
|
# Store the raw path for use in execute_operation
|
|
37
39
|
self.raw_manuscript_path = manuscript_path
|
|
@@ -8,6 +8,7 @@ import re
|
|
|
8
8
|
from typing import Dict, List
|
|
9
9
|
|
|
10
10
|
from ..converters.citation_processor import extract_citations_from_text
|
|
11
|
+
from ..utils.citation_range_formatter import format_citation_ranges
|
|
11
12
|
|
|
12
13
|
|
|
13
14
|
class CitationMapper:
|
|
@@ -17,97 +18,15 @@ class CitationMapper:
|
|
|
17
18
|
def _format_citation_ranges(text: str) -> str:
|
|
18
19
|
"""Format consecutive citations as ranges.
|
|
19
20
|
|
|
20
|
-
|
|
21
|
-
Also formats comma-separated lists like [1, 2, 3] to [1-3].
|
|
21
|
+
Uses centralized citation range formatter from utils module.
|
|
22
22
|
|
|
23
23
|
Args:
|
|
24
24
|
text: Text with numbered citations
|
|
25
25
|
|
|
26
26
|
Returns:
|
|
27
27
|
Text with consecutive citations formatted as ranges
|
|
28
|
-
|
|
29
|
-
Example:
|
|
30
|
-
>>> CitationMapper._format_citation_ranges("text [1][2][3] more")
|
|
31
|
-
'text [1-3] more'
|
|
32
|
-
>>> CitationMapper._format_citation_ranges("text [1, 2, 3] more")
|
|
33
|
-
'text [1-3] more'
|
|
34
|
-
>>> CitationMapper._format_citation_ranges("text [1][3][4] more")
|
|
35
|
-
'text [1][3-4] more'
|
|
36
|
-
"""
|
|
37
|
-
|
|
38
|
-
# Pattern 1: Handle adjacent bracketed citations [1][2][3] or [1] [2] [3]
|
|
39
|
-
def combine_adjacent(match_obj):
|
|
40
|
-
# Extract all numbers from consecutive brackets (allowing spaces between)
|
|
41
|
-
numbers = [int(n) for n in re.findall(r"\[(\d+)\]", match_obj.group(0))]
|
|
42
|
-
return CitationMapper._format_number_list(numbers)
|
|
43
|
-
|
|
44
|
-
# Find sequences of adjacent bracketed numbers (with optional spaces between)
|
|
45
|
-
text = re.sub(r"(?:\[\d+\]\s*){2,}", combine_adjacent, text)
|
|
46
|
-
|
|
47
|
-
# Pattern 2: Handle comma-separated citations within single brackets [1, 2, 3]
|
|
48
|
-
def combine_comma_separated(match_obj):
|
|
49
|
-
# Extract all numbers from comma-separated list
|
|
50
|
-
numbers_str = match_obj.group(1)
|
|
51
|
-
numbers = [int(n.strip()) for n in numbers_str.split(",")]
|
|
52
|
-
return CitationMapper._format_number_list(numbers)
|
|
53
|
-
|
|
54
|
-
text = re.sub(r"\[([\d,\s]+)\]", combine_comma_separated, text)
|
|
55
|
-
|
|
56
|
-
return text
|
|
57
|
-
|
|
58
|
-
@staticmethod
|
|
59
|
-
def _format_number_list(numbers: List[int]) -> str:
|
|
60
|
-
"""Format a list of citation numbers as ranges.
|
|
61
|
-
|
|
62
|
-
Args:
|
|
63
|
-
numbers: List of citation numbers
|
|
64
|
-
|
|
65
|
-
Returns:
|
|
66
|
-
Formatted string with ranges
|
|
67
|
-
|
|
68
|
-
Example:
|
|
69
|
-
>>> CitationMapper._format_number_list([1, 2, 3, 5, 6, 8])
|
|
70
|
-
'[1-3, 5-6, 8]'
|
|
71
|
-
>>> CitationMapper._format_number_list([15, 16])
|
|
72
|
-
'[15-16]'
|
|
73
|
-
>>> CitationMapper._format_number_list([1, 3, 5])
|
|
74
|
-
'[1, 3, 5]'
|
|
75
28
|
"""
|
|
76
|
-
|
|
77
|
-
return "[]"
|
|
78
|
-
|
|
79
|
-
# Sort numbers
|
|
80
|
-
sorted_nums = sorted(set(numbers))
|
|
81
|
-
|
|
82
|
-
# Build ranges
|
|
83
|
-
ranges = []
|
|
84
|
-
start = sorted_nums[0]
|
|
85
|
-
end = sorted_nums[0]
|
|
86
|
-
|
|
87
|
-
for num in sorted_nums[1:]:
|
|
88
|
-
if num == end + 1:
|
|
89
|
-
# Continue current range
|
|
90
|
-
end = num
|
|
91
|
-
else:
|
|
92
|
-
# End current range and start new one
|
|
93
|
-
if start == end:
|
|
94
|
-
# Single number
|
|
95
|
-
ranges.append(str(start))
|
|
96
|
-
else:
|
|
97
|
-
# Range (including 2 consecutive numbers like 15-16)
|
|
98
|
-
ranges.append(f"{start}-{end}")
|
|
99
|
-
start = num
|
|
100
|
-
end = num
|
|
101
|
-
|
|
102
|
-
# Add final range
|
|
103
|
-
if start == end:
|
|
104
|
-
# Single number
|
|
105
|
-
ranges.append(str(start))
|
|
106
|
-
else:
|
|
107
|
-
# Range (including 2 consecutive numbers like 15-16)
|
|
108
|
-
ranges.append(f"{start}-{end}")
|
|
109
|
-
|
|
110
|
-
return f"[{', '.join(ranges)}]"
|
|
29
|
+
return format_citation_ranges(text)
|
|
111
30
|
|
|
112
31
|
def create_mapping(self, citations: List[str]) -> Dict[str, int]:
|
|
113
32
|
"""Create citation key → number mapping.
|
|
@@ -7,30 +7,12 @@ DOCX generation with python-docx.
|
|
|
7
7
|
import re
|
|
8
8
|
from typing import Any, Dict, List, Optional
|
|
9
9
|
|
|
10
|
+
from ..utils.comment_filter import is_metadata_comment
|
|
11
|
+
|
|
10
12
|
|
|
11
13
|
class DocxContentProcessor:
|
|
12
14
|
"""Parses markdown content into structured format for DOCX writing."""
|
|
13
15
|
|
|
14
|
-
@staticmethod
|
|
15
|
-
def _is_metadata_comment(comment_text: str) -> bool:
|
|
16
|
-
"""Check if a comment is metadata/informational and should be skipped.
|
|
17
|
-
|
|
18
|
-
Args:
|
|
19
|
-
comment_text: The comment text to check
|
|
20
|
-
|
|
21
|
-
Returns:
|
|
22
|
-
True if comment should be skipped, False if it should be included
|
|
23
|
-
"""
|
|
24
|
-
if not comment_text:
|
|
25
|
-
return True
|
|
26
|
-
|
|
27
|
-
# Normalize to lowercase for case-insensitive matching
|
|
28
|
-
normalized = comment_text.lower().strip()
|
|
29
|
-
|
|
30
|
-
# Skip comments that start with common metadata keywords
|
|
31
|
-
metadata_prefixes = ["note:", "note ", "comment:", "comment "]
|
|
32
|
-
return any(normalized.startswith(prefix) for prefix in metadata_prefixes)
|
|
33
|
-
|
|
34
16
|
def parse(self, markdown: str, citation_map: Dict[str, int]) -> Dict[str, Any]:
|
|
35
17
|
"""Parse markdown into structured sections for DOCX.
|
|
36
18
|
|
|
@@ -83,7 +65,7 @@ class DocxContentProcessor:
|
|
|
83
65
|
# Single-line comment
|
|
84
66
|
comment_text = line.strip()[4:-3].strip()
|
|
85
67
|
# Skip metadata comments (e.g., "note that...", "Comment: ...")
|
|
86
|
-
if comment_text and not
|
|
68
|
+
if comment_text and not is_metadata_comment(comment_text):
|
|
87
69
|
sections.append({"type": "comment", "text": comment_text})
|
|
88
70
|
i += 1
|
|
89
71
|
continue
|
|
@@ -104,7 +86,7 @@ class DocxContentProcessor:
|
|
|
104
86
|
# Join and add comment
|
|
105
87
|
comment_text = " ".join(comment_lines).strip()
|
|
106
88
|
# Skip metadata comments (e.g., "note that...", "Comment: ...")
|
|
107
|
-
if comment_text and not
|
|
89
|
+
if comment_text and not is_metadata_comment(comment_text):
|
|
108
90
|
sections.append({"type": "comment", "text": comment_text})
|
|
109
91
|
continue
|
|
110
92
|
|
|
@@ -445,7 +427,7 @@ class DocxContentProcessor:
|
|
|
445
427
|
elif match.group(6): # Inline HTML comment
|
|
446
428
|
comment_text = match.group(7).strip()
|
|
447
429
|
# Skip metadata comments (e.g., "note that...", "Comment: ...")
|
|
448
|
-
if comment_text and not
|
|
430
|
+
if comment_text and not is_metadata_comment(comment_text):
|
|
449
431
|
runs.append({"type": "inline_comment", "text": comment_text})
|
|
450
432
|
elif match.group(8): # Markdown link [text](url)
|
|
451
433
|
runs.append(
|
|
@@ -54,6 +54,8 @@ class DocxExporter:
|
|
|
54
54
|
docx_config = config.get("docx", {})
|
|
55
55
|
self.hide_si = docx_config.get("hide_si", False) # Default to False (don't hide SI) for backwards compatibility
|
|
56
56
|
self.figures_at_end = docx_config.get("figures_at_end", False) # Default to False (inline figures)
|
|
57
|
+
self.hide_highlighting = docx_config.get("hide_highlighting", False) # Default to False (show highlights)
|
|
58
|
+
self.hide_comments = docx_config.get("hide_comments", False) # Default to False (include comments)
|
|
57
59
|
|
|
58
60
|
# Components
|
|
59
61
|
self.citation_mapper = CitationMapper()
|
|
@@ -125,10 +127,13 @@ class DocxExporter:
|
|
|
125
127
|
# Step 5.5: Replace figure and equation references with numbers
|
|
126
128
|
import re
|
|
127
129
|
|
|
130
|
+
# Extract all labels using centralized utility
|
|
131
|
+
from ..utils.label_extractor import LabelExtractor
|
|
132
|
+
|
|
133
|
+
label_extractor = LabelExtractor()
|
|
134
|
+
|
|
128
135
|
# Find all figures and create mapping
|
|
129
|
-
|
|
130
|
-
figure_labels = re.findall(r"!\[[^\]]*\]\([^)]+\)\s*\n\s*\{#fig:([\w-]+)", markdown_with_numbers)
|
|
131
|
-
figure_map = {label: i + 1 for i, label in enumerate(figure_labels)}
|
|
136
|
+
figure_map = label_extractor.extract_figure_labels(markdown_with_numbers)
|
|
132
137
|
|
|
133
138
|
# Replace @fig:label with "Fig. X" in text, handling optional panel letters
|
|
134
139
|
# Pattern matches: @fig:label optionally followed by space and panel letter(s)
|
|
@@ -146,11 +151,9 @@ class DocxExporter:
|
|
|
146
151
|
logger.debug(f"Mapped {len(figure_map)} figure labels to numbers")
|
|
147
152
|
|
|
148
153
|
# Find all supplementary figures and create mapping
|
|
149
|
-
# Allow hyphens and underscores in label names
|
|
150
154
|
# IMPORTANT: When SI is excluded, extract from SI content (where figures are defined)
|
|
151
155
|
content_to_scan_for_sfigs = si_content_for_mapping if si_content_for_mapping else markdown_with_numbers
|
|
152
|
-
|
|
153
|
-
sfig_map = {label: i + 1 for i, label in enumerate(sfig_labels)}
|
|
156
|
+
sfig_map = label_extractor.extract_supplementary_figure_labels(content_to_scan_for_sfigs)
|
|
154
157
|
|
|
155
158
|
# Replace @sfig:label with "Supp. Fig. X" in text, handling optional panel letters
|
|
156
159
|
for label, num in sfig_map.items():
|
|
@@ -166,24 +169,9 @@ class DocxExporter:
|
|
|
166
169
|
|
|
167
170
|
# Find all tables and create mapping (looking for {#stable:label} or \label{stable:label} tags)
|
|
168
171
|
# IMPORTANT: PDF uses the order that tables are DEFINED in the document (order of \label{stable:X})
|
|
169
|
-
# NOT the order of caption references (%{#stable:X}) which are just metadata
|
|
170
172
|
# When SI is excluded from export, we still need to extract labels from SI
|
|
171
|
-
|
|
172
173
|
content_to_scan_for_tables = si_content_for_mapping if si_content_for_mapping else markdown_with_numbers
|
|
173
|
-
|
|
174
|
-
# Extract table labels in document order (both {#stable:label} markdown format and \label{stable:label} LaTeX format)
|
|
175
|
-
# The PDF numbering follows the order these labels appear in the document
|
|
176
|
-
markdown_labels = re.findall(r"\{#stable:([\w-]+)\}", content_to_scan_for_tables)
|
|
177
|
-
latex_labels = re.findall(r"\\label\{stable:([\w-]+)\}", content_to_scan_for_tables)
|
|
178
|
-
|
|
179
|
-
# Combine both formats, preferring LaTeX labels if present (since that's what PDF uses)
|
|
180
|
-
table_labels = latex_labels if latex_labels else markdown_labels
|
|
181
|
-
|
|
182
|
-
# Remove duplicates while preserving order
|
|
183
|
-
seen = set()
|
|
184
|
-
table_labels = [label for label in table_labels if not (label in seen or seen.add(label))]
|
|
185
|
-
|
|
186
|
-
table_map = {label: i + 1 for i, label in enumerate(table_labels)}
|
|
174
|
+
table_map = label_extractor.extract_supplementary_table_labels(content_to_scan_for_tables)
|
|
187
175
|
logger.debug(f"Mapped {len(table_map)} supplementary tables: {table_map}")
|
|
188
176
|
|
|
189
177
|
# Replace @stable:label with "Supp. Table X" in text
|
|
@@ -193,11 +181,9 @@ class DocxExporter:
|
|
|
193
181
|
)
|
|
194
182
|
|
|
195
183
|
# Find all supplementary notes and create mapping (looking for {#snote:label} tags)
|
|
196
|
-
# Allow hyphens and underscores in label names
|
|
197
184
|
# IMPORTANT: When SI is excluded, extract from SI content (where notes are defined)
|
|
198
185
|
content_to_scan_for_snotes = si_content_for_mapping if si_content_for_mapping else markdown_with_numbers
|
|
199
|
-
|
|
200
|
-
snote_map = {label: i + 1 for i, label in enumerate(snote_labels)}
|
|
186
|
+
snote_map = label_extractor.extract_supplementary_note_labels(content_to_scan_for_snotes)
|
|
201
187
|
|
|
202
188
|
# Replace @snote:label with "Supp. Note X" in text
|
|
203
189
|
for label, num in snote_map.items():
|
|
@@ -208,9 +194,7 @@ class DocxExporter:
|
|
|
208
194
|
logger.debug(f"Mapped {len(snote_map)} supplementary note labels to numbers")
|
|
209
195
|
|
|
210
196
|
# Find all equations and create mapping (looking for {#eq:label} tags)
|
|
211
|
-
|
|
212
|
-
equation_labels = re.findall(r"\{#eq:([\w-]+)\}", markdown_with_numbers)
|
|
213
|
-
equation_map = {label: i + 1 for i, label in enumerate(equation_labels)}
|
|
197
|
+
equation_map = label_extractor.extract_equation_labels(markdown_with_numbers)
|
|
214
198
|
|
|
215
199
|
# Replace @eq:label with "Eq. X"
|
|
216
200
|
# Handle both @eq:label and (@eq:label) formats
|
|
@@ -247,6 +231,8 @@ class DocxExporter:
|
|
|
247
231
|
metadata=metadata,
|
|
248
232
|
table_map=table_map,
|
|
249
233
|
figures_at_end=self.figures_at_end,
|
|
234
|
+
hide_highlighting=self.hide_highlighting,
|
|
235
|
+
hide_comments=self.hide_comments,
|
|
250
236
|
)
|
|
251
237
|
logger.info(f"DOCX exported successfully: {docx_path}")
|
|
252
238
|
|