fontspec icon indicating copy to clipboard operation
fontspec copied to clipboard

Global option `math` and latest `fontspec` package

Open lvjr opened this issue 6 months ago • 5 comments

Description

My class defines math option as choice key with \DeclareKeys command, but latest fontspec package doesn't like it and throws an error.

! LaTeX Error: Key 'fontspec/math' accepts boolean values only.

Check/indicate

  • [x] Relevant for XeTeX
  • [x] Relevant for LuaTeX
  • [x] Issue tracker has been searched for similar issues?
  • [ ] Links to <tex.stackexchange.com> discussion if appropriate

Minimal example demonstrating the issue

\documentclass[math=many]{randexam}
\usepackage{fontspec}
\begin{document}
Test
\end{document}

lvjr avatar Feb 17 '24 10:02 lvjr

The issue is really with the latex format rather than fontspec. The new l3keys based option handler processes the global document class keys when handling a package, for consistency with traditional latex options.

It's possible that \ProcessKeyOptions could or should simply skip a key of the wrong type rather than throwing this error when processing the classoptions from within a package

Your class could remove the math=many from the global option list so it was not picked up by packages, which would get things working now, but I'm not sure if that's the best long term solution.

\ExplSyntaxOn
\prop_new:N\cEmptyProp
\ExplSyntaxOff
\documentclass[math=many]{randexam}
\makeatletter
\let\@raw@classoptionslist\@empty % or just remove math but simple case here
\makeatother
\usepackage{fontspec}
\begin{document}
Test
\end{document}```

davidcarlisle avatar Feb 17 '24 11:02 davidcarlisle

You could also set the unknown handler (and fontspec could do that too):

\documentclass{book}
\ExplSyntaxOn
\DeclareKeys
 {
   math  .choice:,
   math / many .code:n = {\def\blub{abc}},
   math / unknown .code:n={\typeout{class??????}}
 }

\SetKeys{math=many,math=xxxx}
\show\blub

\DeclareKeys
 {
   math    .bool_gset:N = \g__fontspec_math_bool,
   math / unknown .code:n={\typeout{fontspec??????}}
 }
 
\SetKeys{math=true,math=blub}  
\bool_if:NT \g__fontspec_math_bool {\show\yes}

\ExplSyntaxOff

\begin{document}
abc
\end{document}

u-fischer avatar Feb 17 '24 11:02 u-fischer

Perhaps a package should be able to opt out of inheriting the global class options? Without looking into the package exhaustively, off the top of my head I don’t think any of the standard class options are relevant.

wspr avatar Feb 18 '24 11:02 wspr

@wspr We talked about that on the team list :)

josephwright avatar Feb 18 '24 11:02 josephwright

Somewhere there was an issue about removing keyvals from the unused list: anyone remember where?

josephwright avatar Feb 18 '24 11:02 josephwright

I am thinking of adding code to fontspec to address this. Does a warning make sense?

Package fontspec Warning: The global option 'math=yuck' is not recognised. It w
ill be ignored.

I'm thinking this would cause more harm than help.

wspr avatar Apr 20 '24 12:04 wspr

(I thought we had word wrapping for expl3 messages...I guess I need to add it manually)

wspr avatar Apr 20 '24 12:04 wspr