如何使用图形环境在 chemfig 中扩展方案

如何使用图形环境在 chemfig 中扩展方案

我正在尝试将生成的反应方案缩放到chemfig.9/textwidth以下是我的 MWE。

\documentclass{report}
\usepackage{chemfig}
\usepackage[version=3]{mhchem}
\begin{document}

\begin{figure}[width=.9\textwidth]
\schemestart
\ce{O2^.-}\arrow (c1--c2){0}\ce{NO^.}\merge{v}(c1)(c2)--(c3)\ce{ONOO-}
\arrow (--c4){<=>[*{0}\parbox{1.2cm}{\ce{+ H+}\\ pK 6.6}][*{0}\ce{- H+}]}[-90,1.5]\ce{ONOOH}
\arrow(--c5){->[\ce{+ NO^.}][\ce{- HNO2}]}[0,1.5]\ce{NO2^.}
\arrow(--c6){->[\ce{+ NO^.}]}\ce{N2O3}
\arrow(@c4--c7){->[\ce{+ O2^.-}][\ce{- OH-},\ce{- O2}]}[180,1.5]\ce{NO2^.}
\arrow(@c7--c8){->[\ce{+ O2^.-}]}[180]\parbox{1.5cm}{\centering \ce{O2NOO-}\\or \\\ce{NO2- + O2}}
\arrow(@c3--@c7){->[\ce{+ CO2}][\ce{- CO3^.}]}[2.12]
\arrow(@c3--@c5){->[\ce{+ CO2}][\ce{- CO3^.-}]}[2.12]
\arrow(@c1--c9){->[\ce{+ O2^.-}, \ce{+ 2H+}][\ce{- O2}]}[180,1.5]\ce{H2O2}
\arrow(@c9--c10){->[\ce{Fe2+}][\ce{- OH-}]}[180]\ce{^.OH}
\arrow(@c2--c11){->[\ce{+ O2}]}$[$\ce{^.ONOO}$]$
\arrow(@c11--c12){->[\ce{+ ^.NO}]}\ce{2 NO2^.}
\schemestop

\end{figure}
\end{document}

但是,这仍然会导致以下结果,并且似乎没有按比例缩放图形:

Overfull \hbox (71.11223pt too wide) in paragraph at lines 20--21.

任何关于如何改变这一点的想法和意见都将不胜感激。希望这些已经足够清楚了。

答案1

只需将其放入\scalebox也许中:

\documentclass{report}
\usepackage{chemfig}
\usepackage{graphicx}
\usepackage[version=3]{mhchem}
\begin{document}

\begin{figure}[width=.9\textwidth]
\scalebox{.6}{
\schemestart
\ce{O2^.-}\arrow (c1--c2){0}\ce{NO^.}\merge{v}(c1)(c2)--(c3)\ce{ONOO-}
\arrow (--c4){<=>[*{0}\parbox{1.2cm}{\ce{+ H+}\\ pK 6.6}][*{0}\ce{- H+}]}[-90,1.5]\ce{ONOOH}
\arrow(--c5){->[\ce{+ NO^.}][\ce{- HNO2}]}[0,1.5]\ce{NO2^.}
\arrow(--c6){->[\ce{+ NO^.}]}\ce{N2O3}
\arrow(@c4--c7){->[\ce{+ O2^.-}][\ce{- OH-},\ce{- O2}]}[180,1.5]\ce{NO2^.}
\arrow(@c7--c8){->[\ce{+ O2^.-}]}[180]\parbox{1.5cm}{\centering \ce{O2NOO-}\\or \\\ce{NO2- + O2}}
\arrow(@c3--@c7){->[\ce{+ CO2}][\ce{- CO3^.}]}[2.12]
\arrow(@c3--@c5){->[\ce{+ CO2}][\ce{- CO3^.-}]}[2.12]
\arrow(@c1--c9){->[\ce{+ O2^.-}, \ce{+ 2H+}][\ce{- O2}]}[180,1.5]\ce{H2O2}
\arrow(@c9--c10){->[\ce{Fe2+}][\ce{- OH-}]}[180]\ce{^.OH}
\arrow(@c2--c11){->[\ce{+ O2}]}$[$\ce{^.ONOO}$]$
\arrow(@c11--c12){->[\ce{+ ^.NO}]}\ce{2 NO2^.}
\schemestop
}

