如何编写乳胶宏来引用一组 YouTube 视频中的特定时间?

如何编写乳胶宏来引用一组 YouTube 视频中的特定时间?

我有一组 YouTube 教育视频,我想在文档中引用这些视频,并附上视频中特定时间的链接。在 Python 中,我想要的代码会执行以下操作:

links = {
    "first": "https://www.youtube.com/watch?v=3anNG7TfHSQ",
    "second": "https://www.youtube.com/watch?v=cfudXO_vzWk"
}


def youTubeRef(text:str, ref:str h:int, min:int, sec:int):
    link = f"{links[ref]}&t=h{h}m{min}s{sec}"
    return '<a href="{link}">{text}</a>'  # though in latex it would just be a href

然后,在乳胶文档中,我想像这样使用它:

Here is \youTubeRef{my text}{first}{0}{12}{13}

最终呈现的文档将显示:

这是我的文字

答案1

在您的命令中,您使用了命令的强制参数。我不建议这样做,因为有时您可能不想指定特定时间。为此,使用可选参数是更好的选择。

\documentclass{article}
\usepackage{hyperref}
\def\first{https://www.youtube.com/watch?v=3anNG7TfHSQ&t}
\NewDocumentCommand{ \ytref }{ m m O{00} O{00} O{00} }{%
  \href{#2=#3h#4m#5s}{%
    #1%
  }%
}

\begin{document}
\ytref{This}{\first}[0][12][13] video will start from 12
minutes 13 seconds.

\ytref{This}{\first} video will start from the beginning.
\end{document}

还要记住,变量不能像在代码中那样即时使用。您必须使用\def命令定义它们,然后才能像变量一样使用它(并且它们也应该以 开头\)。

答案2

代码:

\documentclass[11pt]{article}
\usepackage{hyperref}
\newcommand{\youTubeRef}[5]{\href{\csname#2\endcsname\&t=#3h#4m#5s}{#1}}

\newcommand{\first}{https://www.youtube.com/watch?v=3anNG7TfHSQ}
\newcommand{\second}{https://www.youtube.com/watch?v=cfudXO_vzWk}
\begin{document}
Here is \youTubeRef{my text}{first}{0}{12}{13}. % link to https://www.youtube.com/watch?v=3anNG7TfHSQ&t=00h12m13s
\end{document}

在此处输入图片描述

答案3

假设您的链接中小时数非常少,则以下内容将它们设置为默认为的可选参数0。否则,这与其他答案非常相似,我选择了两步解决方案,其中包含两个文档级宏,一个用于添加新链接,另一个用于使用它们。

\documentclass{article}

\usepackage{hyperref}

\ExplSyntaxOn
\msg_new:nnn { cirian } { unknown-link }
  { The~ link~ named~ "#1"~ is~ unknown. }
\tl_new:N \l_cirian_link_tl
\prop_new:N \l_cirian_links_prop
\NewDocumentCommand \addyoutubelink { m m }
  { \prop_put:Nnn \l_cirian_links_prop {#1} {#2} }
\NewDocumentCommand \youtuberef { m m O{0} m m }
  {
    \prop_get:NnNTF \l_cirian_links_prop {#2} \l_cirian_link_tl
      { \exp_args:No \href { \l_cirian_link_tl  &=h#3m#4s#5 } {#1} }
      { \msg_error:nnn { cirian } { unknown-link } {#2} }
  }
\ExplSyntaxOff

\addyoutubelink{first}{https://www.youtube.com/watch?v=3anNG7TfHSQ}
\addyoutubelink{second}{https://www.youtube.com/watch?v=cfudXO_vzWk}

\begin{document}
\youtuberef{Cool video}{first}{1}{20}.

And the really long video is only worth it \youtuberef{after an hour}{second}[1]{0}{0}.
\end{document}

相关内容