更新

更新

我正在排版一些包含数学和希腊字母的文本。LaTeX 在数学模式下可以很好地处理希腊字母,但我无法让它使用直接输入或包\b提供的宏来显示字符“β” chemmacros

这是一个简单的例子:

\documentclass{minimal}
\usepackage{fontspec}
\usepackage[greek=textgreek]{chemmacros}

\begin{document}    
\iupac{\b-carotene} % doesn't work

\iupac{β-carotene} % doesn't work

β % doesn't work

\Chembeta % doesn't work

$\beta$ % works fine
\end{document}

我正在用 编译该文档lualatex


更新

使用不同的字体(即 Linux Libertine 或 Times New Roman)可以解决问题。这是否意味着 Latin Modern 系列不支持直立希腊字母?

答案1

upgreek适用于 XeLaTeX 和 LuaLaTeX。chemmacros但显然从文档中无法明确设置该greek=upgreek选项不是加载upgreekgreek=textgreek执行不是加载textgreek!此选项的存在是为了防止在用户加载其中一个或两个时自动chemmacros选择upgreek或。使用任一选项而不加载适当的包通常会引发类似textgreek

! Undefined control sequence.
<argument> \textbeta 

l.9 \iupac{\b-carotene}

但是,当fontspec加载时,代码也会因 Latin Modern 而默默失败。(我可能应该添加一些检查来检查是否已加载所需的包。)

\documentclass{article}
\usepackage{fontspec}
\usepackage{upgreek}% needs no be loaded
\usepackage{chemmacros}[2014/01/24]
\usepackage{newunicodechar}
\newunicodechar{β}{\chembeta}

\begin{document}    
\iupac{\b-carotene} % works

\iupac{β-carotene} % works

β % works

\chembeta % works

$\beta$ % works fine
\end{document}

在此处输入图片描述

答案2

问题是\textbeta被重新定义,因此 执行的定义textgreek丢失了。此外,拉丁现代字体支持希腊语。

这是一个技巧,我想有更好的方法可以做到这一点。

\documentclass{article}

\usepackage[LGR]{fontenc}
\usepackage{chemmacros}
\protected\def\Chembeta{\text{\fontencoding{LGR}\fontfamily{cmr}\selectfont b}}

\usepackage{fontspec}

\usepackage{newunicodechar}
\newunicodechar{β}{\Chembeta}

\begin{document}

\iupac{\b-carotene} % works

\iupac{β-carotene} % works

β % works

\Chembeta % works

$\beta$ % works
\end{document}

在此处输入图片描述

对于拉丁现代字体来说,更完整的设置只能通过概括和简化上述技巧来获得:

\documentclass{article}

\usepackage[LGR]{fontenc}
\usepackage{chemmacros}
\usepackage{newunicodechar}
\usepackage{fontspec}

\ExplSyntaxOn
\cs_set_protected:Npn \egchemmacros_lgr_greek:n #1
 {
  \mbox{\fontencoding{LGR}\fontfamily{cmr}\selectfont#1}
 }
\cs_set_protected:Npn \Chemalpha{\egchemmacros_lgr_greek:n{a}}
\cs_set_protected:Npn \Chembeta{\egchemmacros_lgr_greek:n{b}}
\cs_set_protected:Npn \Chemgamma{\egchemmacros_lgr_greek:n{g}}
\cs_set_protected:Npn \Chemdelta{\egchemmacros_lgr_greek:n{d}}
\cs_set_protected:Npn \Chemepsilon{\egchemmacros_lgr_greek:n{e}}
\cs_set_protected:Npn \Chemeta{\egchemmacros_lgr_greek:n{h}}
\cs_set_protected:Npn \Chemkappa{\egchemmacros_lgr_greek:n{k}}
\cs_set_protected:Npn \Chemmu{\egchemmacros_lgr_greek:n{m}}
\cs_set_protected:Npn \Chemnu{\egchemmacros_lgr_greek:n{n}}
\cs_set_protected:Npn \Chempi{\egchemmacros_lgr_greek:n{p}}
\cs_set_protected:Npn \Chemrho{\egchemmacros_lgr_greek:n{r}}
\cs_set_protected:Npn \Chemsigma{\egchemmacros_lgr_greek:n{s}}
\cs_set_protected:Npn \Chemomega{\egchemmacros_lgr_greek:n{w}}
\cs_set_protected:Npn \ChemDelta{\egchemmacros_lgr_greek:n{D}}

\newunicodechar{α}{\bool_if:NTF \l_chemmacros_inside_iupac_bool {\Chemalpha}{α}}
\newunicodechar{β}{\bool_if:NTF \l_chemmacros_inside_iupac_bool {\Chembeta}{β}}
\newunicodechar{γ}{\bool_if:NTF \l_chemmacros_inside_iupac_bool {\Chemgamma}{γ}}
\newunicodechar{δ}{\bool_if:NTF \l_chemmacros_inside_iupac_bool {\Chemdelta}{δ}}
\newunicodechar{ε}{\bool_if:NTF \l_chemmacros_inside_iupac_bool {\Chemepsilon}{ε}}
\newunicodechar{η}{\bool_if:NTF \l_chemmacros_inside_iupac_bool {\Chemeta}{η}}
\newunicodechar{κ}{\bool_if:NTF \l_chemmacros_inside_iupac_bool {\Chemkappa}{κ}}
\newunicodechar{μ}{\bool_if:NTF \l_chemmacros_inside_iupac_bool {\Chemmu}{μ}}
\newunicodechar{ν}{\bool_if:NTF \l_chemmacros_inside_iupac_bool {\Chemnu}{ν}}
\newunicodechar{π}{\bool_if:NTF \l_chemmacros_inside_iupac_bool {\Chempi}{π}}
\newunicodechar{ρ}{\bool_if:NTF \l_chemmacros_inside_iupac_bool {\Chemrho}{ρ}}
\newunicodechar{σ}{\bool_if:NTF \l_chemmacros_inside_iupac_bool {\Chemsigma}{σ}}
\newunicodechar{ω}{\bool_if:NTF \l_chemmacros_inside_iupac_bool {\Chemomega}{ω}}
\newunicodechar{Δ}{\bool_if:NTF \l_chemmacros_inside_iupac_bool {\ChemDelta}{Δ}}
\ExplSyntaxOff

\begin{document}

\iupac{\b-carotene} % works

\iupac{β-carotene} % works

β % doesn't work - Latin Modern has no beta

\Chembeta % works

$\beta$ % works fine

\iupac{αβγδεηκμνπρσωΔ} % works

\iupac{\a\b\g\d\k\m\n\w}
\end{document}

在此处输入图片描述

答案3

您可以使用fontsetup软件包,提供用于化学的直立希腊文排版功能。它使用 New Computer Modern 字体。正直的希腊化学

\documentclass{article}

\usepackage{fontsetup}

\begin{document}
    β-carotene

    \(\beta\)-carotene

    \(\upbeta\)-carotene

    \chembeta-carotene

    κ-compound

    \chemkappa-compound
\end{document}

请参阅newcomputermodernfontsetup包以获取更多信息。

相关内容