我有一组 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}