% makeindex < aebpro_man.idx > aebpro_man.ind
\documentclass{article}
\usepackage[fleqn]{amsmath}
\usepackage[
    web={centertitlepage,designv,tight*,usetemplates,
        forcolorpaper,latextoc,pro},%usesf,
        eforms,aebxmp
]{aeb_pro}
%\usepackage{multicol}
\usepackage{aeb_mlink}
\usepackage[usepopup]{ltx4yt}
\usepackage{array}
\usepackage[altbullet]{lucidbry}

\usepackage{makeidx}
\makeindex
\usepackage{acroman}

\leftmargini\parindent


\usepackage[active]{srcltx}

\urlstyle{rm}
\let\tops\texorpdfstring
\let\pkg\textsf
\let\app\textsf
\let\opt\texttt
\let\uif\textsf
\let\env\texttt
\def\meta#1{\textit{\texttt{#1}}}
\def\ameta#1{$\langle\textit{\texttt{#1}}\rangle$}
\newdimen\aebdimen \aebdimen6pt %\partopsep  \advance\aebdimen\partopsep
\newcommand\bVerb[1][]{\begingroup#1\vskip\aebdimen\parindent0pt}%
\def\eVerb{\vskip\aebdimen\endgroup\noindent}
\def\SUB#1{\ensuremath{{}_{\text{#1}}}}
\def\darg#1{\texttt{\{#1\}}}
\def\takeMeasure{\bgroup\obeyspaces\takeMeasurei}
\def\takeMeasurei#1{\global\setbox\webtempboxi\hbox{\ttfamily#1}\egroup}
\def\bxSize{\wd\webtempboxi+2\fboxsep+2\fboxrule}
\let\amtIndent\leftmargini
\makeatletter
\def\setDisplayNumber#1#2{\kern0pt
    \setlength\abovedisplayshortskip{0pt}%
    \setlength\belowdisplayshortskip{0pt}%
    \setlength\abovedisplayskip{0pt}%
    \setlength\belowdisplayskip{0pt}%
    \begin{equation}\label{#2}\end{equation}\kern0pt
}
\renewenvironment{quote}[1][]
   {\def\@rgi{#1}\ifx\@rgi\@empty
    \let\rghtm\@empty\else\def\rghtm{\rightmargin\leftmargin}\fi
    \list{}{\rghtm} %{\rightmargin\leftmargin}%
    \item\relax}
   {\endlist}
\renewcommand*\descriptionlabel[1]{\hspace\labelsep
    \normalfont #1}
\setcounter{secnumdepth}{4}
\setcounter{tocdepth}{5}
\renewcommand*{\theparagraph}{\texorpdfstring{\protect\P\protect\ }{\textparagraph}}
\renewcommand{\paragraph}
    {\renewcommand{\@seccntformat}[1]{\theparagraph}%
    \@startsection{paragraph}{4}{0pt}{6pt}{-3pt}{\bfseries}} %\color{\aeb@subsubsectioncolor}
\renewcommand*\l@paragraph{\@dottedtocline{4}{5.0em}{1em}} %{7.0em}{4.1em}}
\def\chgCurrLblName#1{\def\@currentlabelname{#1}}
\def\echgCurrLblName#1{\edef\@currentlabelname{#1}}
\makeatother

\reversemarginpar
\def\FmtMP#1{\marginpar{\slshape\raggedleft\small#1}}


\newcommand{\YT}{\textsf{YouTube}}


%\def\tutpath{doc/tutorial}
%\def\tutpathi{tutorial}

\DeclareDocInfo
{
    university={\AcroTeX.Net},
    title={The \texorpdfstring{\textsf{ltx4yt} Package\\[1em]}{: }
        Playing \texorpdfstring{\YT}{YouTube} Videos in the default browser},
    author={D. P. Story},
    email={dpstory@acrotex.net},
    subject={Playing YouTube Videos in PDF},
    talksite={\url{www.acrotex.net}},
    version={1.0, 2021/06/08},
    keywords={AcroTeX, PDF, YouTube, Browser},
    copyrightStatus=True,
    copyrightNotice={Copyright (C) \the\year, D. P. Story},
    copyrightInfoURL={http://www.acrotex.net}
}

\def\dps{$\hbox{$\mathfrak D$\kern-.3em\hbox{$\mathfrak P$}%
   \kern-.6em \hbox{$\mathcal S$}}$}

\universityLayout{fontsize=Large}
\titleLayout{fontsize=LARGE}
\authorLayout{fontsize=Large}
\tocLayout{fontsize=Large,color=aeb}
\sectionLayout{indent=-40pt,fontsize=large,color=aeb} %,afterskip=1sp}
\subsectionLayout{indent=-20pt,color=aeb} %,afterskip=1sp}
\subsubsectionLayout{indent=0pt,color=aeb} %,afterskip=1sp}
\subsubDefaultDing{\texorpdfstring{$\bullet$}{\textrm\textbullet}}

