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.
Files changed (383) hide show
  1. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/CHANGELOG.md +90 -0
  2. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/PKG-INFO +1 -1
  3. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/__version__.py +1 -1
  4. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/framework/workflow_commands.py +3 -1
  5. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/exporters/docx_citation_mapper.py +3 -84
  6. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/exporters/docx_content_processor.py +5 -23
  7. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/exporters/docx_exporter.py +14 -28
  8. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/exporters/docx_writer.py +201 -75
  9. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/processors/template_processor.py +10 -0
  10. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/templates/registry.py +52 -12
  11. rxiv_maker-1.18.1/src/rxiv_maker/utils/accent_character_map.py +150 -0
  12. rxiv_maker-1.18.1/src/rxiv_maker/utils/author_affiliation_processor.py +128 -0
  13. rxiv_maker-1.18.1/src/rxiv_maker/utils/citation_range_formatter.py +118 -0
  14. rxiv_maker-1.18.1/src/rxiv_maker/utils/comment_filter.py +46 -0
  15. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/docx_helpers.py +4 -117
  16. rxiv_maker-1.18.1/src/rxiv_maker/utils/label_extractor.py +185 -0
  17. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/tex/template.tex +2 -0
  18. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/cli/test_changelog_command.py +26 -2
  19. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/cli/test_init_command.py +38 -27
  20. rxiv_maker-1.18.1/tests/fixtures/docx_export/sample_manuscript/2025__unknown_et_al__rxiv.docx +0 -0
  21. rxiv_maker-1.17.0/tests/fixtures/docx_export/sample_manuscript/2025__unknown_et_al__rxiv.docx +0 -0
  22. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/.gitignore +0 -0
  23. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/LICENSE +0 -0
  24. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/README.md +0 -0
  25. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/pyproject.toml +0 -0
  26. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/docs/api/README.md +0 -0
  27. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/docs/api/index.md +0 -0
  28. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/logo/logo-rxiv-maker.afdesign +0 -0
  29. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/logo/logo-rxiv-maker.png +0 -0
  30. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/logo/logo-rxiv-maker.svg +0 -0
  31. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/__init__.py +0 -0
  32. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/__init__.py +0 -0
  33. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/__main__.py +0 -0
  34. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/__init__.py +0 -0
  35. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/arxiv.py +0 -0
  36. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/bibliography.py +0 -0
  37. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/build.py +0 -0
  38. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/cache_management.py +0 -0
  39. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/changelog.py +0 -0
  40. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/check_installation.py +0 -0
  41. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/clean.py +0 -0
  42. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/completion.py +0 -0
  43. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/config.py +0 -0
  44. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/create_repo.py +0 -0
  45. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/docx.py +0 -0
  46. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/figures.py +0 -0
  47. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/get_rxiv_preprint.py +0 -0
  48. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/init.py +0 -0
  49. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/install_deps.py +0 -0
  50. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/repo_init.py +0 -0
  51. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/repos.py +0 -0
  52. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/repos_search.py +0 -0
  53. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/setup.py +0 -0
  54. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/track_changes.py +0 -0
  55. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/upgrade.py +0 -0
  56. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/validate.py +0 -0
  57. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/commands/version.py +0 -0
  58. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/framework/__init__.py +0 -0
  59. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/framework/base.py +0 -0
  60. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/framework/cache_commands.py +0 -0
  61. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/framework/config_commands.py +0 -0
  62. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/framework/content_commands.py +0 -0
  63. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/framework/decorators.py +0 -0
  64. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/framework/utility_commands.py +0 -0
  65. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/framework.py +0 -0
  66. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/interactive.py +0 -0
  67. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/interactive_prompts.py +0 -0
  68. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/cli/main.py +0 -0
  69. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/config/defaults.py +0 -0
  70. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/config/validator.py +0 -0
  71. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/__init__.py +0 -0
  72. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/citation_processor.py +0 -0
  73. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/code_processor.py +0 -0
  74. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/comment_processor.py +0 -0
  75. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/custom_command_processor.py +0 -0
  76. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/figure_processor.py +0 -0
  77. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/html_processor.py +0 -0
  78. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/list_processor.py +0 -0
  79. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/math_processor.py +0 -0
  80. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/md2tex.py +0 -0
  81. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/python_executor.py +0 -0
  82. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/section_processor.py +0 -0
  83. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/supplementary_note_processor.py +0 -0
  84. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/table_processor.py +0 -0
  85. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/text_formatters.py +0 -0
  86. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/types.py +0 -0
  87. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/converters/url_processor.py +0 -0
  88. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/cache/__init__.py +0 -0
  89. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/cache/advanced_cache.py +0 -0
  90. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/cache/bibliography_cache.py +0 -0
  91. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/cache/cache_utils.py +0 -0
  92. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/cache/doi_cache.py +0 -0
  93. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/cache/secure_cache_utils.py +0 -0
  94. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/content_processor.py +0 -0
  95. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/environment_bootstrap.py +0 -0
  96. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/environment_manager.py +0 -0
  97. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/error_codes.py +0 -0
  98. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/error_recovery.py +0 -0
  99. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/logging_config.py +0 -0
  100. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/managers/__init__.py +0 -0
  101. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/managers/cache_manager.py +0 -0
  102. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/managers/config_manager.py +0 -0
  103. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/managers/dependency_manager.py +0 -0
  104. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/managers/execution_manager.py +0 -0
  105. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/managers/file_manager.py +0 -0
  106. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/managers/install_manager.py +0 -0
  107. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/managers/state_manager.py +0 -0
  108. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/managers/unified_config_manager.py +0 -0
  109. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/managers/validation_manager.py +0 -0
  110. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/managers/workflow_manager.py +0 -0
  111. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/path_manager.py +0 -0
  112. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/progress_framework.py +0 -0
  113. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/repo_config.py +0 -0
  114. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/repository.py +0 -0
  115. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/session_optimizer.py +0 -0
  116. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/core/validation_framework.py +0 -0
  117. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/data/tips.yaml +0 -0
  118. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/engines/__init__.py +0 -0
  119. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/engines/operations/__init__.py +0 -0
  120. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/engines/operations/add_bibliography.py +0 -0
  121. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/engines/operations/build_manager.py +0 -0
  122. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/engines/operations/cleanup.py +0 -0
  123. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/engines/operations/fix_bibliography.py +0 -0
  124. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/engines/operations/generate_docs.py +0 -0
  125. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/engines/operations/generate_figures.py +0 -0
  126. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/engines/operations/generate_preprint.py +0 -0
  127. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/engines/operations/prepare_arxiv.py +0 -0
  128. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/engines/operations/setup_environment.py +0 -0
  129. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/engines/operations/track_changes.py +0 -0
  130. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/engines/operations/validate.py +0 -0
  131. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/engines/operations/validate_pdf.py +0 -0
  132. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/exporters/__init__.py +0 -0
  133. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/install/__init__.py +0 -0
  134. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/install/dependency_handlers/__init__.py +0 -0
  135. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/install/dependency_handlers/latex.py +0 -0
  136. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/install/dependency_handlers/r_lang.py +0 -0
  137. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/install/dependency_handlers/system_libs.py +0 -0
  138. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/install/platform_installers/__init__.py +0 -0
  139. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/install/platform_installers/base.py +0 -0
  140. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/install/platform_installers/linux.py +0 -0
  141. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/install/platform_installers/macos.py +0 -0
  142. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/install/platform_installers/windows.py +0 -0
  143. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/install/utils/__init__.py +0 -0
  144. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/install/utils/logging.py +0 -0
  145. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/install/utils/progress.py +0 -0
  146. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/install/utils/verification.py +0 -0
  147. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/manuscript_utils/__init__.py +0 -0
  148. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/manuscript_utils/figure_utils.py +0 -0
  149. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/processors/__init__.py +0 -0
  150. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/processors/author_processor.py +0 -0
  151. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/processors/markdown_preprocessor.py +0 -0
  152. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/processors/yaml_processor.py +0 -0
  153. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/rxiv_maker_cli.py +0 -0
  154. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/scripts/__init__.py +0 -0
  155. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/scripts/custom_doc_generator.py +0 -0
  156. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/scripts/validate_manuscript.py +0 -0
  157. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/services/__init__.py +0 -0
  158. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/services/base.py +0 -0
  159. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/services/build_service.py +0 -0
  160. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/services/configuration_service.py +0 -0
  161. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/services/manuscript_service.py +0 -0
  162. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/services/publication_service.py +0 -0
  163. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/services/validation_service.py +0 -0
  164. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/templates/__init__.py +0 -0
  165. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/templates/manager.py +0 -0
  166. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/tex/python_execution_section.tex +0 -0
  167. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/__init__.py +0 -0
  168. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/author_name_formatter.py +0 -0
  169. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/bibliography_checksum.py +0 -0
  170. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/bibliography_parser.py +0 -0
  171. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/bst_generator.py +0 -0
  172. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/changelog_parser.py +0 -0
  173. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/citation_utils.py +0 -0
  174. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/dependency_checker.py +0 -0
  175. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/doi_resolver.py +0 -0
  176. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/email_encoder.py +0 -0
  177. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/figure_checksum.py +0 -0
  178. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/file_helpers.py +0 -0
  179. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/github.py +0 -0
  180. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/homebrew_checker.py +0 -0
  181. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/install_detector.py +0 -0
  182. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/operation_ids.py +0 -0
  183. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/pdf_splitter.py +0 -0
  184. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/pdf_utils.py +0 -0
  185. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/performance.py +0 -0
  186. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/platform.py +0 -0
  187. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/python_execution_reporter.py +0 -0
  188. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/retry.py +0 -0
  189. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/rich_upgrade_notifier.py +0 -0
  190. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/text_utils.py +0 -0
  191. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/tips.py +0 -0
  192. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/title_sync.py +0 -0
  193. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/unicode_safe.py +0 -0
  194. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/update_checker.py +0 -0
  195. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/utils/url_to_doi.py +0 -0
  196. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/validate.py +0 -0
  197. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/validators/__init__.py +0 -0
  198. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/validators/base_validator.py +0 -0
  199. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/validators/citation_validator.py +0 -0
  200. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/validators/doi/__init__.py +0 -0
  201. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/validators/doi/api_clients.py +0 -0
  202. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/validators/doi/metadata_comparator.py +0 -0
  203. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/validators/doi_validator.py +0 -0
  204. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/validators/figure_validator.py +0 -0
  205. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/validators/latex_error_parser.py +0 -0
  206. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/validators/math_validator.py +0 -0
  207. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/validators/pdf_validator.py +0 -0
  208. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/validators/reference_validator.py +0 -0
  209. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/rxiv_maker/validators/syntax_validator.py +0 -0
  210. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/tex/style/rxiv_maker_style.bst +0 -0
  211. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/src/tex/style/rxiv_maker_style.cls +0 -0
  212. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/__init__.py +0 -0
  213. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/cli/__init__.py +0 -0
  214. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/cli/test_build.py +0 -0
  215. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/cli/test_main.py +0 -0
  216. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/conftest.py +0 -0
  217. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/e2e/__init__.py +0 -0
  218. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/e2e/test_dummy_manuscript_generator.py +0 -0
  219. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/e2e/test_figure_workflow_validation.py +0 -0
  220. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/fixtures/00_CONFIG.yml +0 -0
  221. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/fixtures/01_MAIN.md +0 -0
  222. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/fixtures/03_REFERENCES.bib +0 -0
  223. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/fixtures/FIGURES/Fig1.png +0 -0
  224. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/fixtures/FIGURES/Fig2.png +0 -0
  225. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/fixtures/FIGURES/Fig3.png +0 -0
  226. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/fixtures/README.md +0 -0
  227. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/fixtures/docx_export/sample_manuscript/01_MAIN.md +0 -0
  228. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/fixtures/docx_export/sample_manuscript/02_SUPPLEMENTARY_INFO.md +0 -0
  229. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/fixtures/docx_export/sample_manuscript/03_REFERENCES.bib +0 -0
  230. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/fixtures/docx_export/sample_manuscript/sample_manuscript.docx +0 -0
  231. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/__init__.py +0 -0
  232. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_article_generation.py +0 -0
  233. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_bibliography_author_format_docx.py +0 -0
  234. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_binary_distribution.py +0 -0
  235. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_centralized_components.py +0 -0
  236. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_citation_injection.py +0 -0
  237. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_comment_system_integration.py +0 -0
  238. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_docx_export_integration.py +0 -0
  239. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_doi_fallback_integration.py +0 -0
  240. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_doi_validation_integration.py +0 -0
  241. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_example_manuscript.py +0 -0
  242. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_guillaume_fixtures.py +0 -0
  243. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_homebrew_workflow_validation.py +0 -0
  244. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_infrastructure_suite.py +0 -0
  245. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_init_build_workflow.py +0 -0
  246. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_install_verification_integration.py +0 -0
  247. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_latex_dependency_integration.py +0 -0
  248. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_manuscript_directory_integration.py +0 -0
  249. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_manuscript_python_execution_reporting.py +0 -0
  250. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_practical_manuscript_workflows.py +0 -0
  251. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_pypi_package_integration.py +0 -0
  252. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_python_execution_integration.py +0 -0
  253. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_repository_cli_integration.py +0 -0
  254. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_supplementary_formatting.py +0 -0
  255. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_user_reported_issue.py +0 -0
  256. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/integration/test_validation_workflow.py +0 -0
  257. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/regression/README.md +0 -0
  258. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/regression/conftest.py +0 -0
  259. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/regression/test_cli_argument_parsing.py +0 -0
  260. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/regression/test_discord_reported_issues.py +0 -0
  261. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/regression/test_error_message_quality.py +0 -0
  262. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/regression/test_google_colab_integration.py +0 -0
  263. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/regression/test_guillaume_edge_cases.py +0 -0
  264. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/regression/test_guillaume_pr131_rewrite.py +0 -0
  265. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/regression/test_path_resolution.py +0 -0
  266. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/regression/test_widget_author_behavior.py +0 -0
  267. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/regression/test_widget_interactions_playwright.py +0 -0
  268. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/smoke/__init__.py +0 -0
  269. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/smoke/test_basic_functionality.py +0 -0
  270. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/smoke/test_cli_smoke.py +0 -0
  271. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/system/__init__.py +0 -0
  272. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/system/test_ci_matrix.py +0 -0
  273. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/system/test_cli_workflows.py +0 -0
  274. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/system/test_end_to_end.py +0 -0
  275. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/test_homebrew_checker.py +0 -0
  276. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/test_install_detector.py +0 -0
  277. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/__init__.py +0 -0
  278. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/exporters/__init__.py +0 -0
  279. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/exporters/test_docx_citation_mapper.py +0 -0
  280. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/exporters/test_docx_content_processor.py +0 -0
  281. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_add_bibliography.py +0 -0
  282. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_arxiv_command.py +0 -0
  283. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_async_execution_manager.py +0 -0
  284. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_author_name_formatter.py +0 -0
  285. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_author_processor.py +0 -0
  286. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_bst_generator.py +0 -0
  287. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_build_command.py +0 -0
  288. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_build_manager.py +0 -0
  289. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_build_manager_manuscript_path.py +0 -0
  290. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_cache_security.py +0 -0
  291. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_cache_utils.py +0 -0
  292. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_check_installation_command.py +0 -0
  293. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_citation_processor.py +0 -0
  294. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_citation_rendering.py +0 -0
  295. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_citation_style.py +0 -0
  296. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_citation_utils.py +0 -0
  297. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_cli_cleanup_integration.py +0 -0
  298. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_cli_structure.py +0 -0
  299. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_comment_processor.py +0 -0
  300. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_conda_installation_manager.py +0 -0
  301. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_conda_platform_detection.py +0 -0
  302. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_cross_platform_optimizations.py +0 -0
  303. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_custom_command_processor.py +0 -0
  304. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_dependency_manager.py +0 -0
  305. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_dependency_package_names.py +0 -0
  306. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_docx_doi_resolution.py +0 -0
  307. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_docx_helpers.py +0 -0
  308. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_doi_fallback_system.py +0 -0
  309. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_doi_resolver.py +0 -0
  310. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_doi_validator.py +0 -0
  311. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_email_encoder.py +0 -0
  312. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_environment_manager.py +0 -0
  313. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_error_handling_scenarios.py +0 -0
  314. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_execution_manager_comprehensive.py +0 -0
  315. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_figure_generator.py +0 -0
  316. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_figure_processor.py +0 -0
  317. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_figure_processor_error_handling.py +0 -0
  318. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_file_helpers.py +0 -0
  319. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_fix_bibliography.py +0 -0
  320. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_generate_docs.py +0 -0
  321. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_generate_preprint.py +0 -0
  322. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_github.py +0 -0
  323. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_github_actions_integration.py +0 -0
  324. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_importlib_edge_cases.py +0 -0
  325. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_install_platform_installers.py +0 -0
  326. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_install_system_libs.py +0 -0
  327. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_install_verification.py +0 -0
  328. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_interactive_path_change.py +0 -0
  329. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_interactive_validators.py +0 -0
  330. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_latex_dependency_handler.py +0 -0
  331. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_manuscript_figure_utils.py +0 -0
  332. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_manuscript_repository.py +0 -0
  333. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_math_processor.py +0 -0
  334. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_md2tex.py +0 -0
  335. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_mermaid_fallback.py +0 -0
  336. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_path_manager.py +0 -0
  337. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_pdf_validator.py +0 -0
  338. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_platform_comprehensive.py +0 -0
  339. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_platform_detector.py +0 -0
  340. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_processor_suite.py +0 -0
  341. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_python_execution_reporter.py +0 -0
  342. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_python_executor.py +0 -0
  343. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_release_orchestrator.py +0 -0
  344. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_repository_manager.py +0 -0
  345. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_rich_upgrade_notifier.py +0 -0
  346. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_rxiv_setup_command.py +0 -0
  347. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_security_features.py +0 -0
  348. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_security_scanner.py +0 -0
  349. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_setup_environment.py +0 -0
  350. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_style_file_resolution.py +0 -0
  351. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_supplementary_note_processor.py +0 -0
  352. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_table_rotation.py +0 -0
  353. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_template_processor.py +0 -0
  354. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_text_formatters.py +0 -0
  355. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_text_utils.py +0 -0
  356. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_tips.py +0 -0
  357. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_title_sync.py +0 -0
  358. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_title_sync_validation.py +0 -0
  359. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_track_changes.py +0 -0
  360. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_trailing_slash_regression.py +0 -0
  361. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_upgrade_command.py +0 -0
  362. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_url_to_doi.py +0 -0
  363. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_utils.py +0 -0
  364. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_validate_backticks.py +0 -0
  365. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_validate_command_fixed.py +0 -0
  366. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_validate_manuscript.py +0 -0
  367. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_validation_suite.py +0 -0
  368. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_validators.py +0 -0
  369. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/unit/test_yaml_processor.py +0 -0
  370. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/visual/README.md +0 -0
  371. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/visual/figure-positioning/00_CONFIG.yml +0 -0
  372. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/visual/figure-positioning/01_MAIN.md +0 -0
  373. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/visual/figure-positioning/03_REFERENCES.bib +0 -0
  374. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/visual/figure-positioning/FIGURES/Figure__positioning_test.png +0 -0
  375. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/visual/figure-positioning/FIGURES/Figure__positioning_test.py +0 -0
  376. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/visual/figure-positioning/FIGURES/ReadyFig.png +0 -0
  377. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/visual/figure-positioning/FIGURES/ReadyFig.py +0 -0
  378. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/visual/figure-positioning/README.md +0 -0
  379. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/visual/methods-placement/00_CONFIG.yml +0 -0
  380. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/visual/methods-placement/01_MAIN.md +0 -0
  381. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/visual/methods-placement/02_SUPPLEMENTARY_INFO.md +0 -0
  382. {rxiv_maker-1.17.0 → rxiv_maker-1.18.1}/tests/visual/methods-placement/03_REFERENCES.bib +0 -0
  383. {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.17.0
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
@@ -1,3 +1,3 @@
1
1
  """Version information."""
2
2
 
3
- __version__ = "1.17.0"
3
+ __version__ = "1.18.1"
@@ -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 = EnvironmentManager.get_manuscript_path() or "MANUSCRIPT"
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
- Converts patterns like [1][2][3] to [1-3], [15][16] to [15-16], etc.
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
- if not numbers:
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 self._is_metadata_comment(comment_text):
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 self._is_metadata_comment(comment_text):
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 self._is_metadata_comment(comment_text):
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
- # Allow hyphens and underscores in label names
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
- sfig_labels = re.findall(r"!\[[^\]]*\]\([^)]+\)\s*\n\s*\{#sfig:([\w-]+)", content_to_scan_for_sfigs)
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
- snote_labels = re.findall(r"\{#snote:([\w-]+)\}", content_to_scan_for_snotes)
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
- # Allow hyphens and underscores in label names
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