6

Today, I updated my TeX Live installation and noticed that a lot of packages were updated where the old and the new version number were identical. Looking into some examples, it seems like the packages are indeed unchanged. There seems to have been a modification in the CTAN catalogue that did not affect the package files at all. What is it and why did it happen?

An example: One of the "updated" packages was lipsum, from version 2.7 to version 2.7. Looking at its directory page, all files date from 2021, so there was no recent change justifying an update. However, when I search for lipsum, the search result is marked as "Last modified in Catalogue: 2025-11-11 12:35".

search result entry

This modification must be what triggered the update. However, I could not find this date or any reference to this modification on the package page this search result entry links to (or anywhere else, for that matter).

1

1 Answer 1

6

Today, I updated my TeX Live installation and noticed that a lot of packages were updated where the old and the new version number were identical. Looking into some examples, it seems like the packages are indeed unchanged. There seems to have been a modification in the CTAN catalogue that did not affect the package files at all. What is it and why did it happen?

In this specific case (November 2025), this is because the CTAN and TeX Live teams made some large-scale topic and description modifications; see my other answer for more details on this.

An example: One of the "updated" packages was lipsum, from version 2.7 to version 2.7. Looking at its directory page, all files date from 2021, so there was no recent change justifying an update. However, when I search for lipsum, the search result is marked as "Last modified in Catalogue: 2025-11-11 12:35".

search result entry

This modification must be what triggered the update. However, I could not find this date or any reference to this modification on the package page this search result entry links to (or anywhere else, for that matter).

Yes, unfortunately CTAN doesn't publicly expose the catalogue modification history anywhere, aside from the “Last modified” date that shows up in the search results. But for this specific November 2025 update, I can show an example (using one of my own packages, since that's for sure safe to post publicly).

CTAN has a public XML API for getting package information, so querying this API for lua-widow-control gives the following results:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE entry SYSTEM 'http://www.ctan.org/xml/2.0/catalogue.dtd'>
<entry id="lua-widow-control">
  
  <name>lua-widow-control</name>
  <caption>Automatically remove widows and orphans from any document</caption>
  <authorref id="chernoff" />
  <copyright owner='gucci-on-fleek' year='2021-2022' />
  <license type='cc-by-sa-4' />
  <license type='other-free' />
  <version  number="3.0.1" date="2024-03-11" />
  <description><p>
      Unmodified TeX has very few ways of preventing widows and orphans.
      In documents with figures, section headings, and equations, TeX can
      stretch the vertical glue between items in order to prevent widows
      and orphans, but many documents have no figures or headings.
      TeX can also shorten the page by 1 line, but this will give each
      page a different length which can make a document look uneven.
      The typical solution is to strategically insert <code>\looseness=1</code>,
      but this requires manual editing every time that the document is edited.
      Lua-widow-control is essentially an automation of the
      <code>\looseness</code> method: it uses Lua callbacks to find
      ��stretchy” paragraphs, then it lengthens them to remove widows and orphans.
    </p>
  <p>
      Lua-widow-control is compatible with all LuaTeX and LuaMetaTeX-based formats.
      All that is required is to load the package at the start of your document.
      To load:
    </p>
  <ul>
    <li>Plain LuaTeX: <code>\input lua-widow-control</code>
    </li>
    <li>LuaLaTeX: <code>\usepackage{lua-widow-control}</code>
    </li>
    <li>ConTeXt: <code>\usemodule[lua-widow-control]</code>
    </li>
    <li>OpTeX: <code>\load[lua-widow-control]</code>
    </li>
  </ul></description>
  <documentation  details="Readme" href="ctan://macros/luatex/generic/lua-widow-control/README.md" />
  <documentation  details="Package documentation" href="ctan://macros/luatex/generic/lua-widow-control/lua-widow-control.pdf" />
  <documentation  details="TUGboat article" href="ctan://macros/luatex/generic/lua-widow-control/tb133chernoff-widows.pdf" />
  <documentation  details="Zpravodaj article" href="ctan://macros/luatex/generic/lua-widow-control/lwc-zpravodaj.pdf" />
  <contact type="support" href="https://github.com/gucci-on-fleek/lua-widow-control/discussions" />
  <contact type="bugs" href="https://github.com/gucci-on-fleek/lua-widow-control/issues" />
  <contact type="repository" href="https://github.com/gucci-on-fleek/lua-widow-control" />
  <ctan path='/macros/luatex/generic/lua-widow-control' file="true" />
  <install path='/macros/luatex/generic/lua-widow-control.tds.zip' />
  <miktex location='lua-widow-control' />
  <texlive location='lua-widow-control' />
  <keyval key='topic' value='luatex' />
  <keyval key='topic' value='layout' />
  
