使用 chemstyle 添加化合物标签之前,先将文本添加到 .eps

使用 chemstyle 添加化合物标签之前,先将文本添加到 .eps

我正在写一份化学报告,我需要插入一些图表。作为系列标签,我希望有化合物编号(由 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}

chemstyle 图形

无可否认,直到现在我才知道\psfrag*;如果我可以再次赞同你的问题,我会这样做。

相关内容