
Я пишу свою диссертацию по химии, и она включает в себя множество схем реакций.Как добавить отображаемую метку? Я хочу обозначить первое соединение как 1, и я хочу, чтобы это была метка Latex, чтобы я мог ссылаться на нее в тексте, а затем изменить метку, если это необходимо.
Вот MWE:
\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage{geometry}
\geometry{letterpaper, margin = 1in}
\DeclareFloatingEnvironment[fileext = los, listname = {List of Schemes}, name = Scheme]{scheme}
\begin{document}
\begin{scheme}[h!]
\centering
\includegraphics[scale = 0.7]{Carbdiazosyn}
\caption{Generation ...}
\label{carbdiazosyn}
\end{scheme}
\end{document}
решение1
Маршрут Chemfig/Chemnum
Возможно, не самый мудрый выбор для использования chemfig
, но просто показывает, что это возможно. Вы бы хотели использовать пакет chemnum
для маркировки молекул. Он предлагает (среди прочего) команды:
\cmpd{<main label>.<sublabel>} % <main label> produces the 1, <sublabel> produces the a, b etc.
\refcmpd{<main label>.<sublabel>} % Acts like \ref in normal circumstances
Вот код:
\documentclass[]{report}
\usepackage{chemfig,chemnum}
\usepackage[version=4]{mhchem}
\usepackage{geometry}
\geometry{letterpaper, margin = 1in}
\usepackage{newfloat}
\DeclareFloatingEnvironment[fileext = los, listname = {List of Schemes}, name = Scheme]{scheme}
\begin{document}
\begin{scheme}[ht]
\centering
%\schemedebug{true}
\schemestart[0,1.3]
\chemname{%
\chemfig{[:120]*3(-[@{a1}]N=[@{db}]N-[@{a2}])%
(-[:50,,,,red]\textcolor{red}{\ce{R1}})%
(-[@{r2}:-50,,,,red]\textcolor{red}{\ce{R2}})%
}
}{\cmpd{scheme.1}}
\arrow(.mid east--.mid west){->[$h\nu/\Delta$][$-$\ce{N2}]}
\chemname{%
\setlewis{0.8ex}{}{red}%
\chemfig[shift={(0,0.4)}]{[:-30]\textcolor{red}{\ce{R1}}%
-[,,,,red](\lewis{6:,})%
-[::60,,,,red]\textcolor{red}{\ce{R2}}}%
}{\cmpd[pre-label-code{scheme.2}}
\schemestop
\chemmove{%
\draw[shorten <=2pt, shorten >=3pt]%
(a1)..controls +(250:3mm) and +(340:3mm)..(db);
\draw[shorten <=2pt, shorten >=2pt]%
(a2)..controls +(320:3mm) and +(210:2mm)..(r2);
}
\caption[]{My scheme}\label{scheme1}
\end{scheme}
The arrows in \refcmpd{scheme.1} refer to electron movement! The compound in \refcmpd{scheme.2} is in red! Both \refcmpd{scheme.1, scheme.2} are in scheme \ref{scheme1}.
\end{document}
Обратите внимание: я использовал команды из chemnum
команды \chemname
для вставки «меток». Я также использовал mhchem
пакет для набора составных имен внутри chemfig
. Остальное — просто chemfig
код. :-)
.
Маршрут Auto-pst-pdf/Chemnum (вероятно, рекомендуется)
Пакет chemnum
также документирует способ замены тегов рисунка .eps
в Разделе 9, стр. 18документацияСогласно руководству, рабочий процесс для этого следующий (цитирую дословно):
- Создайте схему и разместите временные теги, например
TMP1
,TMP2
и т. д., там, где вы хотите разместить составные метки.- Экспортируйте схему как рисунок
eps
илиps
диаграмму, убедившись, что теги встроены в виде текстовых строк.- Включите
eps
with\includegraphics
. Прямо перед этим используйте\replacecmpd
один раз для каждого временного тега.
Я лично не пробовал этого (так как не использую chemdraw
), поэтому просто отошлю вас к документации. (Возможно, нужен другой ответ, должным образом документирующий этот метод). В любом случае, как следует из документации, я думаю, что это путь, по которому стоит идти, если вы хотите продолжать использовать chemdraw
.
Вот пример кода из документации:
% code for figure 2
\documentclass{standalone}
\usepackage{graphicx,auto-pst-pdf,chemnum}
\begin{document}
\replacecmpd{Alc}% replaces TMP1
\replacecmpd{EtherBr}% replaces TMP2
\includegraphics{scheme-tmp.ps} % Contains TMP1 and TMP2 as embedded text strings
\end{document}
решение2
Мне пришлось подстроить ширину, чтобы субтитры поместились.
\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage{geometry}
\geometry{letterpaper, margin = 1in}
\usepackage{newfloat}
\DeclareFloatingEnvironment[fileext = los, listname = {List of Schemes}, name = Scheme]{scheme}
\usepackage{graphicx}
\usepackage{subcaption}
\DeclareCaptionSubType{scheme}
\captionsetup[subscheme]{font+=footnotesize}
\begin{document}
\begin{scheme}[htp]% h! is interpreted as "I am an idiot so replace this with something reasonable"
\centering
\sbox0{\includegraphics[scale = 0.7]{images/Carbdiazosyn}}% measure width
\usebox0\par
\makebox[1.1\wd0]{\parbox{0.45\wd0}{\subcaption{Compound 1}\label{compound1}}\hfill
\parbox{0.45\wd0}{\subcaption{Compound 2}\label{compound2}}}
\caption{Generation ...}
\label{carbdiazosyn}
\end{scheme}
\centering Of course, the reference will only return \ref{compound1}.
\end{document}
Так как подписи предназначены для размещения в определенном пространстве, а в данном случае мы хотим, чтобы они умещались на одной строке, то прощенетиспользуйте пакет субтитров.
Возможны несколько вариантов форматирования. В этом случае я разместил подпись слева, но оставил изображение по центру.
\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage{geometry}
\geometry{letterpaper, margin = 1in}
\usepackage{newfloat}
\DeclareFloatingEnvironment[fileext = los, listname = {List of Schemes}, name = Scheme]{scheme}
\usepackage{graphicx}
\newcounter{compound}
\newcommand{\compound}[1]% #1 = label
{\refstepcounter{compound}\label{#1}Compound \thecompound}
\begin{document}
\begin{scheme}[htp]
\centering
\leavevmode\llap{\compound{test}:\qquad}%
\raisebox{-0.5\height}{\includegraphics[scale = 0.7]{images/Carbdiazosyn}}% center
\caption{Generation ...}
\label{carbdiazosyn}
\end{scheme}
\centering This references the compound index, \ref{test}.
\end{document}