我不知道如何搜索此问题,因为在问题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。\ProcessKeyOptions
l3keys2e
\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}