我正在尝试使用 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 的工作方式,并且与 中的框/分组不一致。我没有将其全部追溯到低级代码的最小示例,但这可能在任何情况下都无济于事(至少在没有相当多的努力的情况下)。您可以做的只是禁用惩罚的插入。没有为此提供的接口( 的选项中没有的少数几件事之一!)所以目前需要进行低级重新定义\penalty
ulem
siunitx
siunitx
\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{}}
。
请注意,单词会沿着行延续(不会中断)。