如何正确定义NOx

如何正确定义NOx

我正在写一个包含大量 NOx 的文档。它出现在章节标题、常规文本和表格中,字体包括无衬线、罗马字体、粗体和中等。因此我定义了一个命令:

\newcommand \nox {NO\textsubscript{x}\xspace}

为了将其与 hyperref 一起使用,我将其重新定义为:

\newcommand \nox {\texorpdfstring{NO\textsubscript{x}}\xspace}

我现在遇到的问题是 \xspace 命令不再起作用,NOx 和下一个单词之间的所有空格都消失了。我可以通过添加 ~ 符号手动包含空格,但这会导致空格出现在任何地方,这也是不想要的。我应该如何重新定义 \nox 以实现正确的间距并与 hyperref 一起工作。

答案1

\texorpdfstring需要两个参数:第一个参数是 TeX 排版的内容,第二个参数是传递给hyperref书签等的内容。因此你应该这样做

\newcommand\nox{\texorpdfstring{NO\textsubscript{x}}{NOx}\xspace}

例子:

\documentclass{article}
\usepackage{xspace}
\usepackage{hyperref}

\makeatletter
\DeclareRobustCommand{\textsubscript}[1]{\@textsubscript{\selectfont#1}}
\newcommand{\@textsubscript}[1]{%
  {\m@th\ensuremath{_{\mbox{\fontsize\sf@size\z@#1}}}}%
}
\makeatother
\newcommand\nox{\texorpdfstring{NO\textsubscript{x}}{NOx}\xspace}

\begin{document}
\section{Here's \nox and something else}

\nox is very dangerous.
\end{document}

enter image description here

或者你可以这样做

\newcommand\nox{NO\textsubscript{x}\xspace}
\pdfstringdefDisableCommands{%
  \def\nox{NOx\xspace}%
}

因此定义一个适合的替代品来满足hyperref需求。

答案2

问题fixltx2\textsubstring得到纠正。因此,请尝试以下 MWE:

\documentclass{report} 

\usepackage{xspace}
\usepackage{fixltx2e}% for \textsubscript
\usepackage{hyperref}

\newcommand{\nox}{\texorpdfstring{NO\textsubscript{x}}{NOx}}
\newcommand{\noxa}{\texorpdfstring{NO\textsubscript{x}}{NOx}\xspace}

\begin{document}

\nox Blafasel \noxa Blafasel 

\end{document}

该宏\texorpdfstring{first}{second}需要两个参数。第一个参数用于文档(例如,带有订阅),第二个参数用于表示不允许特殊内容(不带:NOx)。

答案3

只需使用化学工程化学公式和符号包,更多详细信息请参见此处关联

\documentclass{report} 
\usepackage[version=3]{mhchem}

 \begin{document}

    $\ce{NO_x}$

 \end{document}

相关内容