我想在包\xspace
中添加拉丁短语,chemmacros
因为我不想在没有参数的命令末尾使用\
或。 但是,当我尝试定义一个新的拉丁短语(如)时,它会被忽略。 此外,我想避免必须更新所有已定义的拉丁短语或添加新的辅助命令(如或类似的东西)。{}
\NewChemLatin{\testtest}{testtest\xspace}
\xspace
\newcommand{\xinsitu}{\insitu\xspace}
梅威瑟:
\documentclass{article}
\usepackage{chemmacros,xspace}
\NewChemLatin{\test}{test\xspace}
\newcommand{\xtest}{\test\xspace}
\begin{document}
This is a \test within a sentence.
And this is an end-of-sentence \test.
Now, this is an x-\xtest within a sentence.
And this is an end-of-sentence x-\xtest.
\end{document}
那么,如何才能实现这一点呢?
答案1
当你执行\NewChemLatin{\test}{test\xspace}
并调用时\test
,结果本质上是,
\emph{test\xspace}
所以\xspace
实际上看到}
并没有添加空间。
你可能做
\NewChemLatin{\innertest}{test}
\newcommand{\test}{\innertest\xspace}
完整示例:
\documentclass{article}
\usepackage{chemmacros,xspace}
\NewChemLatin{\innertest}{test}
\newcommand{\test}{\innertest\xspace}
\begin{document}
This is a \test within a sentence.
And this is an end-of-sentence \test.
\end{document}
- 不要使用
\xspace
。原因如下:xspace 的缺点 - 不要使用
minimal
。原因如下:为什么要避免使用最小类?
答案2
我能够解决必须逐个重新定义每个拉丁短语或必须使用辅助命令(如 egregs 答案中所示)的问题。
因为
- 该
\NewChemLatin{constant}{phrase}
命令实际上只是创建一个常量,其值被包装在为模块选项phrase
定义的任何内容中(标准是)nomenclature
format
\emph
和
- 所有预定义的拉丁语短语(
\insitu
、\invacuo
和\abinitio
)后来都只在钩子中定义\AtBeginDocument
(参见在 chemmacros 中更新拉丁短语不起作用)
\NewChemLatin
可以通过简单地覆盖命令来\RenewDocumentCommand
满足您的需求。这样您就可以添加\xspace
或添加任何您需要的内容。我能想到的唯一缺点(如果有的话)是,您将无法使用模块format
的选项nomenclature
。
\documentclass{article}
\usepackage{chemmacros}
\usepackage{xspace}
%to overwrite the \NewChemLatin command which is used for all Latin phrases
\RenewDocumentCommand{\NewChemLatin}{mm}{
\newcommand*{#1}{\emph{#2}\xspace}
}
%new constants will be formatted the same ways a s the standard ones
\NewChemLatin{\test}{test}
\begin{document}
Mid sentence \insitu and at the end: \insitu. \\
Mid sentence \invacuo and at the end: \invacuo. \\
Mid sentence \abinitio and at the end: \abinitio. \\
Mid sentence \test and at the end: \test. \\
\end{document}