我正在排版一些包含数学和希腊字母的文本。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
选项不是加载upgreek
并greek=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}
请参阅newcomputermodern
和fontsetup
包以获取更多信息。