我正在写一份化学报告,我需要插入一些图表。作为系列标签,我希望有化合物编号(由 chemstyle 分配)+一些其他文本。我使用 ggplot2 生成图表并保存为 .eps。如果标签只是空格符(例如“TMP”),则使用 chemstyle 替换可以正常工作。但是,如果标签是“TMP + 化合物 A”,则替换不再有效。我还尝试在 incscape 中将额外文本添加到 eps 文件中,但当我在 inkscape 中打开并保存它时,替换也不再有效。
以下是一个例子:
\documentclass[11pt, titlepage]{article}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage[runs=2]{auto-pst-pdf}
\usepackage{bpchem}
\usepackage[journal=rsc, tracking=bpchem]{chemstyle}
%%% compound labels declared when scheme is put in %%%
\usepackage{letltxmacro}
\LetLtxMacro\oldschemeref\schemeref
\DeclareRobustCommand{\schemeref}[2][]{
\CNlabelnoref{#2}
\oldschemeref[#1]{#2}
}
\begin{document}
\begin{scheme}
\begin{center}
\schemeref[TMP1]{1}
\schemeref[TMP2]{2}
\includegraphics[width=1\textwidth]{Chemdraw_Report/triazole_CD}
\caption{\small{CD spectrum of \CNref{1} and \CNref{2}.}}
\label{fig:triazole_CD}
\end{center}
\end{scheme}
\end{document}
可以找到可以使用的 eps 文件,但没有所需的附加文本这里。在 Inkscape 中添加文本后的示例,但文本替换不再起作用这里。
我该如何解决这个问题?有没有更好的解决方案,而不需要我手动添加复合标签?
答案1
这chemstyle 包使用psfrag 包替换eps
图形中的标签。根据psfrag
软件包文档第 8.1 节:
在图中添加一段文本(标签)以供 PSfrag 替换时,请使用一个单词,其中仅包含不带重音符号的字母和数字。
这就是 PSfrag 的预期使用方式;这样做几乎可以保证 PSfrag 能够按照宣传的那样工作。
有时,你可以使用包含空格的标签,但请注意
提供给 \psfrag 命令的标签必须与 EPS 文件的 *show 命令中出现的标签完全一致,并且不带周围的括号。
这可能是导致您遇到第一个问题的原因。
文件的第二个版本不包含文本(尝试使用您最喜欢的文本编辑器打开它并搜索“TMP”以了解我的意思)。看来 Inkscape 已经“绘制”了标签,每个字符都由直线和曲线的组合构成。因此,没有show
用于拦截的指令psfrag
。
编辑
解决问题的一种方法是使用\psfrag*
,它将额外的材料附加到替换项中。再次引用手册中的内容:
如果 {tag} 的替换项已存在,则 unstarred 命令
\psfrag
将在没有警告的情况下替换它。但是,带星号的版本\psfrag*
会将新替换项添加到列表中。使用带星号的命令,单个 PostScript 文本可能会触发多个替换。我想不出大多数用户会使用带星号的版本的原因......
您将需要尝试调整间距(并调整彩色背景区域的大小),但这样的方法应该可以起作用。
\documentclass[11pt, titlepage]{article}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage[runs=2]{auto-pst-pdf}
\usepackage{bpchem}
\usepackage[journal=rsc, tracking=bpchem]{chemstyle}
%%% compound labels declared when scheme is put in %%%
\usepackage{letltxmacro}
\LetLtxMacro\oldschemeref\schemeref
\DeclareRobustCommand{\schemeref}[2][]{
\CNlabelnoref{#2}
\oldschemeref[#1]{#2}
}
\begin{document}
\begin{scheme}
\begin{center}
\schemeref[TMP1]{1}
\schemeref[TMP2]{2}
\psfrag*{TMP1}[l][l]{\qquad MORE TEXT!!!} % <--- New
\includegraphics[width=1\textwidth]{triazole_CD}
\caption{\small{CD spectrum of \CNref{1} and \CNref{2}.}}
\label{fig:triazole_CD}
\end{center}
\end{scheme}
\end{document}
无可否认,直到现在我才知道\psfrag*
;如果我可以再次赞同你的问题,我会这样做。