如何在 expl3 中通过字符串变量从罗马数字获取整数?

如何在 expl3 中通过字符串变量从罗马数字获取整数?

为什么当我尝试使用\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}

相关内容