为什么当我尝试使用\int_from_roman:n {\l_roman_str}
包含\l_roman_str
字符串(罗马数字)时,它不起作用?对我来说,这根本不明显。
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\str_new:N \l_roman_str
\NewDocumentCommand{\RomanToInt}{ m }
{
\str_set:Nn \l_roman_str {#1}
\int_from_roman:n {\l_roman_str} % this one does not work
%\int_from_roman:n {#1} % this one well done
}
\ExplSyntaxOff
\begin{document}
\RomanToInt{mmc}
\end{document}
答案1
\int_from_roman:n
不将输入转换\l_roman_str
为其扩展,而是用作l_roman_str
文字值,这是该宏的输入,是“无意义的”,导致-1
输出。
但是,\int_from_roman:V
确实使用 的内容\l_roman_str
,前提是 给出相应的变体\cs_generate_variant:Nn
。
现在,可能存在\int_from_roman:n{#1}
不直接使用的原因,但目前尚不清楚,因此,当数字的字符串表示形式首先存储在变量中时,定义变量是解决此问题的一种可能性\str
......
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\ior_new:N \g_file_ior
\str_new:N \l_roman_str
\cs_generate_variant:Nn \int_from_roman:n {V}
\NewDocumentCommand{\CharCount}{ m }
{
\str_set:Nn \l_roman_str {#1}
\int_from_roman:V \l_roman_str
%\int_from_roman:n {#1} % this one well done
}
\ExplSyntaxOff
\begin{document}
\CharCount{mmc}
\end{document}