\end{figure}
\end{document}

但是,为了回答将图形宽度与文本宽度匹配的更具体问题,我们可以借用 Philipp 的回答如何找到长度命令(例如, \textwidth)与参考值(例如, 6cm)的比率?,并且可以间接地将框缩放到文本宽度,如下所示(请注意,我添加了一个 lipsum 段落来显示它是合适的宽度)。为此,我将图形保存在中\x。然后我找到的自然宽度\x,以便我可以制定合适的比例。然后我将\scalebox图像缩放到合适的比例:

\documentclass{report}
\usepackage{chemfig}
\usepackage[version=3]{mhchem}
\usepackage{lipsum}
\makeatletter
\newcommand*{\DivideLengths}[2]{%
    \strip@pt\dimexpr\number\numexpr\number\dimexpr#1%
     \relax*65536/\number\dimexpr#2\relax\relax sp\relax
}
\makeatother
\global\newlength\thewidth
\newcommand\findwidth[1]{\setbox0\hbox{#1}\setlength\thewidth{\wd0}}
\begin{document}
\def\x{
\schemestart
\ce{O2^.-}\arrow (c1--c2){0}\ce{NO^.}\merge{v}(c1)(c2)--(c3)\ce{ONOO-}
\arrow (--c4){<=>[*{0}\parbox{1.2cm}{\ce{+ H+}\\ pK 6.6}][*{0}\ce{- H+}]}[-90,1.5]\ce{ONOOH}
\arrow(--c5){->[\ce{+ NO^.}][\ce{- HNO2}]}[0,1.5]\ce{NO2^.}
\arrow(--c6){->[\ce{+ NO^.}]}\ce{N2O3}
\arrow(@c4--c7){->[\ce{+ O2^.-}][\ce{- OH-},\ce{- O2}]}[180,1.5]\ce{NO2^.}
\arrow(@c7--c8){->[\ce{+ O2^.-}]}[180]\parbox{1.5cm}{\centering \ce{O2NOO-}\\or \\\ce{NO2- + O2}}
\arrow(@c3--@c7){->[\ce{+ CO2}][\ce{- CO3^.}]}[2.12]
\arrow(@c3--@c5){->[\ce{+ CO2}][\ce{- CO3^.-}]}[2.12]
\arrow(@c1--c9){->[\ce{+ O2^.-}, \ce{+ 2H+}][\ce{- O2}]}[180,1.5]\ce{H2O2}
\arrow(@c9--c10){->[\ce{Fe2+}][\ce{- OH-}]}[180]\ce{^.OH}
\arrow(@c2--c11){->[\ce{+ O2}]}$[$\ce{^.ONOO}$]$
\arrow(@c11--c12){->[\ce{+ ^.NO}]}\ce{2 NO2^.}
\schemestop
}
\findwidth{\x}
\begin{figure}[width=.9\textwidth]
\scalebox{\DivideLengths{\textwidth}{\thewidth}}{\x}
\end{figure}
\lipsum[1]
\end{document}

在此处输入图片描述

答案2

我认为最简单的解决方法不是扩大方案规模,而是稍微重新安排它:

在此处输入图片描述

\documentclass{article}
\usepackage{chemfig}
\usepackage[version=3]{mhchem}
\usepackage{showframe}% show page layout
\begin{document}

\begin{figure}[ht]
\centering
\schemestart
 \ce{O2^.-}\arrow (c1--c2){0}\ce{NO^.}
 \merge{v}(c1)(c2)--(c3)\ce{ONOO-}
 \arrow (--c4){<=>[*{0}\parbox{1.2cm}{\ce{+ H+}\\ pK 6.6}][*{0}\ce{- H+}]}[-90,1.5]\ce{ONOOH}
 \arrow(--c5){->[\ce{+ NO^.}][\ce{- HNO2}]}[0,1.5]\ce{NO2^.}
 \arrow(--c6){->[*0\ce{+ NO^.}]}[-90]\ce{N2O3}
 \arrow(@c4--c7){->[\ce{+ O2^.-}][\ce{- OH-},\ce{- O2}]}[180,1.5]\ce{NO2^.}
 \arrow(@c7--c8){->[*0\ce{+ O2^.-}]}[-90]\parbox{1.5cm}{\centering \ce{O2NOO-}\\or \\\ce{NO2- + O2}}
 \arrow(@c3--@c7){->[\ce{+ CO2}][\ce{- CO3^.}]}[2.12]
 \arrow(@c3--@c5){->[\ce{+ CO2}][\ce{- CO3^.-}]}[2.12]
 \arrow(@c1--c9){->[\ce{+ O2^.-}, \ce{+ 2H+}][\ce{- O2}]}[180,1.5]\ce{H2O2}
 \arrow(@c9--c10){->[*0\ce{Fe2+}][*0\ce{- OH-}]}[-90]\ce{^.OH}
 \arrow(@c2--c11){->[\ce{+ O2}]}$[$\ce{^.ONOO}$]$
 \arrow(@c11--c12){->[*0\ce{+ ^.NO}]}[-90]\ce{2 NO2^.}
\schemestop
\end{figure}

\end{document}

答案3

环境的可选参数figure仅处理浮点数的允许位置,它不能包含缩放或其他内容。

减小尺寸的另一种方法是简单地减小字体大小,方法是\scriptsize在后面添加\begin{figure}

您还可以使用可选参数将事物稍微挤压在一起\schemestart,例如\schemestart[0,.7]

\documentclass{report}
\usepackage{chemfig}
\usepackage[version=3]{mhchem}
\begin{document}

\begin{figure}
\scriptsize
\schemestart
% option 2 -- comment out the two previous lines, uncomment the two next.
%\small
%\schemestart[0,.7]
\ce{O2^.-}\arrow (c1--c2){0}\ce{NO^.}\merge{v}(c1)(c2)--(c3)\ce{ONOO-}
\arrow (--c4){<=>[*{0}\parbox{1.2cm}{\ce{+ H+}\\ pK 6.6}][*{0}\ce{- H+}]}[-90,1.5]\ce{ONOOH}
\arrow(--c5){->[\ce{+ NO^.}][\ce{- HNO2}]}[0,1.5]\ce{NO2^.}
\arrow(--c6){->[\ce{+ NO^.}]}\ce{N2O3}
\arrow(@c4--c7){->[\ce{+ O2^.-}][\ce{- OH-},\ce{- O2}]}[180,1.5]\ce{NO2^.}
\arrow(@c7--c8){->[\ce{+ O2^.-}]}[180]\parbox{1.5cm}{\centering \ce{O2NOO-}\\or \\\ce{NO2- + O2}}
\arrow(@c3--@c7){->[\ce{+ CO2}][\ce{- CO3^.}]}[2.12]
\arrow(@c3--@c5){->[\ce{+ CO2}][\ce{- CO3^.-}]}[2.12]
\arrow(@c1--c9){->[\ce{+ O2^.-}, \ce{+ 2H+}][\ce{- O2}]}[180,1.5]\ce{H2O2}
\arrow(@c9--c10){->[\ce{Fe2+}][\ce{- OH-}]}[180]\ce{^.OH}
\arrow(@c2--c11){->[\ce{+ O2}]}$[$\ce{^.ONOO}$]$
\arrow(@c11--c12){->[\ce{+ ^.NO}]}\ce{2 NO2^.}
\schemestop

\end{figure}
\end{document}

相关内容