我之前问过一个问题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
)。