处理 LaTeX 长度时避免出现“非法测量单位(插入 pt)”

处理 LaTeX 长度时避免出现“非法测量单位(插入 pt)”

我的目标是在 Beamer 演示文稿中链接到外部视频文件,而不是将它们直接嵌入到 PDF 中(例如,使用媒体9我们使用 .packages 来保持尽可能小的尺寸。

我用超链接包创建一个可点击区域(链接),其中包含视频的预览图像和蒂克兹创建一个小的播放按钮作为覆盖来吸引演示者的注意力。最终结果如下所示:

vlink 命令预览

我将 hyperref 和 TikZ 命令包装在一个自己的命令中\vlink[options]{name_of_video_file},然后使用鍵盤包,以便我的命令可以接受键值对作为选项。

当使用或整数维度(例如)时,命令vlink运行良好。\textwidth2cm\vlink[width=\textwidth]{my_video_file.mp4}但是,当使用width=0.5\textwidth或调用时width=2.5cm,我收到Illegal unit of measure (pt inserted)错误因为我的 TikZ 命令用于\fontsize{0.40\vlinkWidth}...设置覆盖尺寸。显然,LaTeX 会扩展0.5\texwidth为一些我不明白的奇怪东西(LaTeX 维基百科表示它应该是一个长度)。

那么,这里处理传递的宽度的正确方法是什么?

任何帮助都将不胜感激。:)

下面附上了一个最小工作示例(请添加一个名为的虚拟图片BigBugBunny.mp4.preview.png以避免编译错误):

\documentclass{beamer}

\usepackage[utf8x]{inputenc}
\usepackage{fontawesome}
\usepackage{graphicx}
\usepackage{hyperref}
\usepackage{pgfkeys}
\usepackage{tikz}

\pgfkeys{
    /vlink/.is family,
    /vlink,
    % Here are the options that a user can pass
    default/.style = 
    {width = \textwidth, color=black, opacity=0.25},
    width/.estore in = \vlinkWidth,
    color/.estore in = \vlinkColor,
    opacity/.estore in = \vlinkOpacity,
}
\newcommand\vlink[2][]{%
    \pgfkeys{/vlink, default, #1}%
    \tikz{
        \node (previewimage)
        {\href{run:#2}{\includegraphics[width=\vlinkWidth]{{{#2.preview}}}}};
        \node [align=center,color=\vlinkColor,opacity=\vlinkOpacity,text width=\vlinkWidth] at
        (previewimage.center){\fontsize{0.40\vlinkWidth}{\vlinkWidth}\selectfont\faPlayCircleO};
    }
}

\begin{document}
    \begin{frame}{Test `vlink' Command}
    \begin{itemize}
        \item Use `vlink' to create a link to a video file.
        \item I.e., the video file is not embedded into the final PDF.
        \item Instead, the default video player is launched when clicking the link.
        \item The link area is a preview image of the embedded video.
    \end{itemize}

    \begin{center}
        \vlink[color=white,opacity=0.6,width=\textwidth]{BigBuckBunny.mp4}
    \end{center}
    \end{frame}
\end{document}

答案1

\vlinkWidth,是一个宏而不是长度寄存器,如果您将\def\zzz{100.5pt}其用作0.4\zzz长度,则会看到相同的内容。

宏将会扩展并给你0.4100.5pt 两个.和你显示的错误。

正如 Ulrike 所评论的,您可以使用\dimexpr它本质上是一个匿名长度寄存器,因此 0.4\dimexpr\zzz\relax它又是一个有效长度,或者在您的情况下0.4\dimexpr\vlinkwidth\relax

相关内容