At some point in 2016 the xparse package changed its k-type argument to the better e-type one. Then, shortly after, the behavior of the e-type arg was changed again to improve its usability.

This is described in this question.

Now, I'm writing a class that defines some commands using e-type args and I would like to be compatible with whichever version of xparse one might have. Notably, arXiv runs TeXLive 2016 with a version of xparse that seems to support the old behavior of e-type args, so this is an important case to consider.

Thus I would like to use \@ifpackagelater in my code to detect which kind of arguments I have to use and define my macros accordingly. However, I have troubles finding the exact versions (i.e. the date to give to \@ifpackagelater) to discriminate the two changes, i.e. from k-type to e-type, and from the old to the new behavior of e-type.

Which are the dates of those changes, suitable to give to \@ifpackagelate for this purpose?

UPDATE: To clarify my need. What I want to do is to write class code supporting TeXLive 2016 onward, because that's what arXiv runs, and this means I have to:

  1. gracefully exit if the xparse package is too old (by providing the correct date to \RequirePackage) and
  2. discriminate between the two behaviors of e-type to support both (by providing the correct date to \@ifpackagelater

So I need the dates of the two changes.

  • 2
    You know that the k-type was explicitly experimental? Would you not be best simply writing code that doesn't use this area? Alternatively, have you seen tex.stackexchange.com/questions/357187/…? You could add that then use k throughout ... – Joseph Wright Feb 6 '19 at 9:55
  • Yes, I know k-type was experimental, and I didn't like it so it's fine. I'd prefer using modern e-type args but, as said, arXiv doesn't support it, and that's a pretty important use case to consider. An alternative would be to write the same things parsing the args manually but then I'd just drop using xparse altogether... – gigabytes Feb 6 '19 at 10:19

The change was made in xparse on 2016-11-18 in commit b5adad3cd:

commit b5adad3cd26cf518099611baa4e8f6ea8f80ed0b
Author: Joseph Wright <joseph.wright@morningstar2.co.uk>
Date:   Fri Nov 18 20:22:43 2016 +0000

    Switch from "k"- to "e"-type

although there were then a few more commits to get everything right. This code was sent to CTAN with release string 2016-11-21 replacing previous version 2016-10-19, which still contains the old code.

The breaking change in e-type behaviour which then followed is in commit 94411cca7:

commit 94411cca7b70dbbd634ee42846e36039143aad87
Author: Bruno Le Floch <blflatex@gmail.com>
Date:   Wed Apr 12 17:46:46 2017 +0000

    Make xparse e-type give separate arguments (see #226, #331) (breaking change)

    This avoids requiring an auxiliary to use the output of e-type arguments. The
    current "e{^_}" has a behaviour similar to the old "k^k_" (but allowing arbitrary
    order) but quite different from the previous version of e-type arguments.

The first release containing this is 2017-05-13; the last one with the first attempt at e-type is 2017-04-01.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.