我想简单地用逗号替换 fpeval 结果中的点。非常简单,没有附加功能,因此 siunitx 和 numprint 等无法工作,因为它们正在修改和添加太多内容。以下代码应该可以正常工作而不会出现警告:
\documentclass{scrreprt}
\usepackage[ngerman]{babel}
\usepackage{pgf}
\usepackage{xfp}
\usepackage{hyperref}
\begin{document}
\pgfmathsetmacro{\x}{1.2}
\pgfmathsetmacro{\y}{3.4}
\begin{Form}
% \TextField[value=\replaceDotWithComma{\fpeval{\x+\y}}]{\replaceDotWithComma{\fpeval{\x+\y}}}
\TextField[value=\fpeval{\x+\y}]{\fpeval{\x+\y}}
\end{Form}
\end{document}
答案1
\documentclass{article}
\ExplSyntaxOn
\cs_new:Npn \mich_convert_tocomma:n #1
{
\exp_args:Ne \tl_to_str:n
{ \str_map_function:nN {#1} \__mich_convert_tocomma:n }
}
\cs_new:Npn \__mich_convert_tocomma:n #1
{
\int_compare:nNnTF { `#1 } = { `. }
{ , }
{ #1 }
}
\cs_generate_variant:Nn \mich_convert_tocomma:n {e}
\cs_set_eq:NN \tocomma \mich_convert_tocomma:e
\ExplSyntaxOff
\usepackage{pgf}
\usepackage{xfp}
\usepackage{hyperref}
\begin{document}
\pgfmathsetmacro{\x}{1.2}
\pgfmathsetmacro{\y}{3.4}
\begin{Form}
% \TextField[value=\replaceDotWithComma{\fpeval{\x+\y}}]{\replaceDotWithComma{\fpeval{\x+\y}}}
\TextField[value=\tocomma{\fpeval{\x+\y}}]{\tocomma{\fpeval{\x+\y}}}
\end{Form}
\end{document}
答案2
您可以覆盖内部打印功能,但这肯定会带来其他问题。特别是,这不是面向未来的,因为任何以双下划线 ( __
) 开头的名称都可能随时更改或消失,恕不另行通知。
\documentclass{article}
\usepackage{xfp}
\ExplSyntaxOn
\cs_set:Npn \__fp_to_decimal_large:Nnnw #1#2#3#4;
{
\exp_after:wN \__fp_trim_zeros:w \int_value:w
\if_int_compare:w #2 > 0 \exp_stop_f:
#2
\fi:
\exp_stop_f:
#3{,}#4 ;
}
\ExplSyntaxOff
\begin{document}
\fpeval{1.2 + 3.4}
\end{document}