后Joseph Wright 的博客文章mhchem
,我想在 中使用chemfig
。一切顺利,直到我决定在acro
包中包含首字母缩略词。使用以下 MWE,首字母缩略词被定义为已使用,但不包含在首字母缩略词列表中。
\documentclass{article}
\usepackage{acro}
\usepackage{chemfig}
\usepackage[version=4]{mhchem}
\DeclareAcronym{boc}{short=Boc,long=\textit{tert}-butyloxycarbonyl}
% From http://www.texdev.net/2012/08/25/exploring-chemfig-customising-appearance/
\makeatletter
\def\CF@node@content{%
\expandafter\expandafter\expandafter%\expandafter\expandafter%
\printatom\expandafter\expandafter\expandafter%\expandafter\expandafter%
{\csname atom@\number\CF@cnt@atomnumber\endcsname}%
\ensuremath{\CF@node@strut}%
}
\makeatother
\renewcommand*{\printatom}[1]{{\ce{#1}}}
\begin{document}
\sffamily
\acifused{boc}{Boc is used}{Boc is not used}
\chemfig{\acs{boc}HN-R-NH2}
\acifused{boc}{Boc is used}{Boc is not used}
\printacronyms
\end{document}
当删除博客文章中的代码后,一切都恢复正常,但我真的很喜欢能够\ce
从内部使用\chemfig
。此外,它\chemfig
使用了 sans-serif 文本字体而不是 serif 数学字体,这是我想要的。
我尝试在宏\expandafter
周围使用五个 s \printatom
。这确实解决了首字母缩略词问题,字体仍然与周围的无衬线文本字体相同,但解析\ce
不再正确。请注意非下标 2:
对于如何实现这两者acro
并mhchem
在其中发挥作用的任何建议chemfig
,都将不胜感激。
答案1
由于您的重新定义,该\acs
命令会被处理多次,但是作为第一次处理——这是一个有根据的猜测——仅用于测量内容,来自 acro 的写入命令不会被执行,因此它不会将所需的内容写入\acro@used@once
aux 文件,而只会\acro@used@twice
从实际排版中写入。
align
如果您在内部(已测试)使用 acro,并且可能tabularx
在其他环境中对其内容进行两次处理,您也会得到类似的行为。所以在我看来这是一个错误:acro 应该检查这种情况。
您应该通知作者,作为解决方法,您可以尝试以下方法。请注意,从 acro 的角度来看,此键已被使用两次。因此,针对“单次”出现的特殊样式将不起作用。
\documentclass{article}
\usepackage{acro}
\usepackage{chemfig,amsmath}
\usepackage[version=4]{mhchem}
\DeclareAcronym{boc}{short=Boc,long=\textit{tert}-butyloxycarbonyl}
%% From http://www.texdev.net/2012/08/25/exploring-chemfig-customising-appearance/
\makeatletter
\def\CF@node@content{%
\expandafter\expandafter\expandafter%\expandafter\expandafter%
\printatom\expandafter\expandafter\expandafter%\expandafter\expandafter%
{\csname atom@\number\CF@cnt@atomnumber\endcsname}%
\ensuremath{\CF@node@strut}%
}
\ExplSyntaxOn
\cs_set_protected:Npn \acro@used@twice #1#2#3#4
{
\bool_if:cF {g__acro_#1_in_list_bool}
{\acro@used@once {#1}{#2}{#3}{#4}}
\cs_gset_nopar:cpn {acro@#1@twice} {#1}
\tl_if_empty:nF {#2#3#4}
{ \seq_gput_right:cn {g__acro_#1_pages_seq} { {#2}{#3}{#4} } }
}
\ExplSyntaxOff
\makeatother
\renewcommand*{\printatom}[1]{{\ce{#1}}}
\begin{document}
\sffamily
\acifused{boc}{Boc is used}{Boc is not used}
\chemfig{\acs{boc}HN-R-NH2}
\acifused{boc}{Boc is used}{Boc is not used}
\printacronyms
\end{document}