(可能不是最小的)工作示例:
% use XeLaTeX to compile
\documentclass{beamer}
\usetheme{Berlin}
\title{Test}
\author{Testname}
\institute{Testing University}
%%---------------------------
\begin{document}
\section*{}
\begin{frame}
\titlepage
\end{frame}
\section{SecA}\subsection{sub1}\frame{Hello1a}\frame{Hello1b}\subsection{sub2}\frame{Hello2a}\frame{Hello2b}\subsection{sub3}\frame{Hello3a}\frame{Hello3b}
\section{SecB}\subsection{sub1}\frame{Hello4a}\frame{Hello4b}\subsection{sub2}\frame{Hello5a}\frame{Hello5b}\subsection{sub3}\frame{Hello6a}\frame{Hello6b}
\section{SecC}\subsection{sub1}\frame{Hello7a}\frame{Hello7b}\subsection{sub2}\frame{Hello8a}\frame{Hello8b}\subsection{sub3}\frame{Hello9a}\frame{Hello9b}
\end{document}
使用 miniframes beamer 外层主题和 XeLaTeX 编译时,发现导航栏上的项目符号虽然可以点击,但是位置发生了偏移,点击第二行第二个项目符号会进入“Hello3b”这个框架,却进不了“Hello2b”,甚至无法通过导航栏进入“Hello1b”这个页面。
如果我使用 pdfLaTeX 或 LuaLaTeX,那么就没有问题。
相关问答:XeLaTeX 与 Beamer 迷你框架不兼容,但那里的答案并没有解决问题。相关问题和相关拉取请求似乎无法解决问题,因为我正在使用 TeX Live 2022 并且该文件beamerouterthemedefault.sty
包含了更改。
答案1
问题似乎是从 TL2016 和 TL2017 之间的某个地方开始,xelatex 中的链接现在占据了整个行的高度,即使实际内容要短得多。
使用 TL2016 与 TL2017 尝试以下操作:
% !TeX TS-program = xelatex
\documentclass{article}
\usepackage{hyperref}
\usepackage{tikz}
\hypersetup{pdfborder=1 1 1}
\begin{document}
\section{test}
\label{test}
\hyperlink{test}{%
.
}
\end{document}
对于您的 beamer 示例,这意味着不同 miniframe 的链接重叠。作为一种解决方法,您可以尝试 @Ulrike Fischer 的以下技巧https://github.com/josephwright/beamer/issues/332#issuecomment-774659976
% !TeX TS-program = xelatex
\documentclass[]{beamer}
\usetheme{Berlin}
\title{Test}
\author{Testname}
\institute{Testing University}
\makeatletter
\renewcommand{\beamer@xelatex@fixminiframes}{%
\expandafter\ifx\csname XeTeXrevision\endcsname\relax
\else
\special{dvipdfmx:catch_phantom true height 0.1cm depth 0cm}%
\fi
}
\setbeamertemplate{mini frame}
{%
\beamer@xelatex@fixminiframes
\begin{pgfpicture}{0pt}{0pt}{0.1cm}{0.1cm}
\pgfpathcircle{\pgfpoint{0.05cm}{0.05cm}}{0.05cm}
\pgfusepath{fill,stroke}
\end{pgfpicture}%
}
\setbeamertemplate{mini frame in current section}
{%
\beamer@xelatex@fixminiframes
\begin{pgfpicture}{0pt}{0pt}{0.1cm}{0.1cm}
\pgfpathcircle{\pgfpoint{0.05cm}{0.05cm}}{0.05cm}
\pgfusepath{stroke}
\end{pgfpicture}%
}
\setbeamertemplate{mini frame in current subsection}
{%
\beamer@xelatex@fixminiframes
\begin{pgfpicture}{0pt}{0pt}{0.1cm}{0.1cm}
\pgfpathcircle{\pgfpoint{0.05cm}{0.05cm}}{0.05cm}
\pgfusepath{stroke}
\end{pgfpicture}%
}
\makeatother
%%---------------------------
\begin{document}
\section*{}
\begin{frame}
\titlepage
\end{frame}
\section{SecA}\subsection{sub1}\frame{Hello1a}\frame{Hello1b}\subsection{sub2}\frame{Hello2a}\frame{Hello2b}\subsection{sub3}\frame{Hello3a}\frame{Hello3b}
\section{SecB}\subsection{sub1}\frame{Hello4a}\frame{Hello4b}\subsection{sub2}\frame{Hello5a}\frame{Hello5b}\subsection{sub3}\frame{Hello6a}\frame{Hello6b}
\section{SecC}\subsection{sub1}\frame{Hello7a}\frame{Hello7b}\subsection{sub2}\frame{Hello8a}\frame{Hello8b}\subsection{sub3}\frame{Hello9a}\frame{Hello9b}
\end{document}
更新:
此问题已在 beamer 中修复,请参阅https://github.com/josephwright/beamer/commit/5432ce75540d80157f0a7897f0cd98ca6cc99aa2。它应该包含在 beamer v3.68 或更新版本中。