LaTeX3 包选项 .initial:N 未被遵守并在命令中使用

LaTeX3 包选项 .initial:N 未被遵守并在命令中使用

我之前问过一个问题Skillmon 有帮助地回答.initial:N但在依赖包选项的值时遇到了问题,例如

\usepackage[superscript-fontsize=large]{aminosymb}

编译而

\usepackage{aminosymb}

没有,并且失败了

! Missing $ inserted.
<inserted text> 
                $
l.9 \noindent\aasp{h}{22}

是什么导致了这个问题,我以为设置.initial包选项的值会被尊重,请问我哪里错了?

\begin{filecontents}[overwrite]{aminosymb.sty}
\ProvidesExplPackage
  {aminosymb}
  {today}
  {version}
  {Typesetting amino acid residues with notation and numbers}

\ExplSyntaxOn

\tl_new:N \l_aminosymb_residue_style_tl
\tl_new:N \l_superscript_font_size_tl

\keys_define:nn { AminoSymb / Package }
  {
    style .tl_set:N  = \l_aminosymb_residue_style_tl,
    style .initial:n = abbrev-firstcap,
    superscript-fontsize .tl_set:N = \l_superscript_font_size_tl,
    superscript-fontsize .initial:n = scriptstyle,
  }

\cs_if_exist:NTF \ProcessKeyOptions
  {
    \ProcessKeyOptions [ AminoSymb / Package ]
  }
  {
    \RequirePackage{l3keys2e}
    \ProcessKeysOptions { AminoSymb / Package }
  }

\prop_new:N \l_aminosymb_abbrev_ala_prop
\prop_new:N \l_aminosymb_abbrev_all_prop

\prop_set_from_keyval:Nn \l_aminosymb_abbrev_ala_prop
  {
    initial-lower=a,
    abbrev-firstcap = Ala,
  }

\prop_set_from_keyval:Nn \l_aminosymb_abbrev_all_prop
  {
    ala = \l_aminosymb_abbrev_ala_prop,
  }

\cs_new:Npn \aminosymb_residueString:nn #1#2
  {
    \tl_set:Nx\l_aminosymb_residue_tl{#1}
    \tl_set:Nx\l_aminosymb_style_tl{#2}
    \prop_map_function:NN \l_aminosymb_abbrev_all_prop \__aminosymb_abbrev_aux:nn
  }

\cs_generate_variant:Nn\prop_item:Nn{Ne}

\cs_new:Npn \__aminosymb_abbrev_aux:nn #1#2
     {
        \prop_map_inline:Nn #2
        {
          \tl_if_eq:NnT
          \l_aminosymb_residue_tl
          {##2}
          {\prop_item:Ne#2{\l_aminosymb_style_tl}}
        }
      }

\NewDocumentCommand { \aasp } { m m }
  {
    \aminosymb_residueString:nn { #1 } { \l_aminosymb_residue_style_tl }
    \textsuperscript
      {
        \cs_if_exist_use:c { \l_superscript_font_size_tl }
        $ \mkern-1mu\exp_stop_f: #2 \mkern-1.5mu\exp_stop_f: $
      }
  }

\ExplSyntaxOff
\end{filecontents}

\documentclass{article}

\usepackage{aminosymb} % <--- doesn't work
%\usepackage[superscript-fontsize=large]{aminosymb} % <--- works

\begin{document}

\aasp{a}{323}

\end{document}

.sty注意:我对主文件(等)中的命名约定进行了更多更改\l_aminosymb_superscriptfontsize_tl并进行了进一步的编辑,但上面的代码是链接问题中回答的代码,我认为对于该答案的评论来说可能太过实质性,也许可以通过成为自己的问题来帮助其他人(希望如此!)。

答案1

这里有一个问题,因为您的最后一个例子(旧问题中的意思)没有使用数学样式命令,而是使用字体大小命令。

后者只会影响你的数学材料外部内联数学。然而,前者必须被使用里面你的内联数学。

因此,如果您只想使用\displaystyle,,,或者\textstyle您必须在开头后移动(请注意,我更改了变量名称,您在此 MWE 中的变量名称缺少模块名称——我在之前的回答中也遗漏了这一点)。\scriptstyle\scriptscriptstyle\cs_if_exist_use:c { \l_aminosymb_superscript_font_size_tl }$

但是如果你想使用\large和朋友,你必须将它移到开口前面$

如果您想要同时拥有这两者,您要么需要付出额外的解析努力(在两种情况下进行分支),要么提供额外的密钥。

错误不在于.initial:n没有被遵守(你可以\tl_show:N \l_aminosymb_superscript_font_size_tl在你的块之后使用来看到它\keys_define:nn)。

相关内容