在 chemmacros 中更新拉丁短语不起作用

在 chemmacros 中更新拉丁短语不起作用

我正在尝试从包中重新定义拉丁短语chemmacros。当我尝试使用时\RenewChemLatin{\insitu}{in-situ},日志会打印

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
! chemmacros error: "renew-Latin"
! 
! You've tried to renew the Latin \insitu , but it doesn't exist.
! 
! See the chemmacros documentation for further information.
! 
! Type <return> to continue.
!...............................................  

当我尝试时\ProvideChemLatin{\insitu}{in-situ}它告诉我:

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
! chemmacros error: "new-Latin"
! 
! You've tried to define a Latin with \NewChemLatin, but the command sequence
! \insitu  already exists. Please choose another name.
! 
! See the chemmacros documentation for further information.
! 
! Type <return> to continue.
!...............................................

\NewDocumentCommand{\insitu}{}{\emph{in-situ}}有趣的是,当我分别使用或时,我会遇到相同的错误\RenewDocumentCommand{\insitu}{}{\emph{in-situ}}

我的 MWE:

\documentclass{article}
\usepackage{chemmacros}
\RenewChemLatin{\insitu}{in-situ}
%\ProvideChemLatin{\insitu}{in-situ}
\begin{document}
    \insitu
\end{document}

那么我遗漏了什么?

答案1

chemmacros只有问题

\NewChemLatin \insitu   { in~situ }

钩住\AtBeginDocument(见chemmacros.module.命名法.代码.tex,第 818-835 行)。这意味着在加载\insitu时未定义chemmacros,它仅在文档开始时定义。

所以当你说

\documentclass{article}
\usepackage{chemmacros}
\RenewChemLatin\insitu{in-situ}
\begin{document}
  \insitu
\end{document}

你会得到一个错误,提示你正在重新定义一些未定义的东西。而当你\ProvideChemLatin{\insitu}{in-situ}使用你的chemmacros定义没有问题,但是in发出的定义\AtBeginDocument会引发错误,因为命令已经定义。

因此,如果您想重新定义,也\insitu可以使用\AtBeginDocument。如果您稍后调用该钩子,它将在钩子之后执行chemmacros

\documentclass{article}
\usepackage{chemmacros}
\AtBeginDocument{\RenewChemLatin\insitu{in-situ}}
\begin{document}
  \insitu
\end{document}

给出

原位

相关内容