![使用 XeLaTeX 时,beamer miniframes 主题导航栏上的项目符号的可点击位置发生了变化](https://linux22.com/image/452088/%E4%BD%BF%E7%94%A8%20XeLaTeX%20%E6%97%B6%EF%BC%8Cbeamer%20miniframes%20%E4%B8%BB%E9%A2%98%E5%AF%BC%E8%88%AA%E6%A0%8F%E4%B8%8A%E7%9A%84%E9%A1%B9%E7%9B%AE%E7%AC%A6%E5%8F%B7%E7%9A%84%E5%8F%AF%E7%82%B9%E5%87%BB%E4%BD%8D%E7%BD%AE%E5%8F%91%E7%94%9F%E4%BA%86%E5%8F%98%E5%8C%96.png)
(可能不是最小的)工作示例:
% 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 或更新版本中。