\newenvironment{eqComments}[1][\strut]{\smallskip\leftskip-\labelwidth
\item[]\textbf{\textcolor{blue}{#1}}}{\par\smallskip}

\begin{popupmenu}{YTSea}
  \puIdTitle{J\"{u}rgen's favorite song*}{mLDF5MBMWHE}
  \puIdTitle{\Esc"Sea Hunt\Esc" US TV series {(1958-61)} lead-in}{Lz0aMoWh8Q4}
  \puIdTitle{Theme Song to Sea Hunt*}{2QxXk6X9GDo}
  \puIdTitle{Learn \cs{LaTeX} in one video}{VhmkLrOjLsw}
\end{popupmenu}
\ytUseMenus{YTSea}

%\pagestyle{empty}
%\parindent0pt\parskip\medskipamount

\chngDocObjectTo{\newDO}{doc}
\begin{docassembly}
var titleOfManual="The ltx4yt MANUAL";
var manualfilename="Manual_BG_Print_ltx4yt.pdf";
var manualtemplate="Manual_BG_Brown.pdf"; // Blue, Green, Brown
var _pathToBlank="C:/Users/Public/Documents/ManualBGs/"+manualtemplate;
var doc;
var buildIt=false;
if ( buildIt ) {
    console.println("Creating new " + manualfilename + " file.");
    doc = \appopenDoc({cPath: _pathToBlank, bHidden: true});
    var _path=this.path;
    var pos=_path.lastIndexOf("/");
    _path=_path.substring(0,pos)+"/"+manualfilename;
    \docSaveAs\newDO ({ cPath: _path });
    doc.closeDoc();
    doc = \appopenDoc({cPath: manualfilename, oDoc:this, bHidden: true});
    f=doc.getField("ManualTitle");
    f.value=titleOfManual;
    doc.flattenPages();
    \docSaveAs\newDO({ cPath: manualfilename });
    doc.closeDoc();
} else {
    console.println("Using the current "+manualfilename+" file.");
}
var _path=this.path;
var pos=_path.lastIndexOf("/");
_path=_path.substring(0,pos)+"/"+manualfilename;
\addWatermarkFromFile({
    bOnTop:false,
    bOnPrint:false,
    cDIPath:_path
});
\executeSave();
\end{docassembly}

\begin{document}

\maketitle

\selectColors{linkColor=black}
\tableofcontents
\selectColors{linkColor=webgreen}

\section{Introduction}\label{s:intro}

My beautiful package \pkg{yt4pdf} is gone, time has caught up with it: The
Flash player is no longer in use, anywhere;\footnote{Adobe will formally
abandon Flash Player in December 2020} \app{Google} discontinued its
ActionScript 3.0 Player several years ago. It was \app{Acrobat} and
\app{Google} technologies that were the foundation of the \pkg{yt4pdf}
package.

We turn over a new leaf by writing and publishing the \pkg{ltx4yt} package:
{\LaTeX} for \YT. What \pkg{ltx4yt} does is to provide some tools for
creating links, dropdown lists, popup menus for playing selected {\YT}
videos in the default browser. Perfect for personal use and for academic,
professional, or classroom presentations that refer to {\YT} content.

% I believe that I was vaguely aware of the \href{http://code.google.com/apis/youtube/flash_api_reference.html}
%{{\YT} ActionScript 3.0 Player},\footnote{The YouTube AcrionScript 2.0 Player API
% has been deprecated as of January 27, 2015; however, it is still supported, for now.} but never pursued it because of my
%general lack of interest in {\YT} (\url{www.youtube.com}). Recently, I
%came across a very nice demo PDF that used the API, see
%%\mlhref{http://www.uvsar.com/pdftube/}{PDF Tube - {\YT} API wrapper for PDF documents}.
%``PDF Tube - {\YT} API wrapper for PDF documents'' (the page has
%since been removed).
%The SWF file and JavaScript are made freely available, so I
%downloaded it, and was sufficiently impressed to port the example to
%{\LaTeX} using various members of the {Acro\negthinspace\TeX} Fine Family of Software
%\verb!:-{)!. The SWF file and JavaScript are due to the good folks at
%\textbf{UVSAR} (\url{www.uvsar.com}). The \textbf{UVSAR}'s sample demo also appeared in the forums of
%the \href{http://acrobatusers.com/forum/javascript/embed-youtube-video-pdf}{Acrobat User
%Community}.

%The \textsf{ltx4yt} package uses the \textsf{rmannot} to embed the \textsf{SWF}
%file that plays the {\YT} videos.  There is a complete set of buttons
%that come with the package to control the video: play, pause, stop
%loading, rewind, load a video by its {\YT} video ID, and a button to
%view a video on the {\YT} web site.\footnote{Some videos do not allow
%embedded playback, and must be viewed on the {\YT} web site.}

% http://acrobatusers.com/news/youtube-widget-acrobat

\subsection{Sample files}

The following are the sample files shipped with \textsf{ltx4yt}:
\begin{itemize}
    \item \texttt{ltx4yt-1.tex} demonstrates links created by \cs{ytvId}
        and \cs{ytLink}. Such links created in a PDF are pretty much
        functional for all PDF viewers, including the native PDF viewers of
        all the modern browsers, and PDF viewers on other devices such as
        \app{Android} and \app{iPhones}.

    \item \texttt{ltx4yt-2.tex} demonstrates the PDF forms controls related
        methods of selecting a video to watch. The command pair
        \cs{ytComboList} and \cs{ytComboBtn} provide support for creating a
        dropdown list (combo box) for selecting a video by title, the push
        button takes the selection and passes it to {\YT} for display
        in the default browser. The sample also includes a popup menu for
        selecting video by title. Finally, there is a query field in enter
        query text and to search {\YT} for all related titles.

        This file (\texttt{ltx4yt-2.pdf}) performs as designed in
        \app{Acrobat}, \app{Adobe Reader DC}, and \app{PDFX-Change Editor},
        and \emph{will not} be functional in native PDF viewers of
        browsers. \texttt{ltx4yt-2.pdf} will have no functionality in PDF
        viewers on hand-held devices such as smart phones or tablets.
\end{itemize}
% Advanced examples \href{http://www.math.uakron.edu/~dpstory/aebblog.html}{AeB Blog site}.

\section{Options, Requirements, and Workflows}

\paragraph*{Options.} Currently, this package has two options: \opt{usepopup}\FmtMP{\opt{usepopup}
option} and \opt{!usepopup}. When \opt{usepopup} is taken, additional
commands are defined and supporting document Java\-Script is embedded in the
PDF. See \hyperref[upu]{Section~\ref*{upu}} on page~\pageref*{upu} for details on using popups in the document. The
\opt{!usepopup} is a convenience option that turns off the \opt{usepopup}
option. The default is to not use popups in the document (\opt{!usepopup}).

\paragraph*{Requirements.}
This package requires the \pkg{eforms} package, which is part of \pkg{acrotex}.\footnote{\url{http://www.ctan/pkg/acrotex}}
If the option \opt{usepopup}, the package \opt{popupmenu} is also input.\footnote{\url{http://www.ctan/pkg/popupmenu}}

\paragraph*{Workflows.} This is a general {\LaTeX} package, any workflows can be used to build
a \pkg{ltx4yt} document: \app{pdflatex}, \app{lualatex}, \app{xelatex}, or
\app{dvips\,->\,distiller}.\footnote {\app{dvips\,->\,ps2pdf} can be used if
only links are used to reference {\YT} videos and the \opt{!usepopup} option
is in force (no document JavaScript).}

\section{Basic Methods: Playing a {\YT} video using its Video ID}

There are three methods of playing a {\YT} video based on its video ID:
\begin{itemize}
    \item \textbf{Using links}
    \item \textbf{Using dropdown lists}
    \item \textbf{Using a popup menu}
\end{itemize}
In each of the subsequent sections, we discuss each of these methods in turn.

\subsection{Basic Methods: Links with \tops{\protect\cs}{\textbackslash}{ytvId}}

\textbf{Demo files.} The techniques of this section are illustrated by the two files
\texttt{examples/\allowbreak ltx4yt-1.tex} and \texttt{examples/web-pkg/ltx4yt-w1.tex}.

\newtopic\noindent
The underlying command that creates links is the \pkg{eforms} command \cs{setLink},
this command is not seen, but is part of all link commands in this section.

To create a link that references a {\YT} video from its video ID, use the \cs{ytvId} command.
\bVerb\takeMeasure{\string\ytvId*[\ameta{KV-pairs}]\darg{\ameta{ytvID}}\darg{\ameta{text}}}%
\begin{minipage}{\linewidth}
\begin{minipage}{\bxSize}
\xdef\panelWidth{\the\linewidth}% *[\ameta{opts}]\darg{\ameta{ytvID}}\darg{\ameta{text}}
\begin{Verbatim}[frame=single,commandchars=!(),rulecolor=\color{red}]
\ytvId*[!ameta(KV-pairs)]{!ameta(ytvID)}{!ameta(text)}
\ytvIdPresets{!ameta(KV-pairs)}
\end{Verbatim}
\end{minipage}\hfill
\begin{minipage}{\linewidth-\panelWidth}
\setDisplayNumber\label{display:ytvId}
\end{minipage}\end{minipage}\endgroup
\PD Use the optional asterisk (\texttt*) when the referenced video
\emph{cannot be embedded}; \emph{not specifying} the asterisk means the video
\emph{can be embedded}. \textbf{Embedding is the best way of viewing a video.} The \ameta{KV-pairs} are key-value pairs recognized by the
underlying \cs{setLinks} command. The \ameta{ytvID} is the {\YT} video ID of
the video to be played in the default browser. Finally, \ameta{text} is the
text around of which the link is constructed.

\paragraph*{The \cs{ytvIdPresets} command}
is a convenient way of setting the link options \emph{uniformly} for all
links created by \cs{ytvId}. Individual \ameta{KV-pairs} passed though the
optional argument of \cs{ytvId} will override the preset values. Its default
definition is,
\begin{Verbatim}[xleftmargin=\amtIndent]
\ytvIdPresets{\linktxtcolor{webbrown}}
\end{Verbatim}
This sets the color of the link to a brown color, which is why the links of
this document are brown.

\paragraph*{An example.} There are two ``Kung-Fu Fighting'' videos of interest: \texttt{GZ9e3Dy7obA} and
\texttt{jhUkGIsKvn0}; we set up likes for the first and twice for the second:
\begin{quote}
    \ytvId*{GZ9e3Dy7obA}{Kung-Fu Fighting (Bruce Lee)}\\
    \verb~\ytvId*{GZ9e3Dy7obA}{Kung-Fu Fighting (Bruce Lee)}~\\[3pt]
    \ytvId{jhUkGIsKvn0}{Kung-Fu Fighting (Carl Douglas)}\\
    \verb~\ytvId{jhUkGIsKvn0}{Kung-Fu Fighting (Carl Douglas)}~\\[3pt]
    \ytvId*{jhUkGIsKvn0}{Kung-Fu Fighting* (Carl Douglas)}\\
    \verb~\ytvId*{jhUkGIsKvn0}{Kung-Fu Fighting* (Carl Douglas)}~
\end{quote}
The first link works fine, just the video and nothing else. The second one
does not, the video poster is loaded, but when you play the video, the
response is \textsf{Video unavailable}. The third link works fine now. The
problem here is that the second video cannot be embedded; we have to use the
\texttt*-option to create a different link, one that goes to the full {\YT}
web site to see one or more advertisements before the video is allowed to be
played, additionally, there are numerous extraneous content everywhere on the
page. When a video \emph{can be embedded}, you get a very clean video
experience, free of advertisements and extraneous content; \emph{this is the
best case}. Try using the first link again to enjoy the experience.

There is a multi-line version of \cs{ytvId},
\bVerb\takeMeasure{\string\ytvIdML*[\ameta{KV-pairs}]\darg{\ameta{ytvID}}\darg{\ameta{text}}}%
\begin{minipage}{\linewidth}
\begin{minipage}{\bxSize}
\xdef\panelWidth{\the\linewidth}% *[\ameta{opts}]\darg{\ameta{ytvID}}\darg{\ameta{text}}
\begin{Verbatim}[frame=single,commandchars=!(),rulecolor=\color{red}]
\ytvIdML*[!ameta(KV-pairs)]{!ameta(ytvID)}{!ameta(text)}
\ytvIdPresets{!ameta(KV-pairs)}
\end{Verbatim}
\end{minipage}\hfill
\begin{minipage}{\linewidth-\panelWidth}
\setDisplayNumber\label{display:ytvIdML}
\end{minipage}\end{minipage}\eVerb This form, which requires \pkg{aeb\_mlink} package and the
\app{dvips\,->distiller}, creates true multi-line links. Here is an example:
\ytvIdML{5y9-EVmreU4}{Lori's Corner: Episode \#1, I met her back in the year
2000, though she probably does not remember.} The applications
\app{pdflatex}, \app{lualatex}, and \app{xelatex} will break this link cross
lines, but does so by creating two links. This link is a single link that
inverts across both lines when clicked. \cs{ytvIdML} uses the same presets
command \cs{ytIdPresets}.

\subsubsection{How to get the {\YT} video ID}

Go to the {\YT} web site and search for a video of interest. Once found, play, then pause
the video. Go the browser's URL address bar and you'll see something like this:
\begin{equation*}
  \texttt{https://www.youtube.com/watch?v=$\underset{\text{ytvId}}{\underbrace{\texttt{dAgfnK528RA}}}$}
\end{equation*}
Copy the ytvId into the first argument of \cs{ytvId} and supply a title: %https://youtu.be/dAgfnK528RA
\begin{quote}
  \ytvId{dAgfnK528RA}{Math Antics - Order of Operations}\\
  \verb~\ytvId{dAgfnK528RA}{Math Antics - Order of Operations}~
\end{quote}
Cool! You can also get the video ID by right clicking on the paused video and
exploring the context menu presented.

\subsubsection{Can the video be embedded?}

I've done a little research on this question, the answer is that there is no
way of knowing in advance. You need to test each link. In the case of video
ID \texttt{dAgfnK528RA}, we found it, we created the link with \cs{ytvId},
we tested it, and it worked! Had it not worked (the dreaded \textsf{Video
unavailable} appears when you try to play the video), we simply use the
\texttt*-option. It's just that simple.

\subsection{Basic Methods: dropdown list}

\textbf{Demo files.} The techniques of this section are illustrated by the two files
\texttt{examples/\allowbreak ltx4yt-2.tex} and \texttt{examples/web-pkg/ltx4yt-w2.tex}.

\newtopic\noindent A dropdown list, a combobox in Adobe's original terminology, is an Adobe form field
that drops down to display a list of menu items. It takes up less page space,
and may be a good choice rather than listing a number of links on the page.

\paragraph*{To create a dropdown list}

\begin{enumerate}
\item
\textbf{Create a play list.} At any point prior to the dropdown list, declare your play list:
\bVerb\takeMeasure{\quad\string\ytIdTitle\darg{\ameta{title\SUB{n}}}\darg{\ameta{ytvId\SUB{n}}}}%
\begin{minipage}{\bxSize}
\begin{Verbatim}[frame=single,commandchars=!(),rulecolor=\color{red}]
\declarePlayList{!ameta(\plCmd)}{%
!quad\ytIdTitle{!ameta(title!SUB1)}{!ameta(ytvId!SUB1)}
!quad...
!quad\ytIdTitle{!ameta(title!SUB(n))}{!ameta(ytvId!SUB(n))}
}
\end{Verbatim}
\end{minipage}\eVerb If the video referenced by \ameta{ytvId} \emph{cannot be
embedded}, then place an \FmtMP{use \texttt* in title}\texttt* in the
\ameta{title} as a single to the underlying JavaScript that the video cannot
be embedded.

\item \textbf{Set the initial value and playlist} At any point prior to the dropdown list, set the require
dropdown list information:
\bVerb\takeMeasure{\string\ytPlayList\darg{\ameta{ytvId}}\darg{\ameta{\string\plCmd}}}%\plCmd
\begin{minipage}{\bxSize}
\begin{Verbatim}[frame=single,commandchars=!(),rulecolor=\color{red}]
\ytPlayList{!ameta(ytvId)}{!ameta(\plCmd)}
\end{Verbatim}
\end{minipage}\eVerb
where \ameta{ytvId} is the video ID of the title initially displayed in the
dropdown list, and \ameta{\string\plCmd} is a command defined earlier in a
\cs{declarePlayList} command.

\item \textbf{Place the dropdown list and accompanying \textsf{Play} button.}
\bVerb\takeMeasure{\string\ytComboList[\ameta{KV-pairs}]\darg{\ameta{name}}\darg{\ameta{wd}}\darg{\ameta{ht}}}%\plCmd
\begin{minipage}{\bxSize}
\begin{Verbatim}[frame=single,commandchars=!(),rulecolor=\color{red}]
\ytComboList[!ameta(KV-pairs)]{!ameta(name)}{!ameta(wd)}{!ameta(ht)}
\ytComboBtn[!ameta(KV-pairs)]{!ameta(name)}{!ameta(wd)}{!ameta(ht)}
\end{Verbatim}
\end{minipage}\eVerb where \ameta{name} is a text string of ASCII letters and numbers. The \ameta{name} is appended
on to the field names of these two field; The pair \cs{ytComboList} and
\cs{ytComboBtn} must be passed the same \ameta{name} value. The common
\ameta{name} ties them together.
\end{enumerate}
Below is an abbreviated example, more extensive examples are found in the demo files sited at the beginning of this section.

\declarePlayList{\playList}{% note: put parentheses within braces
  \ytIdTitle{Kung-Fu Fighting* {(Bruce Lee)}}{GZ9e3Dy7obA}
  \ytIdTitle{Kung-Fu Fighting {(Carl Douglas)}}{jhUkGIsKvn0}
  \ytIdTitle{J\"{u}rgen's "favorite" song*}{mLDF5MBMWHE}
  \ytIdTitle{Learn \cs{LaTeX} in one video}{VhmkLrOjLsw}
}
\ytPlayList{GZ9e3Dy7obA}{\playList}

\paragraph*{Example} A four-item dropdown list: \ytComboList{YT1}{144bp}{11bp}\olBdry\ytComboBtn{YT1}{33bp}{11bp}

\newtopic\noindent The verbatim listing is,\bVerb
\def\1{\llap{\rlap{\ding{182}}\hskip\amtIndent\relax}}\relax
\def\2{\llap{\rlap{\ding{183}}\hskip\amtIndent\relax}}\relax
\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars={!~@}]
\declarePlayList{\playList}{% note: put parentheses within braces
!quad\ytIdTitle{Kung-Fu Fighting* {(Bruce Lee)}}{GZ9e3Dy7obA}
!quad\ytIdTitle{Kung-Fu Fighting {(Carl Douglas)}}{jhUkGIsKvn0}
!1!quad\ytIdTitle{J\"{u}rgen's "favorite" song*}{mLDF5MBMWHE}
!2!quad\ytIdTitle{Learn \cs{LaTeX} in one video}{VhmkLrOjLsw}
}
\ytPlayList{GZ9e3Dy7obA}{\playList}
\paragraph*{Example} A two-item dropdown list:
  \ytComboList{YT1}{144bp}{11bp}\olBdry\ytComboBtn{YT1}{33bp}{11bp}
\end{Verbatim}
\endgroup\noindent There are a several observations to make in this markup: line~\ding{182}
uses standard {\LaTeX} markup to describe the u-umlaut, the double quote
requires no special attention; line~\ding{183} the backslash can be expressed
as \cs{cs\darg{\ameta{text}}}. Also note that two of the titles have an
\texttt* in them, this signals that these videos cannot be embedded.

\subsection{Basic Methods: popup menus}\label{upu}

\textbf{Demo files.} The techniques of this section are illustrated by the two files
\texttt{examples/\allowbreak ltx4yt-2.tex} and \texttt{examples/web-pkg/ltx4yt-w2.tex}.

\newtopic\noindent A pop-up menu is a menu list that appears on top of the content of the page, it is generated
by the JavaScript method \texttt{app.popUpMenuEx()}. The advantage of this
method is that it take up no space on the page, it is displayed on top of the
page and is dismissed when an item from the menu list is chosen.

\goodbreak
\newtopic\noindent\textbf{To create a pop-up menu}
\begin{enumerate}
    \item \textbf{Build a menu listing.} Use the \env{popupmenu} environment of
        the \pkg{popumemnu} package to build/design your menu.
\bVerb\takeMeasure{\string\begin\darg{submenu}\darg{title=\ameta{submenu-name\SUB{1}}}}%
\begin{minipage}{\bxSize}
\begin{Verbatim}[frame=single,commandchars=!(),rulecolor=\color{red}]
\begin{popupmenu}{!ameta(menu-name)}
\puIdTitle{!ameta(title!SUB1)}{!ameta(ytvId!SUB1)}
...
\puIdTitle{!ameta(title!SUB(m))}{!ameta(ytvId!SUB(m))}
\begin{submenu}{title=!ameta(submenu-name!SUB1)}
!quad\puIdTitle{!ameta(title!SUB(m+1))}{!ameta(ytvId!SUB(m+1))}
!quad..
!quad\puIdTitle{!ameta(title!SUB(m+n))}{!ameta(ytvId!SUB(m+n))}
\end{submenu}
...
\end{popupmenu}
\end{Verbatim}
\end{minipage}\eVerb
You need not have a \env{submenu} structure, but \env{submenu}s are useful for organizing the links.
The first argument of \cs{puIdTitle} is passed through \cs{pdfstringdef}, this enables you to use
{\LaTeX} markups for accents, for example. If the second argument (\ameta{ytvId}) is empty, then
that entry has no action associated with it, and can be used as a menu heading.

\item \textbf{Create the menu data.} Following all \env{popupmenu}
    environments, yet still in the preamble\FmtMP{preamble},  insert the
    following command:
\bVerb\takeMeasure{\string\ytUseMenus\darg{\ameta{menu-name\SUB{1}},...,\ameta{menu-name\SUB{k}}}}%
\begin{minipage}{\bxSize}
\begin{Verbatim}[frame=single,commandchars=!(),rulecolor=\color{red}]
\ytUseMenus{!ameta(menu-name!SUB1),...,!ameta(menu-name!SUB(k))}
...
!color(gray)\begin{document}
\end{Verbatim}
\end{minipage}\eVerb The argument of \cs{ytUseMenus} is a comma-delimited list
of \ameta{menu-name}s declared as the first argument of \env{popupmenu}
environments.

\item \textbf{Place the \cs{ytPopupBtn} command.}
\bVerb\takeMeasure{\string\ytPopupBtn[\ameta{KV-pairs}]\darg{\ameta{menu-name}\darg{\ameta{wd}}\darg{\ameta{ht}}}}%
\begin{minipage}{\bxSize}
\begin{Verbatim}[frame=single,commandchars=!(),rulecolor=\color{red}]
\ytPopupPresets{!ameta(KV-pairs)}
\ytPopupBtn[!ameta(KV-pairs)]{!ameta(menu-name)}{!ameta(wd)}{!ameta(ht)}
\end{Verbatim}
\end{minipage}\eVerb Employ \cs{ytPopupPresets} as a way to pass \ameta{KV-pairs} to all
\cs{ytPopupBtn} commands in the document. For an individual \cs{ytPopupBtn}
command, its \ameta{KV-pairs} argument passes key-values to that
\cs{ytPopupBtn}, these \ameta{KV-pairs} will override the ones of
\cs{ytPopupPresets}. The second argument, \ameta{menu-name}, is name of the
pop-up menu data you want to use. This menu data is created earlier in the
preamble by the \env{popumenu} environment and referenced again in the argument
of \cs{ytUseMenus}.
\end{enumerate}

\paragraph*{Example.} \ytPopupBtn[\CA{Sea Hunt}]{YTSea}{20bp}{5bp}
Let's create a short pop-up menu, more extensive examples are found
in \texttt{examples/\allowbreak ltx4yt-2.tex} and \texttt{examples/web-pkg/ltx4yt-w2.tex}.
\bVerb\def\1{\llap{\rlap{\ding{182}}\hskip\amtIndent\relax}}\relax
\def\2{\llap{\rlap{\ding{183}}\hskip\amtIndent\relax}}\relax
\def\3{\llap{\rlap{\ding{184}}\hskip\amtIndent\relax}}\relax
\def\4{\llap{\rlap{\ding{185}}\hskip\amtIndent\relax}}\relax
\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars={!~@}]
\begin{popupmenu}{YTSea}
!1!quad\puIdTitle{J\"{u}rgen's favorite song*}{mLDF5MBMWHE}
!2!quad\puIdTitle{\Esc"Sea Hunt\Esc"
!qquad~US TV series {(1958-61)} lead-in}{Lz0aMoWh8Q4}@
!quad\puIdTitle{Theme Song to Sea Hunt*}{2QxXk6X9GDo}
!3!quad\puIdTitle{Learn \cs{LaTeX} in one video}{VhmkLrOjLsw}
\end{popupmenu}
!4\ytUseMenus{YTSea}
...
\begin{document}
...
...
\paragraph*{Example.}
\ytPopupBtn[\CA{Sea Hunt}]{YTSea}{20bp}{5bp} Let's ...
\end{Verbatim}
\eVerb The first argument of \cs{puIdTitle} is passed through
\cs{pdfstringdef}, this enables you to use {\LaTeX} markup on accents, as in
\ding{182}. In line \ding{183}, a special locally defined command \cs{Esc} is
used to ``escape'' the double quotes so that we \verb~\"~ to appear in the
document JavaScript, which is where the menu items appear within the PDF. In
line~\ding{184} a special locally defined command \cs{cs} is used to create a
backslash, in a manner similar to {\LaTeX} markup. Note the presence of the
\FmtMP{\texttt{*} noted}\texttt{*} in the title of two of the menu items;
this is used to signal to the underlying JavaScript that the title cannot be
embedded. Finally, we the \env{popupmenu} environment, we declare, in line~\ding{185},
that we are using the menu named \texttt{YTSea}.

\newlength\ytlength

\section{Advanced Methods: Playing video with \tops{\protect\cs}{\textbackslash}{ytLink}}

The link earlier discussed is \cs{ytvId}, which takes as its first argument
the video ID of the targeted video. It then constructs a URL one way or
another, depending on the presence of the \texttt*-option. This method is
pretty rigid, one size fits all, if you will. A more flexible method of
constructing links is to use the \cs{ytLink} command.
\bVerb\takeMeasure{\string\ytLink\darg{\string\embedId\darg{\ameta{ytvId}}\string\params\darg{\ameta{params}}\darg{\ameta{text}}}}%
\setlength\ytlength{\bxSize}%
\def\1{\rlap{\hskip\ytlength\relax\ding{182}}}%
\def\2{\rlap{\hskip\ytlength\relax\ding{183}}}%
\def\3{\rlap{\hskip\ytlength\relax\ding{184}}}%
\def\4{\rlap{\hskip\ytlength\relax\ding{185}}}%
\def\5{\rlap{\hskip\ytlength\relax\ding{186}}}%
\def\6{\rlap{\hskip\ytlength\relax\ding{187}}}%
\def\7{\rlap{\hskip\ytlength\relax\llap{\sffamily(presets for \cs{ytvId})\hskip2\fboxsep\hskip2\fboxrule}}}%
\begin{minipage}{\bxSize}
\begin{Verbatim}[frame=single,commandchars=!(),rulecolor=\color{red}]
!1\ytLink{\embedId{!ameta(ytvId)}\params{!ameta(params)}}{!ameta(text)}
!2\ytLink{\watchId{!ameta(ytvId)}\params{!ameta(params)}}{!ameta(text)}
!3\ytLink{\embed{!ameta(spec)}}{!ameta(text)}
!4\ytLink{!ameta(spec)}{!ameta(text)}
!5\ytLink{\channel{!ameta(name)}}{!ameta(text)}
!5\ytLink{\user{!ameta(name)}}{!ameta(text)}
!6\ytLink{\search{!ameta(search-string)}}{!ameta(text)}
!7\ytvIdPresets{!ameta(KV-pairs)}
\end{Verbatim}
\end{minipage}\eVerb Each of these has an optional first argument \ameta{KV-pairs} that is not shown above.
Let's take a look at each of these in turn and illustrate with examples. Yes,
{\YT} has a number of parameter is recognizes in its urls, see
\href{https://developers.google.com/youtube/player_parameters#Parameters}{here}
for a discussion.
\begin{enumerate}
  \item[\ding{182}] Use this form \emph{when you can embed} a video
      \ameta{ytvId} with additional parameters. (this best type of video).
      The \cs{params} argument \emph{must follow} the \cs{embedId}, its
      arguments are any parameters you want to append to the URL. The use
      of \cs{params} is optional; however, without \cs{params} you
      should use \verb|\ytvId*{|\ameta{ytvID}\verb|}{|\ameta{text}\verb|}|.
      For example, we auto play a video with modest branding:\\[3pt]
     \ytLink{\embedId{5y9-EVmreU4}\params{autoplay=1&modestbranding=1}}{Lori's Corner: Episode \#1}\\\small
     \verb!\ytLink{\embedId{5y9-EVmreU4}!\\
     \null\qquad\verb!\params{autoplay=1&modestbranding=1}}{Lori's Corner: Episode \#1}!

     The demo file \texttt{ltx4yt-1.tex} contains an example of this type
     of link that sets up a small play list of three videos.

  \item[\ding{183}]  Use this form \emph{when you \emph{cannot} embed} (or
      you want to play the video on the main {\YT} site) \ameta{ytvId} with
      additional parameters. The \cs{params} argument must follow the
      \cs{watchId}, its argument are any parameters you want to append to
      the URL. The use of \cs{params} is optional; however, without the
      \cs{params} you may as well use
      \verb|\ytvId*{|\ameta{ytvID}\verb|}{|\ameta{text}\verb|}|.
    \\[3pt]
    \ytLink{\watchId{5y9-EVmreU4}\params{autoplay=1}}{Lori's Corner: Episode \#1}\\
    \verb!\ytLink{\watchId{5y9-EVmreU4}!\\
    \null\qquad\verb!\params{autoplay=1}}{Lori's Corner: Episode \#1}!

  \item[\ding{184}] A more general form that allows you to formulate general URLs. For example, we display
    a play list for Adobe Acrobat Pro training:\goodbreak
    \ytLink{\embed{listType=playlist&list=PL_dhPga7ruudhQiL-dqVhGcCqDpH1KqR_}}{Adobe Acrobat Pro Training}\\
    \verb!\ytLink{\embed{%!\\
    \null\qquad\verb!listType=playlist&list=PL_dhPga7ruudhQiL-dqVhGcCqDpH1KqR_}}!\\
    \null\qquad\verb!{Adobe Acrobat Pro Training}!\\[3pt]
  Look for the playlist control in the upper right corner of the window.
  \item[\ding{185}] The most general form, \ameta{spec} is simply appended, ie,
  \texttt{https://www.youtube.com/\ameta{spec}}\\[3pt]
  \ytLink{embed?listType=playlist&list=PL01A18BBA5912B01F}{{\LaTeX} Tutorial}\\
  \verb|\ytLink{embed?listType=playlist&list=PL01A18BBA5912B01F}|\\
  \null\qquad\verb|{{\LaTeX} Tutorial}|\\[3pt]
  Look for the playlist control in the upper right corner of the window.
  \item[\ding{186}] There are a couple of URLs for displaying a channel on \YT, at least there are a couple
  that I have discovered.
  Use this form to see channel of a particular contributor to {\YT}. For example,\\[3pt]
  \ytLink{\channel{rocketjump}}{The RocketJump Channel}\\
  \verb|\ytLink{\channel{rocketjump}}{The RocketJump Channel}|\\[3pt]
  \ytLink{\user{freddiew}}{Freddie Diew's Channel}\\
  \verb|\ytLink{\user{freddiew}}{Freddie Diew's channel}|

  To get the true \ameta{name} of a channel, go to {\YT} and search for that channel. For example,
  search for \textsf{RocketJump}. On the resulting page, click on a RocketJump link and look at the
  location bar in the browser to see the path, it may come up \texttt{c/rocketjump} or \texttt{user/freddiew}.

\item[\ding{187}] In the previous version of this package, the syntax for
    making a {\YT} search was presented as,
  \[
    \verb!\ytLink{\embed{listType=search&list=Adobe Acrobat DC}}!
  \]
  However, according to the
  \href{https://developers.google.com/youtube/player_parameters}{Google
  developers web site} the \texttt{listType=search} key-value is no longer
  supported as of Nov.\ 15, 2020. Use the \cs{search} key to make this same search,
  \begin{align*}
    &\text{\ytLink{\search{Adobe Acrobat DC}}{Adobe Acrobat DC}}\\&
    \cs{ytLink\darg{\cs{search}\darg{Adobe Acrobat DC}}\darg{Search for Adobe Acrobat DC}}
  \end{align*}
  The above link expands to the URL
  \[
  \texttt{https://www.youtube.com/results?search\_query=Adobe Acrobat DC}
  \]
  Once on the {\YT} web site, there are controls to further filter the
  search.


\end{enumerate}

\newtopic\noindent There is a multi-line version of \cs{ytLink}.
\bVerb\takeMeasure{\string\ytLinkML*[\ameta{KV-pairs}]\darg{\ameta{spec}}\darg{\ameta{text}}}%
\begin{minipage}{\linewidth}
\begin{minipage}{\bxSize}
\xdef\panelWidth{\the\linewidth}% *[\ameta{opts}]\darg{\ameta{ytvID}}\darg{\ameta{text}}
\begin{Verbatim}[frame=single,commandchars=!(),rulecolor=\color{red}]
\ytLinkML*[!ameta(KV-pairs)]{!ameta(spec)}{!ameta(text)}
\ytvIdPresets{!ameta(KV-pairs)}
\end{Verbatim}
\end{minipage}\hfill
\begin{minipage}{\linewidth-\panelWidth}
\setDisplayNumber\label{display:ytLinkML}
\end{minipage}\end{minipage}\eVerb This form, which requires \pkg{aeb\_mlink} package and the
\app{dvips\,->distiller}, creates true multi-line links. \cs{ytLinkML} has the same variations
of \cs{ytLink} (lines \ding{182}--\ding{186}) described earlier

\section{Searching {\YT}} %\previewOn

Want to interactively search {\YT} for your favorate video? Search using the commands \cs{ytInputQuery}
and \cs{ytSearch}:
\bVerb\takeMeasure{\string\ytInputQuery[\ameta{KV-pairs}]\darg{\ameta{wd}}\darg{\ameta{ht}}}%
\begin{minipage}{\linewidth}
\begin{minipage}{\bxSize}
\begin{Verbatim}[frame=single,commandchars=!(),rulecolor=\color{red}]
\ytInputQuery[!ameta(KV-pairs)]{!ameta(wd)}{!ameta(ht)}
\ytSearch[!ameta(KV-pairs)]{!ameta(wd)}{!ameta(ht)}
\ytClearQuery[!ameta(KV-pairs)]{!ameta(wd)}{!ameta(ht)}
\end{Verbatim}
\end{minipage}
\quad\ytInputQuery{1.5in}{11bp}\olBdry
\ytSearch{}{11bp}\olBdry
\ytClearQuery{}{11bp}
\end{minipage}
\eVerb \cs{ytInputQuery} is an input box to enter query text; \cs{ytSearch} is a push button that searchs
{\YT} for the text entered into \cs{ytInputQuery}; and finally, \cs{ytClear} clears \cs{ytInputQuery}.


\newtopic\noindent
That's all for now, I simply must get back to my retirement. {\dps}

\end{document}
