如何使用 \xspace 和 chemmacros 拉丁短语

如何使用 \xspace 和 chemmacros 拉丁短语

我想在包\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}

enter image description here

  1. 不要使用\xspace。原因如下:xspace 的缺点
  2. 不要使用minimal。原因如下:为什么要避免使用最小类?

答案2

我能够解决必须逐个重新定义每个拉丁短语或必须使用辅助命令(如 egregs 答案中所示)的问题。

因为

  1. \NewChemLatin{constant}{phrase}命令实际上只是创建一个常量,其值被包装在为模块选项phrase定义的任何内容中(标准是)nomenclatureformat\emph

  1. 所有预定义的拉丁语短语(\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}

相关内容