Skip to content

Instantly share code, notes, and snippets.

@schnell18
Created May 9, 2025 05:20
Show Gist options
  • Save schnell18/f16b87f5efc57fde26b4f4da5caea705 to your computer and use it in GitHub Desktop.
Save schnell18/f16b87f5efc57fde26b4f4da5caea705 to your computer and use it in GitHub Desktop.
This Python script generate a three-part table in LaTeX to allow user jump to specific point of any long Youtube videos.
#!/usr/bin/env python
import re
import sys
HEADER = r"""
\documentclass{article}
\usepackage{booktabs,makecell,multirow,threeparttable,diagbox}
\usepackage{caption}
\usepackage[
colorlinks=true,
linkcolor=blue,
bookmarksnumbered=true,
CJKbookmarks=true,
bookmarksopen=true]{hyperref}
\begin{document}
\begin{table}
\caption{AWS SAA Training Video Bookmarks}\label{tab:tspsaa}
\begin{threeparttable}
\begin{tabular*}{1.13\textwidth}{p{7em}cp{7em}cp{7em}c}
\toprule
\thead{\bfseries Topic} & \thead{\bfseries Time} &
\thead{\bfseries Topic} & \thead{\bfseries Time} &
\thead{\bfseries Topic} & \thead{\bfseries Time} \\
\midrule
"""
FOOTER = r"""
\bottomrule\addlinespace[1ex]
\end{tabular*}
% \begin{tablenotes}\zihao{7}
% \end{tablenotes}
\end{threeparttable}
\end{table}
\end{document}
"""
if __name__ == "__main__":
batch_size = 3
base_url = "https://www.youtube.com/watch?v=c3Cn4xYfxJY"
topics = []
for seq, line in enumerate(sys.stdin):
line = line.rstrip()
time, title = line.split(" ", 1)
m = re.match(r"(\d+):(\d+):(\d+)", time)
if m:
hour = int(m.group(1))
min = int(m.group(2))
sec = int(m.group(3))
t_secs = hour * 3600 + min * 60 + sec
link = f"{base_url}\\&t={t_secs}"
topics.append((title, time, link))
else:
topics.append((time, title, None))
# print topics in table
# print header
print(HEADER)
# print rows
rows = len(topics) // batch_size
remainder = len(topics) % batch_size
for i in range(rows):
for j in range(batch_size):
tup = topics[i * batch_size + j]
title, time, link = tup
print(f"{title} & \\href{{{link}}}{{{time}}} ", end="")
if j != batch_size - 1:
print(" & ", end="")
print(r"\\")
if remainder != 0:
for i in range(remainder):
tup = topics[rows * batch_size + i]
title, time, link = tup
print(f"{title} & \\href{{{link}}}{{{time}}} ", end="")
print(" & ", end="")
for i in range(batch_size - remainder):
print(" & ", end="")
if i != batch_size - remainder - 1:
print(" & ", end="")
print(r"\\")
print(FOOTER)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment