如何将 LaTeX3 包键字体大小值转换为命令?

如何将 LaTeX3 包键字体大小值转换为命令?

我不知道如何搜索此问题,因为在问题backwards slash\没有找到任何有用的信息。如何设置键值,然后使用字体大小值,而无需使用包选项中的命令,例如

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

代替

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

我希望我正在编写的包不必在包选项中放置反斜杠,尽管这始终是一种备份。例如,我的 MWE 生成了以下内容:

在此处输入图片描述

使用此命令:

\NewDocumentCommand { \aasp } { m m }
  {
    \residueString:nn { #1 } { \l_aminosymb_residue_style_tl }
    \textsuperscript{$\l_superscript_font_size_tl\mkern-1mu#2\mkern-1.5mu$}
  }

我不知道是否有一个 LaTeX3 命令可以将标记转换为命令,有人知道如何做到这一点吗?MWE:

\begin{filecontents}[overwrite]{aminosymb.sty}
\RequirePackage{l3keys2e}
\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,
  }

\ProcessKeysOptions { AminoSymb / Package }

\prop_new:N \l_abbrev_ala_prop
\prop_new:N \l_abbrev_all_prop

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

\prop_set_from_keyval:Nn \l_abbrev_all_prop
  {
    ala = \l_abbrev_ala_prop,
  }

\cs_new:Npn \residueString:nn #1#2
  {
    \tl_set:Nx\l_residue{#1}
    \tl_set:Nx\l_style{#2}
    \prop_map_function:NN \l_abbrev_all_prop \__abbrev_aux:nn
  }

\cs_generate_variant:Nn\prop_item:Nn{Ne}

\cs_new:Npn \__abbrev_aux:nn #1#2
     {
        \prop_map_inline:Nn #2
        {
          \tl_if_eq:NnT
          \l_residue
          {##2}
          {\prop_item:Ne#2{\l_style}}
        }
      }

\NewDocumentCommand { \aasp } { m m }
  {
    \residueString:nn { #1 } { \l_aminosymb_residue_style_tl }
    \textsuperscript{$\l_superscript_font_size_tl\mkern-1mu#2\mkern-1.5mu$}
  }

\ExplSyntaxOff
\end{filecontents}

\documentclass{article}

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

\begin{document}

\aasp{a}{323}

\end{document}

如果这是重复的,请原谅,由于命令的性质,我不知道如何搜索此问题\

答案1

您可以使用\cs_if_exist_use:c,如果您想在不可用时抛出错误,您也可以使用\cs_if_exist_use:cF

以下内容默认忽略未知命令。此外,我还修复了设置字体命令的方式(必须在数学上下文之外使用)。我还将其放在\exp_stop_f:您的后面\mkern,这样它们就不会影响#2

此外,我删除了对的硬依赖,因为您可以在最近的内核中l3keys2e使用内置功能,而只需要旧版本的 LaTeX。\ProcessKeyOptionsl3keys2e

\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_aminosymb_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_aminosymb_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_aminosymb_superscript_font_size_tl }
        $ \mkern-1mu\exp_stop_f: #2 \mkern-1.5mu\exp_stop_f: $
      }
  }

\ExplSyntaxOff
\end{filecontents}

\documentclass{article}

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

\begin{document}

\aasp{a}{323}

\end{document}

相关内容