latexpages


Namelatexpages JSON
Version 0.8 PyPI version JSON
download
home_pageNone
SummaryCombine LaTeX docs into a single PDF
upload_time2025-10-12 18:27:09
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseNone
keywords pdfpages parallel compilation proceedings
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            Latexpages
==========

|PyPI version| |License| |Supported Python| |Downloads|

|Build| |Codecov|

This tool automates compiling LaTeX document collections (for working papers,
proceedings, etc.) into a single combined PDF file using the pdfpages_ package.

Create an **INI file** giving the name and parts of your collection and build
it with the ``latexpages`` command-line utility.

``latexpages`` will start one parallel typesetting process per core for
speedup.

As each part is typeset independently, this allows to combine documents that
cannot be merged into a single master-document (use of incompatible
packages/options, latex-dvips-ps2pdf vs. pdflatex, etc.).


Links
-----

- GitHub: https://github.com/xflr6/latexpages
- PyPI: https://pypi.org/project/latexpages/
- Issue Tracker: https://github.com/xflr6/latexpages/issues
- Download: https://pypi.org/project/latexpages/#files


Installation
------------

This package runs under Python 3.10+, use pip_ to install:

.. code:: bash

    $ pip install latexpages

The compilation requires a TeX distribution (e.g. `TeX Live`_ or MikTeX_) and
either latexmk_ or MikTeX's texify_ utility being available on your system.

The optional automatic page numbering (see below) requires either the
``pdfinfo`` command-line utility (included in poppler_-utils,
miktex-poppler-bin_, xpdf_), or the  pdftk_ command-line utility (both
available cross-platform).


Usage
-----

Create a working directory holding your plain-text INI file with the latexpages
configuration. Put all your documents into subdirectories with the same name as
the corresponding ``.tex`` file:

::

    collection/
        latexpages.ini
        article1/
            article1.tex
            references.bib
        article2/
            article2.tex
            ...

Note: the directory names cannot contain spaces.

Edit the INI file to configure the parts, their order and various other
options:

.. code:: ini

    [make]
    name = MY_COLL
    directory = _output
    
    [parts]
    mainmatter = 
      article1
      article2

The following will typeset all parts, copy their PDFs to the output directory,
and combine them into a single PDF. By default, this also creates a 2-up
version:

.. code:: bash

    $ latexpages latexpages.ini

Check the `example directory`_ in the source distribution for a working
complete example. 


Invocation
----------

Check the usage of the ``latexpages`` command:

.. code:: bash

    $ latexpages --help
    usage: latexpages [-h] [--version] [-c {latexmk,texify}] [--keep]
                      [--only <part>] [--processes <n>]
                      [filename]
    
    Compiles and combines LaTeX docs into a single PDF file
    
    positional arguments:
      filename             INI file configuring the parts and output options
                           (default: latexpages.ini in the current directory)
    
    optional arguments:
      -h, --help           show this help message and exit
      --version            show program's version number and exit
      -c {latexmk,texify}  use latexmk.pl or texify (default: guess from platform)
      --keep               keep combination document(s) and their auxiliary files
      --only <part>        compile the given part without combining
      --processes <n>      number of parallel processes (default: one per core)


Pagination
----------

The following command goes trough all main documents and **updates the page
number** in the first ``\setcounter{page}{<number>}`` line of the source
according to the page count of the preceding documents' compiled PDFs.

.. code:: bash

    $ latexpages-paginate latexpages.ini

Make sure either the ``pdfinfo`` command-line tool (poppler_/xpdf_) or the
``pdftk`` executable from pdftk_ is available on your systems' path.

To use a different pattern for finding the ``\setcounter`` lines, set the
``update`` option in the ``paginate`` section of your INI file to a suitable
`regular expression`_.

.. code:: ini

    [paginate]
    update = \\setcounter\{page\}\{(\d+)\}


To also update the page numbers in your **table of contents**, put the
corresponding part name in the ``paginate`` section of your INI file.

Directory structure:

::

    collection/
        latexpages.ini
        prelims/
            prelims.tex
        article1/
            article1.tex
            ...

Configuration:

.. code:: ini

    [parts]
    frontmatter =
      prelims
    mainmatter = 
      article1
      article2

    [paginate]
    contents = prelims

