rxiv-maker 1.18.5__tar.gz → 1.19.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.18.5 → rxiv_maker-1.19.1}/.gitignore +5 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/CHANGELOG.md +45 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/PKG-INFO +1 -1
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/__version__.py +1 -1
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/commands/__init__.py +2 -0
- rxiv_maker-1.19.1/src/rxiv_maker/cli/commands/biorxiv.py +51 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/framework/base.py +91 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/framework/workflow_commands.py +99 -31
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/main.py +2 -1
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/converters/md2tex.py +8 -8
- rxiv_maker-1.19.1/src/rxiv_maker/engines/operations/prepare_biorxiv.py +411 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/tex/style/rxiv_maker_style.cls +2 -2
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/cli/test_changelog_command.py +2 -2
- rxiv_maker-1.19.1/tests/unit/test_biorxiv_command.py +17 -0
- rxiv_maker-1.19.1/tests/unit/test_prepare_biorxiv.py +377 -0
- rxiv_maker-1.18.5/tests/fixtures/docx_export/sample_manuscript/2025__unknown_et_al__rxiv.docx +0 -0
- rxiv_maker-1.18.5/tests/fixtures/docx_export/sample_manuscript/sample_manuscript.docx +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/LICENSE +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/README.md +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/pyproject.toml +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/docs/api/README.md +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/docs/api/index.md +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/logo/logo-rxiv-maker.afdesign +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/logo/logo-rxiv-maker.png +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/logo/logo-rxiv-maker.svg +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/__init__.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/__init__.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/__main__.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/commands/arxiv.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/commands/bibliography.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/commands/build.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/commands/cache_management.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/commands/changelog.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/commands/check_installation.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/commands/clean.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/commands/completion.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/commands/config.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/commands/create_repo.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/commands/docx.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/commands/figures.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/commands/get_rxiv_preprint.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/commands/init.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/commands/install_deps.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/commands/repo_init.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/commands/repos.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/commands/repos_search.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/commands/setup.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/commands/track_changes.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/commands/upgrade.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/commands/validate.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/commands/version.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/framework/__init__.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/framework/cache_commands.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/framework/config_commands.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/framework/content_commands.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/framework/decorators.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/framework/utility_commands.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/framework.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/interactive.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/cli/interactive_prompts.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/config/defaults.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/config/validator.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/converters/__init__.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/converters/citation_processor.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/converters/code_processor.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/converters/comment_processor.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/converters/custom_command_processor.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/converters/figure_processor.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/converters/html_processor.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/converters/list_processor.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/converters/math_processor.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/converters/python_executor.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/converters/section_processor.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/converters/supplementary_note_processor.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/converters/table_processor.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/converters/text_formatters.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/converters/types.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/converters/url_processor.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/core/cache/__init__.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/core/cache/advanced_cache.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/core/cache/bibliography_cache.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/core/cache/cache_utils.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/core/cache/doi_cache.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/core/cache/secure_cache_utils.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/core/content_processor.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/core/environment_bootstrap.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/core/environment_manager.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/core/error_codes.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/core/error_recovery.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/core/logging_config.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/core/managers/__init__.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/core/managers/cache_manager.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/core/managers/config_manager.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/core/managers/dependency_manager.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/core/managers/execution_manager.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/core/managers/file_manager.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/core/managers/install_manager.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/core/managers/state_manager.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/core/managers/unified_config_manager.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/core/managers/validation_manager.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/core/managers/workflow_manager.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/core/path_manager.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/core/progress_framework.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/core/repo_config.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/core/repository.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/core/session_optimizer.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/core/validation_framework.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/data/tips.yaml +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/engines/__init__.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/engines/operations/__init__.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/engines/operations/add_bibliography.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/engines/operations/build_manager.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/engines/operations/cleanup.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/engines/operations/fix_bibliography.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/engines/operations/generate_docs.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/engines/operations/generate_figures.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/engines/operations/generate_preprint.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/engines/operations/prepare_arxiv.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/engines/operations/setup_environment.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/engines/operations/track_changes.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/engines/operations/validate.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/engines/operations/validate_pdf.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/exporters/__init__.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/exporters/docx_citation_mapper.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/exporters/docx_content_processor.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/exporters/docx_exporter.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/exporters/docx_writer.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/install/__init__.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/install/dependency_handlers/__init__.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/install/dependency_handlers/latex.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/install/dependency_handlers/r_lang.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/install/dependency_handlers/system_libs.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/install/platform_installers/__init__.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/install/platform_installers/base.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/install/platform_installers/linux.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/install/platform_installers/macos.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/install/platform_installers/windows.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/install/utils/__init__.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/install/utils/logging.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/install/utils/progress.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/install/utils/verification.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/manuscript_utils/__init__.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/manuscript_utils/figure_utils.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/processors/__init__.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/processors/author_processor.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/processors/markdown_preprocessor.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/processors/template_processor.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/processors/yaml_processor.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/rxiv_maker_cli.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/scripts/__init__.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/scripts/custom_doc_generator.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/scripts/validate_manuscript.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/services/__init__.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/services/base.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/services/build_service.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/services/configuration_service.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/services/manuscript_service.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/services/publication_service.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/services/validation_service.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/templates/__init__.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/templates/manager.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/templates/registry.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/tex/python_execution_section.tex +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/__init__.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/accent_character_map.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/author_affiliation_processor.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/author_name_formatter.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/bibliography_checksum.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/bibliography_parser.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/bst_generator.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/changelog_parser.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/citation_range_formatter.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/citation_utils.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/comment_filter.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/dependency_checker.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/docx_helpers.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/doi_resolver.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/email_encoder.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/figure_checksum.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/file_helpers.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/github.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/homebrew_checker.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/install_detector.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/label_extractor.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/operation_ids.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/pdf_splitter.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/pdf_utils.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/performance.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/platform.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/python_execution_reporter.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/retry.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/rich_upgrade_notifier.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/text_utils.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/tips.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/title_sync.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/unicode_safe.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/update_checker.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/utils/url_to_doi.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/validate.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/validators/__init__.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/validators/base_validator.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/validators/citation_validator.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/validators/doi/__init__.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/validators/doi/api_clients.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/validators/doi/metadata_comparator.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/validators/doi_validator.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/validators/figure_validator.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/validators/latex_error_parser.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/validators/math_validator.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/validators/pdf_validator.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/validators/reference_validator.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/rxiv_maker/validators/syntax_validator.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/tex/style/rxiv_maker_style.bst +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/src/tex/template.tex +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/__init__.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/cli/__init__.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/cli/test_build.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/cli/test_init_command.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/cli/test_main.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/conftest.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/e2e/__init__.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/e2e/test_dummy_manuscript_generator.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/e2e/test_figure_workflow_validation.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/fixtures/00_CONFIG.yml +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/fixtures/01_MAIN.md +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/fixtures/03_REFERENCES.bib +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/fixtures/FIGURES/Fig1.png +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/fixtures/FIGURES/Fig2.png +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/fixtures/FIGURES/Fig3.png +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/fixtures/README.md +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/fixtures/docx_export/sample_manuscript/01_MAIN.md +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/fixtures/docx_export/sample_manuscript/02_SUPPLEMENTARY_INFO.md +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/fixtures/docx_export/sample_manuscript/03_REFERENCES.bib +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/integration/__init__.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/integration/test_article_generation.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/integration/test_bibliography_author_format_docx.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/integration/test_binary_distribution.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/integration/test_centralized_components.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/integration/test_citation_injection.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/integration/test_comment_system_integration.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/integration/test_docx_export_integration.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/integration/test_doi_fallback_integration.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/integration/test_doi_validation_integration.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/integration/test_example_manuscript.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/integration/test_guillaume_fixtures.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/integration/test_homebrew_workflow_validation.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/integration/test_infrastructure_suite.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/integration/test_init_build_workflow.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/integration/test_install_verification_integration.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/integration/test_latex_dependency_integration.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/integration/test_manuscript_directory_integration.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/integration/test_manuscript_python_execution_reporting.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/integration/test_practical_manuscript_workflows.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/integration/test_pypi_package_integration.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/integration/test_python_execution_integration.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/integration/test_repository_cli_integration.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/integration/test_supplementary_formatting.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/integration/test_user_reported_issue.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/integration/test_validation_workflow.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/regression/README.md +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/regression/conftest.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/regression/test_cli_argument_parsing.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/regression/test_discord_reported_issues.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/regression/test_error_message_quality.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/regression/test_google_colab_integration.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/regression/test_guillaume_edge_cases.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/regression/test_guillaume_pr131_rewrite.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/regression/test_path_resolution.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/regression/test_widget_author_behavior.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/regression/test_widget_interactions_playwright.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/smoke/__init__.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/smoke/test_basic_functionality.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/smoke/test_cli_smoke.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/system/__init__.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/system/test_ci_matrix.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/system/test_cli_workflows.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/system/test_end_to_end.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/test_homebrew_checker.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/test_install_detector.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/__init__.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/exporters/__init__.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/exporters/test_docx_citation_mapper.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/exporters/test_docx_content_processor.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_add_bibliography.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_arxiv_command.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_async_execution_manager.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_author_name_formatter.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_author_processor.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_bst_generator.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_build_command.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_build_manager.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_build_manager_manuscript_path.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_cache_security.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_cache_utils.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_check_installation_command.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_citation_processor.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_citation_rendering.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_citation_style.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_citation_utils.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_cli_cleanup_integration.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_cli_structure.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_comment_processor.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_conda_installation_manager.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_conda_platform_detection.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_cross_platform_optimizations.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_custom_command_processor.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_dependency_manager.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_dependency_package_names.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_docx_doi_resolution.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_docx_helpers.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_doi_fallback_system.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_doi_resolver.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_doi_validator.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_email_encoder.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_environment_manager.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_error_handling_scenarios.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_execution_manager_comprehensive.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_figure_generator.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_figure_processor.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_figure_processor_error_handling.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_file_helpers.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_fix_bibliography.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_generate_docs.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_generate_preprint.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_github.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_github_actions_integration.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_importlib_edge_cases.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_install_platform_installers.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_install_system_libs.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_install_verification.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_interactive_path_change.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_interactive_validators.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_latex_dependency_handler.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_manuscript_figure_utils.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_manuscript_repository.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_math_processor.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_md2tex.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_mermaid_fallback.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_path_manager.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_pdf_validator.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_platform_comprehensive.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_platform_detector.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_processor_suite.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_python_execution_reporter.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_python_executor.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_release_orchestrator.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_repository_manager.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_rich_upgrade_notifier.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_rxiv_setup_command.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_security_features.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_security_scanner.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_setup_environment.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_style_file_resolution.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_supplementary_note_processor.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_table_rotation.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_template_processor.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_text_formatters.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_text_utils.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_tips.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_title_sync.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_title_sync_validation.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_track_changes.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_trailing_slash_regression.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_upgrade_command.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_url_to_doi.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_utils.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_validate_backticks.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_validate_command_fixed.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_validate_manuscript.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_validation_suite.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_validators.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/unit/test_yaml_processor.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/visual/README.md +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/visual/figure-positioning/00_CONFIG.yml +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/visual/figure-positioning/01_MAIN.md +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/visual/figure-positioning/03_REFERENCES.bib +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/visual/figure-positioning/FIGURES/Figure__positioning_test.png +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/visual/figure-positioning/FIGURES/Figure__positioning_test.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/visual/figure-positioning/FIGURES/ReadyFig.png +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/visual/figure-positioning/FIGURES/ReadyFig.py +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/visual/figure-positioning/README.md +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/visual/methods-placement/00_CONFIG.yml +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/visual/methods-placement/01_MAIN.md +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/visual/methods-placement/02_SUPPLEMENTARY_INFO.md +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/visual/methods-placement/03_REFERENCES.bib +0 -0
- {rxiv_maker-1.18.5 → rxiv_maker-1.19.1}/tests/visual/methods-placement/README.md +0 -0
|
@@ -7,6 +7,51 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [1.19.1] - 2026-02-05
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- **bioRxiv Character Encoding**: Enhanced HTML entity encoding to handle all Unicode characters
|
|
15
|
+
- Now uses numeric character references (e.g., `č` for č) for characters without named HTML entities
|
|
16
|
+
- Properly encodes Lithuanian characters (č, ū, ė) and other special characters
|
|
17
|
+
- Example: "Vaitkevičiūtė" → "Vaitkevičiūtė"
|
|
18
|
+
- Ensures bioRxiv TSV files handle international author names correctly
|
|
19
|
+
|
|
20
|
+
- **LaTeX Section Spacing**: Fixed spacing issues in PDF output for section headers
|
|
21
|
+
- Added proper blank lines (`\n\n`) after all LaTeX section commands in markdown conversion
|
|
22
|
+
- Increased spacing after `\subsubsection` titles from 1pt to 8pt in LaTeX class file
|
|
23
|
+
- Changed subsubsection title format to use `\enskip` for consistent visual spacing
|
|
24
|
+
- Fixes runin format issue where text appeared to run directly into section titles
|
|
25
|
+
- Example fix: "Manuscripts.A central" → "Manuscripts. A central" (with visible space)
|
|
26
|
+
|
|
27
|
+
## [1.19.0] - 2026-02-05
|
|
28
|
+
|
|
29
|
+
### Added
|
|
30
|
+
|
|
31
|
+
- **bioRxiv Submission Package Command**: New `rxiv biorxiv` command generates complete submission package
|
|
32
|
+
- Generates bioRxiv author template (TSV format) with HTML entity encoding for special characters
|
|
33
|
+
- Includes manuscript PDF, source files (TeX, figures, bibliography)
|
|
34
|
+
- Creates ZIP archive ready for bioRxiv upload
|
|
35
|
+
- Supports custom submission directory and ZIP filename options
|
|
36
|
+
- HTML entity encoding for accented characters (António → António, Åbo → Åbo)
|
|
37
|
+
- Automatic handling of multiple corresponding authors (keeps last one)
|
|
38
|
+
- Command options: `--biorxiv-dir`, `--zip-filename`, `--no-zip`
|
|
39
|
+
|
|
40
|
+
### Changed
|
|
41
|
+
|
|
42
|
+
- **Code Architecture**: Centralized common submission logic in BaseCommand
|
|
43
|
+
- Refactored ArxivCommand and BioRxivCommand to share common patterns
|
|
44
|
+
- Added `_clear_output_directory()`, `_ensure_pdf_built()`, `_set_submission_defaults()` helper methods
|
|
45
|
+
- Eliminated ~64 lines of duplicated code between commands
|
|
46
|
+
- Improved maintainability and consistency across submission commands
|
|
47
|
+
|
|
48
|
+
### Fixed
|
|
49
|
+
|
|
50
|
+
- **bioRxiv Character Encoding**: Special characters now properly encoded as HTML entities
|
|
51
|
+
- Previously stripped accents to ASCII (António → Antonio)
|
|
52
|
+
- Now preserves original characters using HTML entities (António → António)
|
|
53
|
+
- Complies with bioRxiv's TSV import requirements for international author names
|
|
54
|
+
|
|
10
55
|
## [1.18.5] - 2026-02-05
|
|
11
56
|
|
|
12
57
|
### Fixed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: rxiv-maker
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.19.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
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from .arxiv import arxiv
|
|
4
4
|
from .bibliography import bibliography
|
|
5
|
+
from .biorxiv import biorxiv
|
|
5
6
|
from .build import build as pdf
|
|
6
7
|
from .cache_management import cache_group as cache
|
|
7
8
|
from .changelog import changelog
|
|
@@ -29,6 +30,7 @@ from .version import version
|
|
|
29
30
|
__all__ = [
|
|
30
31
|
"arxiv",
|
|
31
32
|
"bibliography",
|
|
33
|
+
"biorxiv",
|
|
32
34
|
"cache",
|
|
33
35
|
"changelog",
|
|
34
36
|
"config",
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"""bioRxiv submission package generation command."""
|
|
2
|
+
|
|
3
|
+
import rich_click as click
|
|
4
|
+
|
|
5
|
+
from ..framework.workflow_commands import BioRxivCommand
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@click.command(context_settings={"help_option_names": ["-h", "--help"]})
|
|
9
|
+
@click.argument("manuscript_path", type=click.Path(exists=True, file_okay=False), required=False)
|
|
10
|
+
@click.option("--output-dir", "-o", default="output", help="Output directory for generated files")
|
|
11
|
+
@click.option(
|
|
12
|
+
"--biorxiv-dir",
|
|
13
|
+
"-b",
|
|
14
|
+
help="Custom bioRxiv submission directory (default: output/biorxiv_submission)",
|
|
15
|
+
)
|
|
16
|
+
@click.option(
|
|
17
|
+
"--zip-filename",
|
|
18
|
+
"-z",
|
|
19
|
+
help="Custom ZIP filename (default: {manuscript}_biorxiv.zip)",
|
|
20
|
+
)
|
|
21
|
+
@click.option(
|
|
22
|
+
"--no-zip",
|
|
23
|
+
is_flag=True,
|
|
24
|
+
help="Don't create ZIP file (only create submission directory)",
|
|
25
|
+
)
|
|
26
|
+
@click.pass_context
|
|
27
|
+
def biorxiv(ctx, manuscript_path, output_dir, biorxiv_dir, zip_filename, no_zip):
|
|
28
|
+
r"""Generate bioRxiv submission package.
|
|
29
|
+
|
|
30
|
+
Creates a complete submission package including:
|
|
31
|
+
- bioRxiv author template (TSV file)
|
|
32
|
+
- Manuscript PDF
|
|
33
|
+
- Source files (TeX, figures, bibliography)
|
|
34
|
+
- ZIP file for upload
|
|
35
|
+
|
|
36
|
+
\b
|
|
37
|
+
Example:
|
|
38
|
+
rxiv biorxiv # Full package with ZIP
|
|
39
|
+
rxiv biorxiv --no-zip # Package without ZIP
|
|
40
|
+
rxiv biorxiv -b custom_dir # Custom submission directory
|
|
41
|
+
rxiv biorxiv -z my_submission.zip # Custom ZIP filename
|
|
42
|
+
"""
|
|
43
|
+
command = BioRxivCommand()
|
|
44
|
+
return command.run(
|
|
45
|
+
ctx,
|
|
46
|
+
manuscript_path=manuscript_path,
|
|
47
|
+
output_dir=output_dir,
|
|
48
|
+
biorxiv_dir=biorxiv_dir,
|
|
49
|
+
zip_filename=zip_filename,
|
|
50
|
+
no_zip=no_zip,
|
|
51
|
+
)
|
|
@@ -162,6 +162,97 @@ class BaseCommand(ABC):
|
|
|
162
162
|
if suggestion:
|
|
163
163
|
self.console.print(f"💡 {suggestion}", style="yellow")
|
|
164
164
|
|
|
165
|
+
def _clear_output_directory(self) -> None:
|
|
166
|
+
"""Clear and recreate the output directory.
|
|
167
|
+
|
|
168
|
+
Raises:
|
|
169
|
+
CommandExecutionError: If path_manager is not initialized
|
|
170
|
+
"""
|
|
171
|
+
import shutil
|
|
172
|
+
|
|
173
|
+
if not self.path_manager:
|
|
174
|
+
raise CommandExecutionError("Path manager not initialized")
|
|
175
|
+
|
|
176
|
+
if self.path_manager.output_dir.exists():
|
|
177
|
+
shutil.rmtree(self.path_manager.output_dir)
|
|
178
|
+
self.path_manager.output_dir.mkdir(parents=True, exist_ok=True)
|
|
179
|
+
|
|
180
|
+
def _ensure_pdf_built(self, progress_task=None, quiet: bool = True) -> None:
|
|
181
|
+
"""Ensure PDF is built, building it if necessary.
|
|
182
|
+
|
|
183
|
+
Args:
|
|
184
|
+
progress_task: Optional progress task to update
|
|
185
|
+
quiet: Whether to suppress build output
|
|
186
|
+
|
|
187
|
+
Raises:
|
|
188
|
+
CommandExecutionError: If path_manager is not initialized or build fails
|
|
189
|
+
"""
|
|
190
|
+
from ...engines.operations.build_manager import BuildManager
|
|
191
|
+
|
|
192
|
+
if not self.path_manager:
|
|
193
|
+
raise CommandExecutionError("Path manager not initialized")
|
|
194
|
+
|
|
195
|
+
pdf_filename = f"{self.path_manager.manuscript_name}.pdf"
|
|
196
|
+
pdf_path = self.path_manager.output_dir / pdf_filename
|
|
197
|
+
|
|
198
|
+
if not pdf_path.exists():
|
|
199
|
+
if progress_task:
|
|
200
|
+
progress_task.update(description="Building PDF first...")
|
|
201
|
+
|
|
202
|
+
build_manager = BuildManager(
|
|
203
|
+
manuscript_path=str(self.path_manager.manuscript_path),
|
|
204
|
+
output_dir=str(self.path_manager.output_dir),
|
|
205
|
+
verbose=self.verbose,
|
|
206
|
+
quiet=quiet,
|
|
207
|
+
)
|
|
208
|
+
|
|
209
|
+
try:
|
|
210
|
+
success = build_manager.build()
|
|
211
|
+
if not success:
|
|
212
|
+
raise CommandExecutionError("PDF build failed")
|
|
213
|
+
except Exception as e:
|
|
214
|
+
raise CommandExecutionError(f"Failed to build PDF: {e}") from e
|
|
215
|
+
|
|
216
|
+
def _set_submission_defaults(
|
|
217
|
+
self,
|
|
218
|
+
submission_type: str,
|
|
219
|
+
submission_dir: Optional[str] = None,
|
|
220
|
+
zip_filename: Optional[str] = None,
|
|
221
|
+
) -> tuple[str, str]:
|
|
222
|
+
"""Set default paths for submission directories and ZIP files.
|
|
223
|
+
|
|
224
|
+
Args:
|
|
225
|
+
submission_type: Type of submission ("arxiv" or "biorxiv")
|
|
226
|
+
submission_dir: Custom submission directory path (optional)
|
|
227
|
+
zip_filename: Custom ZIP filename (optional)
|
|
228
|
+
|
|
229
|
+
Returns:
|
|
230
|
+
Tuple of (submission_dir, zip_filename) with defaults applied
|
|
231
|
+
|
|
232
|
+
Raises:
|
|
233
|
+
CommandExecutionError: If path_manager is not initialized
|
|
234
|
+
"""
|
|
235
|
+
from pathlib import Path
|
|
236
|
+
|
|
237
|
+
if not self.path_manager:
|
|
238
|
+
raise CommandExecutionError("Path manager not initialized")
|
|
239
|
+
|
|
240
|
+
manuscript_output_dir = str(self.path_manager.output_dir)
|
|
241
|
+
|
|
242
|
+
# Set default submission directory
|
|
243
|
+
if submission_dir is None:
|
|
244
|
+
submission_dir = str(Path(manuscript_output_dir) / f"{submission_type}_submission")
|
|
245
|
+
|
|
246
|
+
# Set default ZIP filename
|
|
247
|
+
if zip_filename is None:
|
|
248
|
+
manuscript_name = self.path_manager.manuscript_name
|
|
249
|
+
if submission_type == "arxiv":
|
|
250
|
+
zip_filename = str(Path(manuscript_output_dir) / "for_arxiv.zip")
|
|
251
|
+
else:
|
|
252
|
+
zip_filename = str(Path(manuscript_output_dir) / f"{manuscript_name}_{submission_type}.zip")
|
|
253
|
+
|
|
254
|
+
return submission_dir, zip_filename
|
|
255
|
+
|
|
165
256
|
@abstractmethod
|
|
166
257
|
def execute_operation(self, **kwargs) -> Any:
|
|
167
258
|
"""Execute the main command operation.
|
|
@@ -366,46 +366,25 @@ class ArxivCommand(BaseCommand):
|
|
|
366
366
|
no_zip: Don't create zip file
|
|
367
367
|
"""
|
|
368
368
|
import sys
|
|
369
|
-
from pathlib import Path
|
|
370
369
|
|
|
371
|
-
from rxiv_maker.engines.operations.build_manager import BuildManager
|
|
372
370
|
from rxiv_maker.engines.operations.prepare_arxiv import main as prepare_arxiv_main
|
|
373
371
|
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
372
|
+
# Set defaults using shared helper
|
|
373
|
+
arxiv_dir, zip_filename = self._set_submission_defaults("arxiv", arxiv_dir, zip_filename)
|
|
377
374
|
manuscript_output_dir = str(self.path_manager.output_dir)
|
|
378
375
|
|
|
379
|
-
# Set defaults using PathManager
|
|
380
|
-
if arxiv_dir is None:
|
|
381
|
-
arxiv_dir = str(Path(manuscript_output_dir) / "arxiv_submission")
|
|
382
|
-
if zip_filename is None:
|
|
383
|
-
zip_filename = str(Path(manuscript_output_dir) / "for_arxiv.zip")
|
|
384
|
-
|
|
385
376
|
with self.create_progress() as progress:
|
|
386
|
-
# Clear output directory
|
|
377
|
+
# Clear output directory using shared helper
|
|
387
378
|
task = progress.add_task("Clearing output directory...", total=None)
|
|
388
|
-
|
|
389
|
-
shutil.rmtree(self.path_manager.output_dir)
|
|
390
|
-
self.path_manager.output_dir.mkdir(parents=True, exist_ok=True)
|
|
379
|
+
self._clear_output_directory()
|
|
391
380
|
|
|
392
|
-
#
|
|
381
|
+
# Ensure PDF is built using shared helper
|
|
393
382
|
progress.update(task, description="Checking PDF exists...")
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
build_manager = BuildManager(
|
|
400
|
-
manuscript_path=str(self.path_manager.manuscript_path),
|
|
401
|
-
output_dir=str(self.path_manager.output_dir),
|
|
402
|
-
verbose=self.verbose,
|
|
403
|
-
quiet=False,
|
|
404
|
-
)
|
|
405
|
-
success = build_manager.run()
|
|
406
|
-
if not success:
|
|
407
|
-
self.error_message("PDF build failed. Cannot prepare arXiv package.")
|
|
408
|
-
raise CommandExecutionError("PDF build failed")
|
|
383
|
+
try:
|
|
384
|
+
self._ensure_pdf_built(progress_task=task, quiet=False)
|
|
385
|
+
except CommandExecutionError:
|
|
386
|
+
self.error_message("PDF build failed. Cannot prepare arXiv package.")
|
|
387
|
+
raise
|
|
409
388
|
|
|
410
389
|
# Prepare arXiv package
|
|
411
390
|
progress.update(task, description="Preparing arXiv package...")
|
|
@@ -524,6 +503,95 @@ class ArxivCommand(BaseCommand):
|
|
|
524
503
|
return year, first_author
|
|
525
504
|
|
|
526
505
|
|
|
506
|
+
class BioRxivCommand(BaseCommand):
|
|
507
|
+
"""BioRxiv command implementation for generating submission package."""
|
|
508
|
+
|
|
509
|
+
def execute_operation(
|
|
510
|
+
self,
|
|
511
|
+
output_dir: str = "output",
|
|
512
|
+
biorxiv_dir: Optional[str] = None,
|
|
513
|
+
zip_filename: Optional[str] = None,
|
|
514
|
+
no_zip: bool = False,
|
|
515
|
+
) -> None:
|
|
516
|
+
"""Execute bioRxiv submission package preparation.
|
|
517
|
+
|
|
518
|
+
Args:
|
|
519
|
+
output_dir: Output directory for generated files
|
|
520
|
+
biorxiv_dir: Custom bioRxiv submission directory path
|
|
521
|
+
zip_filename: Custom zip filename
|
|
522
|
+
no_zip: Don't create zip file
|
|
523
|
+
"""
|
|
524
|
+
from pathlib import Path
|
|
525
|
+
|
|
526
|
+
from ...engines.operations.prepare_biorxiv import (
|
|
527
|
+
BioRxivAuthorError,
|
|
528
|
+
create_biorxiv_zip,
|
|
529
|
+
generate_biorxiv_author_tsv,
|
|
530
|
+
prepare_biorxiv_package,
|
|
531
|
+
)
|
|
532
|
+
|
|
533
|
+
# Set defaults using shared helper
|
|
534
|
+
biorxiv_dir, zip_filename = self._set_submission_defaults("biorxiv", biorxiv_dir, zip_filename)
|
|
535
|
+
|
|
536
|
+
with self.create_progress() as progress:
|
|
537
|
+
# Clear output directory using shared helper
|
|
538
|
+
task = progress.add_task("Clearing output directory...", total=None)
|
|
539
|
+
self._clear_output_directory()
|
|
540
|
+
|
|
541
|
+
# Ensure PDF is built using shared helper
|
|
542
|
+
progress.update(task, description="Checking PDF exists...")
|
|
543
|
+
self._ensure_pdf_built(progress_task=task, quiet=True)
|
|
544
|
+
|
|
545
|
+
# Generate bioRxiv author template TSV
|
|
546
|
+
progress.update(task, description="Generating bioRxiv author template...")
|
|
547
|
+
output_path = self.path_manager.output_dir
|
|
548
|
+
tsv_file = output_path / "biorxiv_authors.tsv"
|
|
549
|
+
|
|
550
|
+
try:
|
|
551
|
+
generate_biorxiv_author_tsv(
|
|
552
|
+
config_path=self.path_manager.get_config_file_path(),
|
|
553
|
+
output_path=tsv_file,
|
|
554
|
+
)
|
|
555
|
+
except BioRxivAuthorError as e:
|
|
556
|
+
progress.update(task, completed=True)
|
|
557
|
+
raise CommandExecutionError(f"Failed to generate bioRxiv template: {e}") from e
|
|
558
|
+
|
|
559
|
+
# Prepare bioRxiv submission package
|
|
560
|
+
progress.update(task, description="Preparing bioRxiv submission package...")
|
|
561
|
+
try:
|
|
562
|
+
biorxiv_path = prepare_biorxiv_package(
|
|
563
|
+
manuscript_path=self.path_manager.manuscript_path,
|
|
564
|
+
output_dir=self.path_manager.output_dir,
|
|
565
|
+
biorxiv_dir=Path(biorxiv_dir),
|
|
566
|
+
)
|
|
567
|
+
except Exception as e:
|
|
568
|
+
progress.update(task, completed=True)
|
|
569
|
+
raise CommandExecutionError(f"Failed to prepare bioRxiv package: {e}") from e
|
|
570
|
+
|
|
571
|
+
# Create ZIP file if requested
|
|
572
|
+
zip_path = None
|
|
573
|
+
if not no_zip:
|
|
574
|
+
progress.update(task, description="Creating ZIP package...")
|
|
575
|
+
try:
|
|
576
|
+
zip_path = create_biorxiv_zip(
|
|
577
|
+
biorxiv_path=biorxiv_path,
|
|
578
|
+
zip_filename=zip_filename,
|
|
579
|
+
manuscript_path=self.path_manager.manuscript_path,
|
|
580
|
+
)
|
|
581
|
+
except Exception as e:
|
|
582
|
+
progress.update(task, completed=True)
|
|
583
|
+
raise CommandExecutionError(f"Failed to create ZIP: {e}") from e
|
|
584
|
+
|
|
585
|
+
progress.update(task, completed=True)
|
|
586
|
+
|
|
587
|
+
# Show success message
|
|
588
|
+
self.console.print("\n[green]✅ bioRxiv submission package ready![/green]")
|
|
589
|
+
self.console.print(f" 📁 Package directory: {biorxiv_path}")
|
|
590
|
+
if zip_path:
|
|
591
|
+
self.console.print(f" 📦 ZIP file: {zip_path}")
|
|
592
|
+
self.console.print("\n📤 Upload to: https://submit.biorxiv.org/")
|
|
593
|
+
|
|
594
|
+
|
|
527
595
|
class TrackChangesCommand(BaseCommand):
|
|
528
596
|
"""Track changes command implementation using the framework."""
|
|
529
597
|
|
|
@@ -60,7 +60,7 @@ click.rich_click.COMMAND_GROUPS = {
|
|
|
60
60
|
},
|
|
61
61
|
{
|
|
62
62
|
"name": "Workflow Commands",
|
|
63
|
-
"commands": ["get-rxiv-preprint", "arxiv", "track-changes", "setup"],
|
|
63
|
+
"commands": ["get-rxiv-preprint", "arxiv", "biorxiv", "track-changes", "setup"],
|
|
64
64
|
},
|
|
65
65
|
{
|
|
66
66
|
"name": "Configuration",
|
|
@@ -252,6 +252,7 @@ main.add_command(commands.docx)
|
|
|
252
252
|
main.add_command(commands.figures)
|
|
253
253
|
main.add_command(commands.get_rxiv_preprint, name="get-rxiv-preprint")
|
|
254
254
|
main.add_command(commands.arxiv)
|
|
255
|
+
main.add_command(commands.biorxiv)
|
|
255
256
|
main.add_command(commands.init)
|
|
256
257
|
main.add_command(commands.bibliography)
|
|
257
258
|
main.add_command(commands.track_changes)
|
|
@@ -185,7 +185,7 @@ def convert_markdown_to_latex(
|
|
|
185
185
|
|
|
186
186
|
# Post-processing: catch any remaining unconverted headers
|
|
187
187
|
# This is a safety net in case some headers weren't converted properly
|
|
188
|
-
content = re.sub(r"^### (.+)$", r"\\subsubsection{\1}", content, flags=re.MULTILINE)
|
|
188
|
+
content = re.sub(r"^### (.+)$", r"\\subsubsection{\1}\n\n", content, flags=re.MULTILINE)
|
|
189
189
|
|
|
190
190
|
# Process supplementary note references BEFORE citations
|
|
191
191
|
# (for both main and supplementary content)
|
|
@@ -457,26 +457,26 @@ def _process_tables_with_protection(
|
|
|
457
457
|
|
|
458
458
|
|
|
459
459
|
def _convert_headers(content: LatexContent, is_supplementary: bool = False) -> LatexContent:
|
|
460
|
-
"""Convert markdown headers to LaTeX sections."""
|
|
460
|
+
"""Convert markdown headers to LaTeX sections with proper spacing."""
|
|
461
461
|
if is_supplementary:
|
|
462
462
|
# For supplementary content, use \\section* for the first header
|
|
463
463
|
# to avoid "Note 1:" prefix
|
|
464
464
|
# First, find the first # header and replace it with \section*
|
|
465
|
-
content = re.sub(r"^# (.+)$", r"\\section*{\1}", content, flags=re.MULTILINE, count=1)
|
|
465
|
+
content = re.sub(r"^# (.+)$", r"\\section*{\1}\n\n", content, flags=re.MULTILINE, count=1)
|
|
466
466
|
# Then replace any remaining # headers with regular \section
|
|
467
|
-
content = re.sub(r"^# (.+)$", r"\\section{\1}", content, flags=re.MULTILINE)
|
|
467
|
+
content = re.sub(r"^# (.+)$", r"\\section{\1}\n\n", content, flags=re.MULTILINE)
|
|
468
468
|
else:
|
|
469
|
-
content = re.sub(r"^# (.+)$", r"\\section{\1}", content, flags=re.MULTILINE)
|
|
469
|
+
content = re.sub(r"^# (.+)$", r"\\section{\1}\n\n", content, flags=re.MULTILINE)
|
|
470
470
|
|
|
471
|
-
content = re.sub(r"^## (.+)$", r"\\subsection{\1}", content, flags=re.MULTILINE)
|
|
471
|
+
content = re.sub(r"^## (.+)$", r"\\subsection{\1}\n\n", content, flags=re.MULTILINE)
|
|
472
472
|
|
|
473
473
|
# For supplementary content, ### headers are handled by the
|
|
474
474
|
# supplementary note processor
|
|
475
475
|
# For non-supplementary content, convert all ### headers normally
|
|
476
476
|
if not is_supplementary:
|
|
477
|
-
content = re.sub(r"^### (.+)$", r"\\subsubsection{\1}", content, flags=re.MULTILINE)
|
|
477
|
+
content = re.sub(r"^### (.+)$", r"\\subsubsection{\1}\n\n", content, flags=re.MULTILINE)
|
|
478
478
|
|
|
479
|
-
content = re.sub(r"^#### (.+)$", r"\\paragraph{\1}", content, flags=re.MULTILINE)
|
|
479
|
+
content = re.sub(r"^#### (.+)$", r"\\paragraph{\1}\n\n", content, flags=re.MULTILINE)
|
|
480
480
|
return content
|
|
481
481
|
|
|
482
482
|
|