</entry>

Internally, CTAN generates the catalogue from XML files, which have a few extra fields compared to the ones returned by the API, but are otherwise identical:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE entry SYSTEM 'catalogue.dtd'>
<entry datestamp='$Date: 2025-11-11 11:36:51 +0100 (Tue, 11 Nov 2025) $' modifier='$Author: manfred $' id='lua-widow-control'>
  <name>lua-widow-control</name>
  <caption>Automatically remove widows and orphans from any document</caption>
  <authorref id='chernoff'/>
  <copyright owner='gucci-on-fleek' year='2021-2022'/>
  <contact type='bugs' href='https://github.com/gucci-on-fleek/lua-widow-control/issues'/>
  <contact type='support' href='https://github.com/gucci-on-fleek/lua-widow-control/discussions'/>
  <contact type='repository' href='https://github.com/gucci-on-fleek/lua-widow-control'/>
  <license type='other-free' checked='2021-10-10' file='README.md'
    version='1.0.0' username='petra'
    note='This “other-free” is MPL-2.0+ = Mozilla Public License v2, scope=*'/>
  <license type='cc-by-sa-4' checked='2021-10-10' file='README.md'
    version='1.0.0' username='petra'
    note='scope = the documentation'/>
  <version number='3.0.1' date='2024-03-11'/>
  <description>
    <p>
      Unmodified TeX has very few ways of preventing widows and orphans.
      In documents with figures, section headings, and equations, TeX can
      stretch the vertical glue between items in order to prevent widows
      and orphans, but many documents have no figures or headings.
      TeX can also shorten the page by 1 line, but this will give each
      page a different length which can make a document look uneven.
      The typical solution is to strategically insert <code>\looseness=1</code>,
      but this requires manual editing every time that the document is edited.
      Lua-widow-control is essentially an automation of the
      <code>\looseness</code> method: it uses Lua callbacks to find
      “stretchy” paragraphs, then it lengthens them to remove widows and orphans.
    </p>
    <p>
      Lua-widow-control is compatible with all LuaTeX and LuaMetaTeX-based formats.
      All that is required is to load the package at the start of your document.
      To load:
    </p>
    <ul>
      <li>Plain LuaTeX: <code>\input lua-widow-control</code></li>
      <li>LuaLaTeX: <code>\usepackage{lua-widow-control}</code></li>
      <li>ConTeXt: <code>\usemodule[lua-widow-control]</code></li>
      <li>OpTeX: <code>\load[lua-widow-control]</code></li>
    </ul>
  </description>
  <installation_notes>
    lua-widow-control.tex is a runtime file.
    The source for lua-widow-control.pdf is lwc-documentation.tex.
       Petra, 2022-02-15
  </installation_notes>
  <documentation details='Readme'
    href='ctan:/macros/luatex/generic/lua-widow-control/README.md'/>
  <documentation details='Package documentation'
    href='ctan:/macros/luatex/generic/lua-widow-control/lua-widow-control.pdf'/>
  <documentation details='TUGboat article'
    href='ctan:/macros/luatex/generic/lua-widow-control/tb133chernoff-widows.pdf'/>
  <documentation details='Zpravodaj article'
    href='ctan:/macros/luatex/generic/lua-widow-control/lwc-zpravodaj.pdf'/>
  <ctan path='/macros/luatex/generic/lua-widow-control'/>
  <miktex  location='lua-widow-control'/>
  <texlive location='lua-widow-control'/>
  <install path='/macros/luatex/generic/lua-widow-control.tds.zip'/>
  <keyval key='topic' value='layout'/>
  <keyval key='topic' value='luatex'/>
