我正在使用chemnum
Clemens Niederberger 软件包来标记我的化合物。现在我有大量的化合物,有时在文档中看到标签而不查找相应的代码行会很有帮助(当然仅限于准备手稿期间)。该软件包附带一个类似的功能showkeys
,但当然只适用于“真实”标签。
我创建了一个示例图像来阐明我所说的内容。是否可以\cmpd
使用打印标签选项重新定义?
编辑:
我现在知道了show-keys
包的选项,但是在环境chemnum
内部使用时会失败。没有帮助,因为当化合物第一次出现时它没有显示标签。tikz
\setchemnum{show-keys=ref}
到目前为止,我的解决方法是重新定义cmpd
为像 一样运行\cmpdshowref{compound}\cmpd{compound}
。如果有更聪明的方法来做到这一点,我很乐意阅读。
编辑 2(现在添加了 MWE):
•show-keys
当化合物首次出现在tikz
环境内部时,该选项会出现错误。
• 显然,show-keys
当标签包含下划线(例如compound_2
)时,该选项会出现错误。
\documentclass{article}
\usepackage{chemnum,tikz}
\setchemnum{show-keys}
\begin{document}
Lorem ipsum \cmpd{foobar} dolor.
Lorem ipsum \cmpd{foobar} dolor.
\tikz \node[fill=yellow] at (0,0) {Lorem ipsum \cmpd{foobar} dolor.};
\tikz \node[fill=yellow] at (0,0) {Lorem ipsum \cmpd{foobar2} dolor.}; % <- fails
Lorem ipsum \cmpd{foobar_2} dolor. % <- fails
\end{document}
答案1
回答原始问题:
chemnum
有内置功能,请参阅第 12 节调试信息手册内容:
\documentclass{article}
\usepackage{chemnum}
\setchemnum{show-keys}% <<< this is what you're looking for
\begin{document}
Lorem ipsum \cmpd{foobar} dolor
Lorem ipsum \cmpd{foobar} dolor
\end{document}
新定义标签的键将打印到边缘,而引用现有标签的调用将以内联方式打印。
已编辑问题的答案:
您提到的两个“失败”案例有不同的原因:
\tikz \node[fill=yellow] at (0,0) {Lorem ipsum \cmpd{foobar2} dolor.};
这会导致错误,因为的默认定义
\cmpdshowdef
使用\marginpar
。由于这与浮点数非常相似,因此您不能在框(tikz 节点)内使用它。解决方案是使用包\marginnote
中的命令重新定义它\marginnote
。所需的重新定义显示在chemnum
手册第 25 页的第 12 节中:\usepackage{marginnote} \renewcommand*\cmpdshowdef[1]{% \marginnote{\fbox{\normalfont\ttfamily#1}}% } \renewcommand*\subcmpdshowdef[2]{% \marginnote{\fbox{\normalfont\ttfamily#2 (#1)}}% }
-
Lorem ipsum \cmpd{foobar_2} dolor.
由于与您不能在普通文本中使用下划线字符相同的原因,此操作会失败,
_
并给出预期错误:Missing $ inserted.
。尝试打印标签文本时会发生这种情况。\detokenize
可以在这里提供帮助:\renewcommand*\cmpdshowdef[1]{% \marginnote{\fbox{\normalfont\ttfamily\detokenize{#1}}}% } \renewcommand*\subcmpdshowdef[2]{% \marginnote{\fbox{\normalfont\ttfamily\detokenize{#2 (#1)}}}% }
完整示例:
\documentclass{article}
\usepackage{chemnum,tikz}
\setchemnum{show-keys}
\usepackage{marginnote}
\renewcommand*\cmpdshowdef[1]{%
\marginnote{\fbox{\normalfont\ttfamily\detokenize{#1}}}%
}
\renewcommand*\subcmpdshowdef[2]{%
\marginnote{\fbox{\normalfont\ttfamily\detokenize{#2 (#1)}}}%
}
\begin{document}
Lorem ipsum \cmpd{foobar} dolor.
\bigskip
Lorem ipsum \cmpd{foobar} dolor.
\bigskip
\tikz \node[fill=yellow] at (0,0) {Lorem ipsum \cmpd{foobar} dolor.};
\bigskip
\tikz \node[fill=yellow] at (0,0) {Lorem ipsum \cmpd{foobar2} dolor.}; % <- fails
\bigskip
Lorem ipsum \cmpd{foobar_2} dolor. % <- fails
\end{document}