如何在更改后的 \replaced 中使用来自 siunitx 的 \SI?

如何在更改后的 \replaced 中使用来自 siunitx 的 \SI?

我正在尝试使用 changes 包记录一些更改 - 我已经完成了很多文本,并且不得不解决显示数学问题,但我有一个使用 siunitx 排版的简单值,更改该值似乎不起作用:

\documentclass{article}
\usepackage{siunitx}
\usepackage{changes}
\begin{document}
    \replaced{\SI{1}{\volt}}{\SI{2}{\volt}}
\end{document}

给出:

! Extra }, or forgotten \endgroup.
\UL@stop ...z@ \else \UL@putbox \fi \else \egroup 
                                                  \egroup \UL@putbox \fi \if...
l.5 ...\SI{1}{\volt}}{\SI{2}{\volt}}

如果我继续编译(再次出现相同的错误,2missing } inserted秒后,输出实际上完全符合预期:

上述代码的输出令人惊讶地正确

\protect在之前添加会\SI产生完全相同的错误,当然尝试\SI{\replaced{1}{2}}{\volt}永远不会起作用:

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
! siunitx error: "invalid-token-in-number"
! 
! Invalid token '\let ' in numerical input.
! 
! See the siunitx documentation for further information.
! 
! For immediate help type H <return>.
!...............................................  

是否有一些解决方法可以让它无错误地运行?如果出现“真正”的错误,我真的不想在非停止模式下运行,此外,我使用了旨在在出现错误时停止的构建脚本。

答案1

这里的问题实际上是与包\sout中的命令的交互。本质上,在数字和单位之间ulem插入 存在冲突:改变了 this 的工作方式,并且与 中的框/分组不一致。我没有将其全部追溯到低级代码的最小示例,但这可能在任何情况下都无济于事(至少在没有相当多的努力的情况下)。您可以做的只是禁用惩罚的插入。没有为此提供的接口( 的选项中没有的少数几件事之一!)所以目前需要进行低级重新定义\penaltyulemsiunitxsiunitx

\documentclass{article}
\usepackage{siunitx}
\usepackage{changes}
\ExplSyntaxOn
\cs_set_eq:NN \__siunitx_unit_output_number_sep:
  \__siunitx_unit_output_number_sep_aux:
\ExplSyntaxOff
\begin{document}
    \replaced{\SI{1}{\volt}}{\SI{2}{\volt}}
\end{document}

答案2

一个简单的解决方法是替换\SI{x}{y}\num{x}\,\si{y}这在大多数情况下应该会产生相同的结果并且不会产生错误:

\documentclass{article}
\usepackage{siunitx}
\usepackage{changes}
\begin{document}
    \replaced{\SI{1}{\volt}}{\num{2}\,\si{\volt}}
\end{document}

答案3

您可以根据 ulem 包定义自己的删除标记,例如:

\usepackage{changes}
\setdeletedmarkup{---#1---}

这种方法的缺点是删除的标记与被删除的预期不符。

参见示例https://gitlab.com/ekleinod/changes/tree/master/testfiles/t61-siunitx

因为我无法回答重复的问题变化和 siunitx 之间是否存在未记录的不兼容性?这是相应问题跟踪器的链接与 siunitx 以及其他软件包不兼容

免责声明:我是该软件包的作者。

答案4

\SI\mbox:内换行
\mbox{\SI{}}
请注意,单词会沿着行延续(不会中断)。

相关内容