使用 XeLaTeX 时,beamer miniframes 主题导航栏上的项目符号的可点击位置发生了变化

使用 XeLaTeX 时,beamer miniframes 主题导航栏上的项目符号的可点击位置发生了变化

(可能不是最小的)工作示例:

% 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”这个页面。

d

如果我使用 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 或更新版本中。

相关内容