我想要制作一个名为aminosymb
CTAN 的简单包,因为我有用于排版氨基酸和残基编号的宏(在残基名称上方有可选符号,如*
,从一个旧问题改进:氨基酸名称的自定义星号)。我想写入包,expl3
但到目前为止我的努力还不够。我有以下不起作用的 MWE:
\documentclass{article}
\ExplSyntaxOn
\NewDocumentCommand{\AminoAcidPrinter}{mm}
{
\aminoacid_printer:n { #1 #2 }
}
\str_new:N \s__aminoacid_printer_str
\cs_new_protected:Nn \aminoacid_printer:n
{
\str_clear:N \s__aminoacid_printer_str
\tl_map_function:nN { #1 } \__aminoacid_printer_str_add:n
\str_use:Nn \s__aminoacid_printer_str
}
\cs_new_protected:Nn \__aminoacid_printer_str_add:n
{
\str_put_right:Nx \s__aminoacid_printer_str
{
\str_case:nn { #1 }
{
{HIS}{His}
{His}{His}
{H}{His}
{h}{His}
}
}
}
\ExplSyntaxOff
\begin{document}
\noindent\AminoAcidPrinter{h}{442}\newline
\AminoAcidPrinter{HIS}{442}\newline
\AminoAcidPrinter{His}{442}\newline
\AminoAcidPrinter{H}{442}\newline
\end{document}
所有四个选项都应打印出相同的输出,即His 442
。代码本身不起作用,第一个错误是
Undefined control sequence.
\aminoacid_printer:n ...ter_str_add:n \str_use:Nn
\s__aminoacid_printer_str
虽然这些信息很有帮助,但我不确定如何继续,也不确定如何管理 中的第二个参数\NewDocumentCommand
。我甚至不确定我是否应该使用字符串,或者这是否是标记/其他数据类型。请问我如何才能让此文档针对所有四个不同的输入\s__
进行编译和打印?His 442
我是新手expl3
,并且已经阅读过LaTeX3 接口但这是一个陡峭的学习曲线,我不会介意一个可以工作的基本的文档,我可以在此基础上构建我的宏,expl3
加上关于这个 MWE 的有用提示。
答案1
完全不清楚你想让这段代码做什么,但是它运行时没有错误,
\documentclass{article}
\ExplSyntaxOn
\NewDocumentCommand{\AminoAcidPrinter}{mm}
{
\aminoacid_printer:nn { #1 }{ #2 }
}
\str_new:N \l__aminoacid_printer_str
\cs_new_protected:Nn \aminoacid_printer:nn
{
\str_clear:N \l__aminoacid_printer_str
\tl_map_function:nN { #1 } \__aminoacid_printer_str_add:n
\str_use:N \l__aminoacid_printer_str
???
\str_clear:N \l__aminoacid_printer_str
\tl_map_function:nN { #2 } \__aminoacid_printer_str_add:n
\str_use:N \l__aminoacid_printer_str
}
\cs_new_protected:Nn \__aminoacid_printer_str_add:n
{
\str_put_right:Nx \l__aminoacid_printer_str
{
\str_case:nn { #1 }
{
{HIS}{His}
{His}{His}
{H}{His}
{h}{His}
}
}
}
\ExplSyntaxOff
\begin{document}
\noindent\AminoAcidPrinter{h}{442}\newline
\AminoAcidPrinter{HIS}{442}\newline
\AminoAcidPrinter{His}{442}\newline
\AminoAcidPrinter{H}{442}
\end{document}