tikzfadingfrompicture 中的文本定位

tikzfadingfrompicture 中的文本定位

我正在尝试在 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

免责声明:我没有下载您正在使用的字体,因为我对这些字体的安装不了解。

但是,这个问题似乎与字体无关。为什么尽管是绝对定位,内容还是会移动?我真的不知道。接下来,我将介绍一种将内容放置在任何位置的方法。解决方法包括:

  1. 事先做好tikzfadingfrompicture
  2. 使用\frame[t]而不是\frame
  3. 使用边界框路径来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}

在此处输入图片描述

相关内容