我正在尝试从包中重新定义拉丁短语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}
给出
原位