</entry>

According to the internal CTAN SVN, these are the most recent updates to the package's catalogue entry:

------------------------------------------------------------------------
r58377 | manfred | 2025-11-11 11:36:51 +0100 (Tue, 11 Nov 2025) | 2 lines

remove expl3 topic for many packages


Index: entries/l/lua-widow-control.xml
===================================================================
--- entries/l/lua-widow-control.xml (revision 58376)
+++ entries/l/lua-widow-control.xml (revision 58377)
@@ -60,5 +60,4 @@
   <install path='/macros/luatex/generic/lua-widow-control.tds.zip'/>
   <keyval key='topic' value='layout'/>
   <keyval key='topic' value='luatex'/>
-  <keyval key='topic' value='expl3'/>
 </entry>

------------------------------------------------------------------------
r52817 | petra | 2024-03-11 13:58:29 +0100 (Mon, 11 Mar 2024) | 1 line

lua-widow-control: update

Index: entries/l/lua-widow-control.xml
===================================================================
--- entries/l/lua-widow-control.xml (revision 52816)
+++ entries/l/lua-widow-control.xml (revision 52817)
@@ -14,7 +14,7 @@
   <license type='cc-by-sa-4' checked='2021-10-10' file='README.md'
     version='1.0.0' username='petra'
     note='scope = the documentation'/>
-  <version number='3.0.0' date='2022-11-22'/>
+  <version number='3.0.1' date='2024-03-11'/>
   <description>
     <p>
       Unmodified TeX has very few ways of preventing widows and orphans.

------------------------------------------------------------------------
r48602 | petra | 2022-11-22 10:43:35 +0100 (Tue, 22 Nov 2022) | 1 line

lua-widow-control: update

Index: entries/l/lua-widow-control.xml
===================================================================
--- entries/l/lua-widow-control.xml (revision 48601)
+++ entries/l/lua-widow-control.xml (revision 48602)
@@ -14,7 +14,7 @@
   <license type='cc-by-sa-4' checked='2021-10-10' file='README.md'
     version='1.0.0' username='petra'
     note='scope = the documentation'/>
-  <version number='2.2.2' date='2022-08-23'/>
+  <version number='3.0.0' date='2022-11-22'/>
   <description>
     <p>
       Unmodified TeX has very few ways of preventing widows and orphans.
@@ -30,7 +30,7 @@
       “stretchy” paragraphs, then it lengthens them to remove widows and orphans.
     </p>
     <p>
-      Lua-widow-control is compatible with all LuaTeX-based formats.
+      Lua-widow-control is compatible with all LuaTeX and LuaMetaTeX-based formats.
       All that is required is to load the package at the start of your document.
       To load:
     </p>
@@ -50,8 +50,10 @@
     href='ctan:/macros/luatex/generic/lua-widow-control/README.md'/>
   <documentation details='Package documentation'
     href='ctan:/macros/luatex/generic/lua-widow-control/lua-widow-control.pdf'/>
-  <documentation details='TUGboat Article'
+  <documentation details='TUGboat article'
     href='ctan:/macros/luatex/generic/lua-widow-control/tb133chernoff-widows.pdf'/>
+  <documentation details='Zpravodaj article'
+    href='ctan:/macros/luatex/generic/lua-widow-control/lwc-zpravodaj.pdf'/>
   <ctan path='/macros/luatex/generic/lua-widow-control'/>
   <miktex  location='lua-widow-control'/>
   <texlive location='lua-widow-control'/>

------------------------------------------------------------------------

And indeed, the (public) TeX Live SVN shows that lua-widow-control was updated alongside all the other packages a few days ago, despite its contents not changing at all in that time.

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.