Amstext (chemmacros) 导致在 chemfig 中选择数学字体时出现问题

Amstext (chemmacros) 导致在 chemfig 中选择数学字体时出现问题

由于该包typeface在 LaTeX 核心更新后导致致命错误,我不得不使用通用字体\usepackage{font}来加载我最喜欢的字体集(参见问题LaTeX 核心更新后,Typeface 返回致命的编码错误)。由于我有不少文档都使用了typeface加载字体的方法,而这些文档现在出现大量错误,因此我开始剖析它们,以将错误隔离到单个或几个冲突的包中。

不幸的是,其中一个重要的软件包在使用某些字体和格式结构时会导致一些严重问题。我广泛使用chemmacroschemfig软件包,因此找到问题的解决方案非常重要。

我可以amsmath.sty通过将其作为第一个包加载或至少在其他字体包之前加载来防止已定义的警告tcolorbox。至于为什么将其放在字体包前面不起作用chemmacros,我不知道(尽管我对此很感兴趣)。

chemfig与字体结合使用gfsartemisiamathdesign[charter}导致一些警告和一些非常奇怪的行为:

  1. 字体gfsartemisamathdesign相互影响,导致无法在输出中使用。加载gfsartemisia前会加载所需的mathdesign希腊字母,但本身不会用作罗马字体。相反,加载前会得到正确的罗马字体,但会得到错误的希腊字母。chemmacroschartergfsartemisiamathdesigngfsartemisia此行为与包无关chemfig,但它显示在给定的 MWE 中。
  2. 打印化学结构会导致警告/错误too many math fonts并阻止使用正确的格式。我希望原子以无衬线字体显示,并使用手册第 27 页tgheros中推荐的方法: 。此行现在不起作用,在选项中添加 tikz 字体选择也不起作用。转换为数学模式,而用于绘制打印这些原子的节点(或类似的东西)。chemfig\renewcommand*\printatom[1]{\ensuremath{\mathsf{#1}}}atom styleChemfig\printatomatom style

chemfig在给定的 MWE 中,已经给出了一些注释来解释在与 和 一起gfsartemisia使用时发现的问题mathdesignChemfig 活性

\documentclass[a4paper,12pt]{article}

\usepackage[many]{tcolorbox} % removes amsmath.sty errors: command \iiint already defined when using gfsartemisia and chemmacros

%----- taal/font pakketten
\usepackage[dutch]{babel}
\usepackage[tracking]{microtype}

\usepackage{gfsartemisia}        % needs to be loaded before mathdesign to prevent greek font switch to default 
\usepackage[charter]{mathdesign} % needs to be loaded before gfsartemisia to prevent roman font switch to default
\usepackage[scale=0.90]{tgheros}

%----- chemische pakketten -----
\usepackage{chemmacros}
\usepackage{chemfig}

%----- grafische pakketten -----
\usepackage{xcolor}
%\usepackage{tikz} % tikz is loaded by chemfig

%----- layout pakketten -----
\usepackage[text={17.0cm,26cm},top=2.0cm,left=2.5cm]{geometry}
\usepackage{paracol}

%----- font en versie selectie -----
%\renewcommand*{\familydefault}{\sfdefault}
\setlength{\parindent}{0mm}
\renewcommand{\baselinestretch}{1.2}
\setlength{\marginparwidth}{40pt}

\usetikzlibrary{babel,positioning,fit,calc,shapes.misc,arrows.meta,decorations.markings,backgrounds,matrix}

%----- chemistry omgeving -----
\chemsetup{greek=mathdesign,formula=chemformula}
\chemsetup[chemformula]{format=\sffamily}

\DeclareMathAlphabet{\mathsf}{OT1}{qhv}{m}{n}       % qag is de LaTeX naam van TG Adventor
\SetMathAlphabet{\mathsf}{bold}{OT1}{qhv}{bx}{n}    % qhv is de LaTeX naam van TG Heros
\renewcommand*\printatom[1]{\ensuremath{\mathsf{#1}}}

\setchemfig{bond style={line width=1pt},atom sep=2.1em, atom style={blue, font=\fontencoding{OT1}\fontfamily{qhv}}}

\begin{document}
    
    \columnratio{0.75,0.25}
    \begin{paracol}{2}
        Hiernaast is de structuurformule van 2,3-dibroomprop-1-een getekend. Als men dit 2,3-dibroomprop-1-een met zinkpoeder behandelt, ontstaat behalve \textit{vast} zinkbromide ook een stof met de molecuulformule \ch{C3H4}, die \textbf{alleen} genoemd wordt. Deze verbinding heeft geen ringstructuur.
        \switchcolumn
        \hfill \chemfig{C(-[2]H)(-[4]H)(-[6]Br)-C(-[6]Br)=C(-[1]H)(-[7]H)}
    \end{paracol}
    
    \vspace{12pt}
    \textsf{check whether Mathdesign - Charter is still used as Greek symbool font:}
    
    \printchemgreekalphabet % listing is not Mathdesign - Charter
    
    and can be used: \ch{\chemalpha-C6H12O6}
    
        
\end{document}

重要的提示:我更改了问题的标题,因为chemfig不是原因,而是amstext中所需包条件导致的错误的受害者chemmacros。使用 中的包chemgreekchemformula及其设置来使用mathdesign[charter]和 sansserifch{}可以得到正确的chemfig输出而没有错误。

答案1

当 egreg 发表了关于使用 artimesia 的评论时,第一个反应是:“为什么不呢?”但这条评论的目的是让我思考为什么我首先选择了这三种字体,特别是gfsartemisia。我稍后会谈到这一点。

gfsartemisia首先,使用而不是使用gfsartemisia-euler是更好的选择。正如 egreg 指出的那样,gfsartemisa使用txfonts和根据这个答案版本正常错误中使用了太多数学字母这是一个最好忽略的包。

同样的问题(以及许多其他与此相关的问题)数学字体太多了......“) 还指出了使用 (PDF)LaTeX 编译 tex 文件的限制。加载数学字体的空间有限。因此,切换到 XeTeX 编译器是显而易见的选择。下面的 MWE 在 XeTeX 中编译没有问题,但会给出“数学字体太多了……“PDFLaTeX 中的错误。

\documentclass[11pt]{article}

\usepackage[a4paper,text={18.0cm,26cm},top=2.0cm,left=2.0cm]{geometry}

\usepackage{gfsartemisia-euler}
\usepackage[charter]{mathdesign}
\usepackage[scale=0.92]{tgheros}

\usepackage{lipsum}

\usepackage{chemfig}
\DeclareMathAlphabet{\mathsf}{T1}{qhv}{m}{n}    % to make sure the TG Heros font is used as sans serif  
\SetMathAlphabet{\mathsf}{bold}{T1}{qhv}{bx}{n} % qhv designates TG Heros
\renewcommand*\printatom[1]{\ensuremath{\mathsf{#1}}}
\setchemfig{bond style={line width=1pt},atom sep=2.1em, atom style={blue}}

\usepackage{chemmacros}
\chemsetup{greek=mathdesign,formula=chemformula}
\chemsetup[chemformula]{format=\sffamily}
  
\begin{document}
    \fontfamily{artemisiaeuler} \selectfont
    
    \lipsum[1][1-3]
    
    \textrm{\lipsum[1][1-3]}
    
    \textsf{\lipsum[1][1-3]}
    
    \begin{equation*}
        \chemmu x \times \chemdelta \alpha = 2 \cdot \Delta \cdot \int_{\alpha}^{\mu} \mathsf{\delta y} \quad {some text} \quad \text{some text} \quad \textrm{some text} \quad \textsf{some text}
    \end{equation*}
    
    \chemfig{H-C([2]-H)([6]-H)-C([2]-H)([6]-H)-C([1]-OH)([7]=O)} or \ch{C3H5COOH} 
    
    \printchemgreekalphabet
        
\end{document}

评论

  1. mathdesing应该在之后加载,gfsartemisia-euler因为反向加载顺序将导致一些错误和警告。
  2. mathdesign{charter]将加载字体作为默认无衬线字体。因此,在文档开头有charter此行。使用however 将调用字体,而不是。\fontfamily{artemisaeuler} \selectfont\textrm{}chartergfsartemisia-euler

typeface可以使用David Carlisle 在我的问题中提供的带有补丁的软件包来规避这些“缺点”LaTeX 核心更新后,Typeface 返回致命的编码错误. 用以下代码替换字体选择块

\let\MakeUppercasesaved\MakeUppercase
\def\MakeUppercase#1{\expanded{\uppercase{#1}}}

\usepackage[
    typeface=gfsartemisia:euler,
    sanstypeface=tgheros:scale:0.9,
    mathtypeface=mathdesign:charter,
    ]{typeface}

\let\MakeUppercase\MakeUppercasesaved

将解决字体选择问题。\fontfamily{artemisiaeuler} \selectfont文档开头的行不再需要,并且也\textrm{}将使用artemsiaeuler字体。代码在 (PDF)LaTeX 中编译时也不会出现错误。

最后,为什么使用gfsartemisia-euler。这种选择与为患有阅读障碍的学生提供易于阅读的文本有关。通常不建议使用衬线字体,因为辅音上的破折号会使文本阅读困难(一些患有阅读障碍的学生说文本似乎在旋转)。但是,由于大多数字体的外观“僵硬”,并且使用较小字体时间距会缩小,因此完整的无衬线文本也不受欢迎。这也会影响阅读,不仅仅是阅读障碍人士。gfsartemisia-euler是一种具有无衬线字体特征的衬线字体。它在辅音的顶部/底部没有破折号,与(无)衬线字体相比,它具有良好的间距/宽字体。此外......它看起来很有趣......我在 LaTeX 字体目录中找不到具有这些特征的其他字体。

相关内容