我正拼命尝试在 Beamer 中完成三件事:
- 以小型大写字母显示框架标题。
- 将数学公式直立显示。
- 打印带有变音符号的希腊语文本。
前两点与下面的 MWE 配合得很好,但希腊语文本不起作用。我尝试添加
\setmainfont{CMU Serif}
\setsansfont{CMU Sans Serif}
\newfontfamily{\greekfont}{CMU Serif}
\newfontfamily{\greekfontsf}{CMU Sans Serif}
到 .tex 文件。这样,我就有了希腊文,但框架标题不再以小写字母显示。有人知道如何解决这个问题吗?
这是我的 MWE:
\documentclass[hyperref={pdfpagemode=FullScreen},aspectratio=169]{beamer}
%%% Mathe-Font gerade %%%
\usepackage[T1]{fontenc}
\usepackage{amssymb}
\usepackage[math-style=upright]{unicode-math}
%%% Griechisch %%%
\usepackage{exscale} % große Formeln sehen schöner aus
%%% Folientitel weiter unten, zentriert und in Kapitälchen %%%
\usepackage{textcase,regexpatch}
\setbeamertemplate{frametitle}{%
\makeatletter
\regexpatchcmd{\insertframetitle}
{(\c{usebeamertemplate}.*)\c{fi}}
{\c{NoCaseChange}\cB\{\1\cE\}\c{fi}}
{}{}%
\makeatother
\vspace{1ex} \huge\centerline{\scshape{\insertframetitle}}
}
\begin{document}
\begin{frame}
\frametitle{The frame title is in caps -- as desired.}
Here, the text is normal, as expected.
Also, math formulas are displayed the way I would like them to be, i.\,e., upright:
$\{ \langle x,y \rangle \mid x \in a \land y \in b \} := \{ z \in \mathfrak{P}(\mathfrak{P}(a\cup b)) \mid \exists x \exists y (x\in a \land y \in b \land z=\{ \{ x \}, \{ x,y \} \}) \}$
Problematically, though, greek letters are not displayed at all: Ἀριστοτέλης ὁ φιλόσοφος ἐστιν.
\end{frame}
\end{document}
作为 LaTeX 的一名初学者,我非常感激任何有关更简洁代码的建议。
答案1
为了打印希腊字母,您需要加载支持希腊语的字体。因此,加载 CMU Sans Serif 和 CMU Serif 是个好主意。由于这两种字体似乎都支持希腊语,因此您不需要专门为希腊语文本定义字体。请注意,您不能fontspec
与 PDFLaTeX 一起使用,但您需要使用 XeLaTeX 或 LuaLaTeX。
您还需要指定希望以 CMU Serif 打印框架标题,因为 CMU Sans Serif 没有小写字母。您可以通过插入对 的\rmfamily
重新定义来实现这一点frametitle
。
把所有内容放在一起:
\documentclass[hyperref={pdfpagemode=FullScreen},aspectratio=169]{beamer}
%%% Mathe-Font gerade %%%
\usepackage[T1]{fontenc}
\usepackage{fontspec}
\setmainfont{CMU Serif}
\setsansfont{CMU Sans Serif}
\usepackage{amssymb}
\usepackage[math-style=upright]{unicode-math}
%%% Griechisch %%%
\usepackage{exscale} % große Formeln sehen schöner aus
%%% Folientitel weiter unten, zentriert und in Kapitälchen %%%
\usepackage{textcase,regexpatch}
\setbeamertemplate{frametitle}{%
\makeatletter
\regexpatchcmd{\insertframetitle}
{(\c{usebeamertemplate}.*)\c{fi}}
{\c{NoCaseChange}\cB\{\1\cE\}\c{fi}}
{}{}%
\makeatother
\vspace{1ex} \huge\centerline{\rmfamily\scshape{\insertframetitle}}
}
\begin{document}
\begin{frame}
\frametitle{The frame title is in caps -- as desired.}
Here, the text is normal, as expected.
Also, math formulas are displayed the way I would like them to be, i.\,e., upright:
$\{ \langle x,y \rangle \mid x \in a \land y \in b \} := \{ z \in \mathfrak{P}(\mathfrak{P}(a\cup b)) \mid \exists x \exists y (x\in a \land y \in b \land z=\{ \{ x \}, \{ x,y \} \}) \}$
Problematically, though, greek letters are not displayed at all: Ἀριστοτέλης ὁ φιλόσοφος ἐστιν.
\end{frame}
\end{document}
输出应为:
题外话:你也许可以替换
\usepackage{textcase,regexpatch}
\setbeamertemplate{frametitle}{%
\makeatletter
\regexpatchcmd{\insertframetitle}
{(\c{usebeamertemplate}.*)\c{fi}}
{\c{NoCaseChange}\cB\{\1\cE\}\c{fi}}
{}{}%
\makeatother
\vspace{1ex} \huge\centerline{\scshape{\insertframetitle}}
}
仅通过
\setbeamertemplate{frametitle}{%
\vspace{1ex} \huge\centerline{\scshape{\insertframetitle}}
}