我正在写一个包含大量 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}
或者你可以这样做
\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}