我正在尝试在 LaTeX Beamer 中创建一种效果,将图像剪切成字母形状。我希望将字母放置在框架的左上角和背景中,这样文本就可以放在字母前面。
然而,我似乎无法正确定位。
存在问题的最小 .tex 文件如下:
\documentclass[aspectratio=169]{beamer}
\usepackage{lipsum}
\usepackage{tikz} \usetikzlibrary{fadings}
\usepackage{fontspec}
\newcommand{\imgletter}[2]{%
\begin{tikzfadingfrompicture}[name=letter#2]
\node[text=transparent!0]{\fontspec[Scale=26]{Code Pro Black}#2};
\end{tikzfadingfrompicture}
\begin{tikzpicture}[remember picture,overlay,anchor=north west]
\node[scope fading=letter#2,fit fading=false]
at (current page.north west) {\includegraphics[height=\textheight]{#1}};
\end{tikzpicture}
}
\title{Presentation title.}
\subtitle{subtitle}
\author{Bert {Van Vreckem}}
\date{\today}
\begin{document}
\begin{frame}
% Only bottom right of the letter is shown
\imgletter{blurred-background-cellphone-coffee-842554.jpg}{H}
\maketitle
\end{frame}
\begin{frame}
% Only right part of the letter is visible
\imgletter{blurred-background-cellphone-coffee-842554.jpg}{M}
\end{frame}
\begin{frame}
% same as previous page, letter is placed slightly higher
\imgletter{blurred-background-cellphone-coffee-842554.jpg}{M}
{\huge \textbf{Lorem ipsum dolor sit amet, consectetur adipiscing elit}}
\end{frame}
\begin{frame}
% Left and top part of the letter are clipped
\imgletter{blurred-background-cellphone-coffee-842554.jpg}{M}
\lipsum[2]
\end{frame}
\end{document}
图像的位置符合我的要求,但字母的形状却乱七八糟。为什么字母的位置会受到框架上其他文本的影响?我使用了此remember picture,overlay
选项来避免这种情况。
我错过了什么?
我使用 .otf 字体,因此使用 XeTeX 来编译 .tex 文件。
重现此情况所需的外部文件:
答案1
根据@marmots 的好评,他已经通过添加边界框等解决了所有问题,所以请接受他的答案。
这个答案的唯一区别是它将字母移动到框架的背景,这有两个微小的优点:
它将使位置独立于框架内容,即,它适用于所有对齐,不仅仅是顶部对齐的框架、有和没有框架标题的框架、普通框架...
该命令仅需在字母改变时使用,而不一定在每一帧都使用
% !TeX TS-program = xelatex
\documentclass[aspectratio=169]{beamer}
\usepackage{lipsum}
\usepackage{tikz} \usetikzlibrary{fadings}
\usepackage{fontspec}
\defbeamertemplate{background}{imgletter}[2]{%
\begin{tikzpicture}[remember picture,overlay]
\node[scope fading=letter#2,fit fading=false,
anchor=north west]
at (current page.north west) {\includegraphics[height=\textheight]{#1}};
\end{tikzpicture}
}
\foreach \X in {H,M}
{\begin{tikzfadingfrompicture}[name=letter\X]
\path[use as bounding box] (-14,-4) rectangle (6,12);
\node[text=transparent!0,scale=26](X) at (0,0) {\X}; %\fontspec[Scale=26]{Code Pro Black}
\end{tikzfadingfrompicture}
}
\title{Presentation title.}
\subtitle{subtitle}
\author{Bert {Van Vreckem}}
\date{\today}
\begin{document}
\setbeamertemplate{background}[imgletter]{example-image}{H}
\begin{frame}
\maketitle
\end{frame}
\setbeamertemplate{background}[imgletter]{example-image}{M}
\begin{frame}
\end{frame}
\begin{frame}
\huge \textbf{Lorem ipsum dolor sit amet, consectetur adipiscing elit}
\end{frame}
\begin{frame}
\lipsum[2]
\end{frame}
\end{document}
答案2
免责声明:我没有下载您正在使用的字体,因为我对这些字体的安装不了解。
但是,这个问题似乎与字体无关。为什么尽管是绝对定位,内容还是会移动?我真的不知道。接下来,我将介绍一种将内容放置在任何位置的方法。解决方法包括:
- 事先做好
tikzfadingfrompicture
。 - 使用
\frame[t]
而不是\frame
。 - 使用边界框路径来
tikzfadingfrompicture
移动字母。如果您选择不同的边界框,您将能够避免字母被切断。我只是在这里使用它来展示你可以用它做什么。
这是代码和输出。
\documentclass[aspectratio=169]{beamer}
\usepackage{lipsum}
\usepackage{tikz}
\usetikzlibrary{fadings}
\usepackage{fontspec}
\newcommand{\imgletter}[2]{%
\begin{tikzpicture}[remember picture,overlay]
\node[scope fading=letter#2,fit fading=false,
anchor=north west]
at (current page.north west) {\includegraphics[height=\textheight]{#1}};
\end{tikzpicture}
}
\title{Presentation title.}
\subtitle{subtitle}
\author{Bert {Van Vreckem}}
\date{\today}
\foreach \X in {H,M}
{\begin{tikzfadingfrompicture}[name=letter\X]
\path[use as bounding box] (-12,0) rectangle (6,8);
\node[text=transparent!0,scale=26](X) at (0,0) {\X}; %\fontspec[Scale=26]{Code Pro Black}
\end{tikzfadingfrompicture}
}
\begin{document}
\begin{frame}[t]
% Only bottom right of the letter is shown
\imgletter{blurred-background-cellphone-coffee-842554.jpg}{H}
\maketitle
\end{frame}
\begin{frame}[t]
% Only right part of the letter is visible
\imgletter{blurred-background-cellphone-coffee-842554.jpg}{M}
\end{frame}
\begin{frame}[t]
% same as previous page, letter is placed slightly higher
\imgletter{blurred-background-cellphone-coffee-842554.jpg}{M}
{\huge \textbf{Lorem ipsum dolor sit amet, consectetur adipiscing elit}}
\end{frame}
\begin{frame}[t]
% Left and top part of the letter are clipped
\imgletter{blurred-background-cellphone-coffee-842554.jpg}{M}
\lipsum[2]
\end{frame}
\end{document}