By default, ``latexpages-paginate`` will search and update
``\startpage{<number>}`` lines in the source. To use this as marker, define and
use a corresponding LaTeX-command in your table of contents, e.g.
``\newcommand{\startpage}[1]{#1}``. A complete example is in the `example
directory`_

To use a different pattern for finding the table of contents lines, change
the `regular expression`_ in the ``replace`` option.

.. code:: ini

    [paginate]
    replace = \\startpage\{(\d+)\}


Check the usage of the ``latexpages-paginate`` command:

.. code:: bash

    $ latexpages-paginate --help
    usage: latexpages-paginate [-h] [--version] [filename]
    
    Computes and updates start page numbers in compiled parts and contents
    
    positional arguments:
      filename    INI file configuring the parts and paginate options
                  (default: latexpages.ini in the current directory)
    
    optional arguments:
      -h, --help  show this help message and exit
      --version   show program's version number and exit


Advanced options
----------------

Below are annotated INI file sections showing the **default options** for all
available configuration settings.

The ``make`` section sets the **names** and file name templates_ for the
results:

.. code:: ini

    [make]
    name = COLL              # name of the resulting PDF file
    directory = _output      # directory to copy/put the results
    
    two_up = __%(name)s_2up  # name of the 2-up version PDF file
    make_two_up = true       # create a 2-up version (yes/no)
    
    # templates for the name of the copied part PDF files for each
    # of the three possible groups (frontmatter, mainmatter, extras)
    # available substitutions:
    #   (note that the percent-sign must be doubled here)
    #   %%(name)s    name of the result file (see above)
    #   %%(part)s    name of the part directory/filename
    #   %%(index0)d  zero-based index inside group
    #   %%(index1)d  one-based index inside group
    
    frontmatter = _%%(name)s_%%(part)s
    mainmatter = %%(name)s_%%(index1)02d_%%(part)s
    extras = %(frontmatter)s


The ``parts`` section gives **space-delimited** lists of parts to compile
and/or include:

.. code:: ini

    [parts]
    frontmatter =  # include at the beginning, roman page numbering 
    mainmatter =   # include after frontmatter, arabic page numbering
    extras =       # compile and copy only (e.g. a separate cover page)
    
    use_dvips =    # use latex -> dvips -> ps2pdf for these parts
                   # instead of pdflatex (e.g. pstricks usage)
    
    # pull the first mainmatter part into the roman page numbering area
    first_to_front = false


The ``substitute`` section fills the template that is used to create the
combination document. With the default template, this allows to set the PDF
**meta data**:

.. code:: ini

    [substitute]   
    # options for \usepackage{hyperref}
    author =       # pdfauthor
    title =        # pdftitle
    subject =      # pdfsubject
    keywords =     # pdfkeywords


The ``template`` section allows to customize the details of the **combination
document**:

.. code:: ini

    [template]
    filename =         # use a custom template
    filename_two_up =  # different template for 2-up version
    
    class = scrartcl   # use this documentclass
    
    # documentclass options for combination and 2-up version
    options = paper=a5    
    options_two_up = paper=a4,landscape
    
    # includepdfmerge options for combination and 2-up version
    include = fitpaper
    include_two_up = nup=2x1,openright


The ``compile`` section allows to change the **invocation options** of the
compilation commands used.

.. code:: ini

    [compile]
    latexmk = -silent                   # less verbose 
    
    texify = --batch --verbose --quiet  # halt on error, less verbose
    # only used with texify (latexmk calls these automatically)
    dvips = -q
    ps2pdf =


Finally, the ``paginate`` section controls ``latexpages-paginate`` (see above).

.. code:: ini

    [paginate]
    update = \\setcounter\{page\}\{(\d+)\}  # search/update regex
    contents =                              # part with table of contents
    replace = \\startpage\{(\d+)\}          # toc line search/update regex


See also
--------

- https://www.ctan.org/topic/compilation
- https://www.ctan.org/topic/confproc
- https://www.ctan.org/pkg/pdfpages
- https://www.ctan.org/pkg/confproc
- http://go.warwick.ac.uk/pdfjam
- http://community.coherentpdf.com
- https://github.com/JacksonLLee/cls-proceedings


License
-------

``latexpages`` is distributed under the `MIT license`_.


.. _pdfpages: https://www.ctan.org/pkg/pdfpages
.. _pip: https://pip.readthedocs.io

.. _TeX Live: https://www.tug.org/texlive/
.. _MikTeX: https://miktex.org
.. _latexmk: http://personal.psu.edu/jcc8/software/latexmk-jcc/
.. _texify: https://docs.miktex.org/manual/texifying.html
.. _poppler: https://poppler.freedesktop.org
.. _miktex-poppler-bin: https://www.ctan.org/search/?phrase=miktex-poppler-bin&ext=true&FILES=on
.. _xpdf: http://foolabs.com/xpdf/
.. _pdftk: https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/
.. _regular expression: https://docs.python.org/2/library/re.html

.. _example directory: https://github.com/xflr6/latexpages/tree/master/example

.. _templates: https://docs.python.org/2/library/stdtypes.html#string-formatting

.. _MIT license: https://opensource.org/licenses/MIT


.. |--| unicode:: U+2013


.. |PyPI version| image:: https://img.shields.io/pypi/v/latexpages.svg
    :target: https://pypi.org/project/latexpages/
    :alt: Latest PyPI Version
.. |License| image:: https://img.shields.io/pypi/l/latexpages.svg
    :target: https://github.com/xflr6/latexpages/blob/master/LICENSE.txt
    :alt: License
.. |Supported Python| image:: https://img.shields.io/pypi/pyversions/latexpages.svg
    :target: https://pypi.org/project/latexpages/
    :alt: Supported Python Versions
.. |Downloads| image:: https://img.shields.io/pypi/dm/latexpages.svg
    :target: https://pypistats.org/packages/latexpages
    :alt: Monthly downloads

.. |Build| image:: https://github.com/xflr6/latexpages/actions/workflows/build.yaml/badge.svg?branch=master
    :target: https://github.com/xflr6/latexpages/actions/workflows/build.yaml?query=branch%3Amaster
    :alt: Build
.. |Codecov| image:: https://codecov.io/gh/xflr6/latexpages/branch/master/graph/badge.svg
    :target: https://codecov.io/gh/xflr6/latexpages
    :alt: Codecov

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "latexpages",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "pdfpages, parallel, compilation, proceedings",
    "author": null,
    "author_email": "Sebastian Bank <sebastian.bank@uni-leipzig.de>",
    "download_url": "https://files.pythonhosted.org/packages/f7/53/2e5d84422fee15dda03df6f832c0d1d6e67b1776a1cc85b64a37a07e503e/latexpages-0.8.tar.gz",
    "platform": "any",
    "description": "Latexpages\r\n==========\r\n\r\n|PyPI version| |License| |Supported Python| |Downloads|\r\n\r\n|Build| |Codecov|\r\n\r\nThis tool automates compiling LaTeX document collections (for working papers,\r\nproceedings, etc.) into a single combined PDF file using the pdfpages_ package.\r\n\r\nCreate an **INI file** giving the name and parts of your collection and build\r\nit with the ``latexpages`` command-line utility.\r\n\r\n``latexpages`` will start one parallel typesetting process per core for\r\nspeedup.\r\n\r\nAs each part is typeset independently, this allows to combine documents that\r\ncannot be merged into a single master-document (use of incompatible\r\npackages/options, latex-dvips-ps2pdf vs. pdflatex, etc.).\r\n\r\n\r\nLinks\r\n-----\r\n\r\n- GitHub: https://github.com/xflr6/latexpages\r\n- PyPI: https://pypi.org/project/latexpages/\r\n- Issue Tracker: https://github.com/xflr6/latexpages/issues\r\n- Download: https://pypi.org/project/latexpages/#files\r\n\r\n\r\nInstallation\r\n------------\r\n\r\nThis package runs under Python 3.10+, use pip_ to install:\r\n\r\n.. code:: bash\r\n\r\n    $ pip install latexpages\r\n\r\nThe compilation requires a TeX distribution (e.g. `TeX Live`_ or MikTeX_) and\r\neither latexmk_ or MikTeX's texify_ utility being available on your system.\r\n\r\nThe optional automatic page numbering (see below) requires either the\r\n``pdfinfo`` command-line utility (included in poppler_-utils,\r\nmiktex-poppler-bin_, xpdf_), or the  pdftk_ command-line utility (both\r\navailable cross-platform).\r\n\r\n\r\nUsage\r\n-----\r\n\r\nCreate a working directory holding your plain-text INI file with the latexpages\r\nconfiguration. Put all your documents into subdirectories with the same name as\r\nthe corresponding ``.tex`` file:\r\n\r\n::\r\n\r\n    collection/\r\n        latexpages.ini\r\n        article1/\r\n            article1.tex\r\n            references.bib\r\n        article2/\r\n            article2.tex\r\n            ...\r\n\r\nNote: the directory names cannot contain spaces.\r\n\r\nEdit the INI file to configure the parts, their order and various other\r\noptions:\r\n\r\n.. code:: ini\r\n\r\n    [make]\r\n    name = MY_COLL\r\n    directory = _output\r\n    \r\n    [parts]\r\n    mainmatter = \r\n      article1\r\n      article2\r\n\r\nThe following will typeset all parts, copy their PDFs to the output directory,\r\nand combine them into a single PDF. By default, this also creates a 2-up\r\nversion:\r\n\r\n.. code:: bash\r\n\r\n    $ latexpages latexpages.ini\r\n\r\nCheck the `example directory`_ in the source distribution for a working\r\ncomplete example. \r\n\r\n\r\nInvocation\r\n----------\r\n\r\nCheck the usage of the ``latexpages`` command:\r\n\r\n.. code:: bash\r\n\r\n    $ latexpages --help\r\n    usage: latexpages [-h] [--version] [-c {latexmk,texify}] [--keep]\r\n                      [--only <part>] [--processes <n>]\r\n                      [filename]\r\n    \r\n    Compiles and combines LaTeX docs into a single PDF file\r\n    \r\n    positional arguments:\r\n      filename             INI file configuring the parts and output options\r\n                           (default: latexpages.ini in the current directory)\r\n    \r\n    optional arguments:\r\n      -h, --help           show this help message and exit\r\n      --version            show program's version number and exit\r\n      -c {latexmk,texify}  use latexmk.pl or texify (default: guess from platform)\r\n      --keep               keep combination document(s) and their auxiliary files\r\n      --only <part>        compile the given part without combining\r\n      --processes <n>      number of parallel processes (default: one per core)\r\n\r\n\r\nPagination\r\n----------\r\n\r\nThe following command goes trough all main documents and **updates the page\r\nnumber** in the first ``\\setcounter{page}{<number>}`` line of the source\r\naccording to the page count of the preceding documents' compiled PDFs.\r\n\r\n.. code:: bash\r\n\r\n    $ latexpages-paginate latexpages.ini\r\n\r\nMake sure either the ``pdfinfo`` command-line tool (poppler_/xpdf_) or the\r\n``pdftk`` executable from pdftk_ is available on your systems' path.\r\n\r\nTo use a different pattern for finding the ``\\setcounter`` lines, set the\r\n``update`` option in the ``paginate`` section of your INI file to a suitable\r\n`regular expression`_.\r\n\r\n.. code:: ini\r\n\r\n    [paginate]\r\n    update = \\\\setcounter\\{page\\}\\{(\\d+)\\}\r\n\r\n\r\nTo also update the page numbers in your **table of contents**, put the\r\ncorresponding part name in the ``paginate`` section of your INI file.\r\n\r\nDirectory structure:\r\n\r\n::\r\n\r\n    collection/\r\n        latexpages.ini\r\n        prelims/\r\n            prelims.tex\r\n        article1/\r\n            article1.tex\r\n            ...\r\n\r\nConfiguration:\r\n\r\n.. code:: ini\r\n\r\n    [parts]\r\n    frontmatter =\r\n      prelims\r\n    mainmatter = \r\n      article1\r\n      article2\r\n\r\n    [paginate]\r\n    contents = prelims\r\n\r\nBy default, ``latexpages-paginate`` will search and update\r\n``\\startpage{<number>}`` lines in the source. To use this as marker, define and\r\nuse a corresponding LaTeX-command in your table of contents, e.g.\r\n``\\newcommand{\\startpage}[1]{#1}``. A complete example is in the `example\r\ndirectory`_\r\n\r\nTo use a different pattern for finding the table of contents lines, change\r\nthe `regular expression`_ in the ``replace`` option.\r\n\r\n.. code:: ini\r\n\r\n    [paginate]\r\n    replace = \\\\startpage\\{(\\d+)\\}\r\n\r\n\r\nCheck the usage of the ``latexpages-paginate`` command:\r\n\r\n.. code:: bash\r\n\r\n    $ latexpages-paginate --help\r\n    usage: latexpages-paginate [-h] [--version] [filename]\r\n    \r\n    Computes and updates start page numbers in compiled parts and contents\r\n    \r\n    positional arguments:\r\n      filename    INI file configuring the parts and paginate options\r\n                  (default: latexpages.ini in the current directory)\r\n    \r\n    optional arguments:\r\n      -h, --help  show this help message and exit\r\n      --version   show program's version number and exit\r\n\r\n\r\nAdvanced options\r\n----------------\r\n\r\nBelow are annotated INI file sections showing the **default options** for all\r\navailable configuration settings.\r\n\r\nThe ``make`` section sets the **names** and file name templates_ for the\r\nresults:\r\n\r\n.. code:: ini\r\n\r\n    [make]\r\n    name = COLL              # name of the resulting PDF file\r\n    directory = _output      # directory to copy/put the results\r\n    \r\n    two_up = __%(name)s_2up  # name of the 2-up version PDF file\r\n    make_two_up = true       # create a 2-up version (yes/no)\r\n    \r\n    # templates for the name of the copied part PDF files for each\r\n    # of the three possible groups (frontmatter, mainmatter, extras)\r\n    # available substitutions:\r\n    #   (note that the percent-sign must be doubled here)\r\n    #   %%(name)s    name of the result file (see above)\r\n    #   %%(part)s    name of the part directory/filename\r\n    #   %%(index0)d  zero-based index inside group\r\n    #   %%(index1)d  one-based index inside group\r\n    \r\n    frontmatter = _%%(name)s_%%(part)s\r\n    mainmatter = %%(name)s_%%(index1)02d_%%(part)s\r\n    extras = %(frontmatter)s\r\n\r\n\r\nThe ``parts`` section gives **space-delimited** lists of parts to compile\r\nand/or include:\r\n\r\n.. code:: ini\r\n\r\n    [parts]\r\n    frontmatter =  # include at the beginning, roman page numbering \r\n    mainmatter =   # include after frontmatter, arabic page numbering\r\n    extras =       # compile and copy only (e.g. a separate cover page)\r\n    \r\n    use_dvips =    # use latex -> dvips -> ps2pdf for these parts\r\n                   # instead of pdflatex (e.g. pstricks usage)\r\n    \r\n    # pull the first mainmatter part into the roman page numbering area\r\n    first_to_front = false\r\n\r\n\r\nThe ``substitute`` section fills the template that is used to create the\r\ncombination document. With the default template, this allows to set the PDF\r\n**meta data**:\r\n\r\n.. code:: ini\r\n\r\n    [substitute]   \r\n    # options for \\usepackage{hyperref}\r\n    author =       # pdfauthor\r\n    title =        # pdftitle\r\n    subject =      # pdfsubject\r\n    keywords =     # pdfkeywords\r\n\r\n\r\nThe ``template`` section allows to customize the details of the **combination\r\ndocument**:\r\n\r\n.. code:: ini\r\n\r\n    [template]\r\n    filename =         # use a custom template\r\n    filename_two_up =  # different template for 2-up version\r\n    \r\n    class = scrartcl   # use this documentclass\r\n    \r\n    # documentclass options for combination and 2-up version\r\n    options = paper=a5    \r\n    options_two_up = paper=a4,landscape\r\n    \r\n    # includepdfmerge options for combination and 2-up version\r\n    include = fitpaper\r\n    include_two_up = nup=2x1,openright\r\n\r\n\r\nThe ``compile`` section allows to change the **invocation options** of the\r\ncompilation commands used.\r\n\r\n.. code:: ini\r\n\r\n    [compile]\r\n    latexmk = -silent                   # less verbose \r\n    \r\n    texify = --batch --verbose --quiet  # halt on error, less verbose\r\n    # only used with texify (latexmk calls these automatically)\r\n    dvips = -q\r\n    ps2pdf =\r\n\r\n\r\nFinally, the ``paginate`` section controls ``latexpages-paginate`` (see above).\r\n\r\n.. code:: ini\r\n\r\n    [paginate]\r\n    update = \\\\setcounter\\{page\\}\\{(\\d+)\\}  # search/update regex\r\n    contents =                              # part with table of contents\r\n    replace = \\\\startpage\\{(\\d+)\\}          # toc line search/update regex\r\n\r\n\r\nSee also\r\n--------\r\n\r\n- https://www.ctan.org/topic/compilation\r\n- https://www.ctan.org/topic/confproc\r\n- https://www.ctan.org/pkg/pdfpages\r\n- https://www.ctan.org/pkg/confproc\r\n- http://go.warwick.ac.uk/pdfjam\r\n- http://community.coherentpdf.com\r\n- https://github.com/JacksonLLee/cls-proceedings\r\n\r\n\r\nLicense\r\n-------\r\n\r\n``latexpages`` is distributed under the `MIT license`_.\r\n\r\n\r\n.. _pdfpages: https://www.ctan.org/pkg/pdfpages\r\n.. _pip: https://pip.readthedocs.io\r\n\r\n.. _TeX Live: https://www.tug.org/texlive/\r\n.. _MikTeX: https://miktex.org\r\n.. _latexmk: http://personal.psu.edu/jcc8/software/latexmk-jcc/\r\n.. _texify: https://docs.miktex.org/manual/texifying.html\r\n.. _poppler: https://poppler.freedesktop.org\r\n.. _miktex-poppler-bin: https://www.ctan.org/search/?phrase=miktex-poppler-bin&ext=true&FILES=on\r\n.. _xpdf: http://foolabs.com/xpdf/\r\n.. _pdftk: https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/\r\n.. _regular expression: https://docs.python.org/2/library/re.html\r\n\r\n.. _example directory: https://github.com/xflr6/latexpages/tree/master/example\r\n\r\n.. _templates: https://docs.python.org/2/library/stdtypes.html#string-formatting\r\n\r\n.. _MIT license: https://opensource.org/licenses/MIT\r\n\r\n\r\n.. |--| unicode:: U+2013\r\n\r\n\r\n.. |PyPI version| image:: https://img.shields.io/pypi/v/latexpages.svg\r\n    :target: https://pypi.org/project/latexpages/\r\n    :alt: Latest PyPI Version\r\n.. |License| image:: https://img.shields.io/pypi/l/latexpages.svg\r\n    :target: https://github.com/xflr6/latexpages/blob/master/LICENSE.txt\r\n    :alt: License\r\n.. |Supported Python| image:: https://img.shields.io/pypi/pyversions/latexpages.svg\r\n    :target: https://pypi.org/project/latexpages/\r\n    :alt: Supported Python Versions\r\n.. |Downloads| image:: https://img.shields.io/pypi/dm/latexpages.svg\r\n    :target: https://pypistats.org/packages/latexpages\r\n    :alt: Monthly downloads\r\n\r\n.. |Build| image:: https://github.com/xflr6/latexpages/actions/workflows/build.yaml/badge.svg?branch=master\r\n    :target: https://github.com/xflr6/latexpages/actions/workflows/build.yaml?query=branch%3Amaster\r\n    :alt: Build\r\n.. |Codecov| image:: https://codecov.io/gh/xflr6/latexpages/branch/master/graph/badge.svg\r\n    :target: https://codecov.io/gh/xflr6/latexpages\r\n    :alt: Codecov\r\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Combine LaTeX docs into a single PDF",
    "version": "0.8",
    "project_urls": {
        "CI": "https://github.com/xflr6/latexpages/actions",
        "Homepage": "https://github.com/xflr6/latexpages",
        "Issue Tracker": "https://github.com/xflr6/latexpages/issues"
    },
    "split_keywords": [
        "pdfpages",
        " parallel",
        " compilation",
        " proceedings"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "70a5cd7ae64178917eebb952a69a76a9951f430fed803ab52678ce1180423fc9",
                "md5": "d894159a094ffef0292829a73acc2648",
                "sha256": "1b6e607ad9bd17d5e99fef0c2d1d0a71231a874ac93799bc5e309d6942e8689a"
            },
            "downloads": -1,
            "filename": "latexpages-0.8-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "d894159a094ffef0292829a73acc2648",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 19475,
            "upload_time": "2025-10-12T18:27:07",
            "upload_time_iso_8601": "2025-10-12T18:27:07.825422Z",
            "url": "https://files.pythonhosted.org/packages/70/a5/cd7ae64178917eebb952a69a76a9951f430fed803ab52678ce1180423fc9/latexpages-0.8-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f7532e5d84422fee15dda03df6f832c0d1d6e67b1776a1cc85b64a37a07e503e",
                "md5": "3dadc3fb3be0a3b7a294d2a859fd4f5d",
                "sha256": "0c2a044de697583078fcc70842f8f99c3fcc8659ce286482ae47a97929bce046"
            },
            "downloads": -1,
            "filename": "latexpages-0.8.tar.gz",
            "has_sig": false,
            "md5_digest": "3dadc3fb3be0a3b7a294d2a859fd4f5d",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 24414,
            "upload_time": "2025-10-12T18:27:09",
            "upload_time_iso_8601": "2025-10-12T18:27:09.128402Z",
            "url": "https://files.pythonhosted.org/packages/f7/53/2e5d84422fee15dda03df6f832c0d1d6e67b1776a1cc85b64a37a07e503e/latexpages-0.8.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-12 18:27:09",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "xflr6",
    "github_project": "latexpages",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [],
    "lcname": "latexpages"
}
        
Elapsed time: 4.09590s