diff options
Diffstat (limited to 'macros/luatex/optex/pdfextra/examples')
-rw-r--r-- | macros/luatex/optex/pdfextra/examples/pdfextra-example-part.prc | bin | 0 -> 58592 bytes | |||
-rw-r--r-- | macros/luatex/optex/pdfextra/examples/pdfextra-example.pdf | bin | 0 -> 385845 bytes | |||
-rw-r--r-- | macros/luatex/optex/pdfextra/examples/pdfextra-example.tex | 341 |
3 files changed, 341 insertions, 0 deletions
diff --git a/macros/luatex/optex/pdfextra/examples/pdfextra-example-part.prc b/macros/luatex/optex/pdfextra/examples/pdfextra-example-part.prc Binary files differnew file mode 100644 index 0000000000..812479dcbb --- /dev/null +++ b/macros/luatex/optex/pdfextra/examples/pdfextra-example-part.prc diff --git a/macros/luatex/optex/pdfextra/examples/pdfextra-example.pdf b/macros/luatex/optex/pdfextra/examples/pdfextra-example.pdf Binary files differnew file mode 100644 index 0000000000..abb2e9c4c5 --- /dev/null +++ b/macros/luatex/optex/pdfextra/examples/pdfextra-example.pdf diff --git a/macros/luatex/optex/pdfextra/examples/pdfextra-example.tex b/macros/luatex/optex/pdfextra/examples/pdfextra-example.tex new file mode 100644 index 0000000000..6093bf7def --- /dev/null +++ b/macros/luatex/optex/pdfextra/examples/pdfextra-example.tex @@ -0,0 +1,341 @@ +% PDFextra example file. +% This file, apart from other topics, shows how to port 3D examples from media9 +% (https://ctan.org/pkg/media9) documentation. You probably have to adjust path +% searching to succesfully compile this example, e.g.: +% +% \begtt +% env TEXMFDOTDIR=.:~/src/texlive/texmf-dist/source/latex/media9/files/ optex pdfextra-example.tex +% \endtt + +% basic \OpTeX/ settings +\enlang\enquotes +\fontfam[lm] + +%\pdfobjcompresslevel=0 +%\pdfcompresslevel=0 + +% load the package from standard search path +\load[pdfextra] + +% Before using \hlink we must activate hyperlinks +\hyperlinks\Blue\Green + +% Maybe we want to greet the user and jump to page 2 right at the start? +\openaction[ + js:{% + app.alert("Javascript alert, open action"); + console.println("printing to console from openaction");}, + pg:2, +] + + + +% Using document level JavaScript we can run initialization code right at the +% start (this is more flexible than \openaction). +\dljavascript[random]{ + function getRandomNumber() { + return 4; % chosen by fair dice roll, ![https://xkcd.com/221/] + } + console.println("initialized with seed " + getRandomNumber()); +} + + + +% For external references we need to `\filedef` "external" and "url" files beforehand: +\filedef/u[doc-internet]{http://petr.olsak.net/ftp/olsak/optex/optex-doc.pdf} +\filedef/x[doc-local]{optex-doc.pdf} + +% We then try to reference them using external references: +\hlink[extref:doc-internet:ref:langphrases]{OpTeX documentation, section \"Multilingual phrases and quotation marks".} +\hlink[extpgref:doc-internet:12]{OpTeX documentation, page 12.} + + + +% Insert a video twice with different settings: +\filedef/e[video]{example-movie.mp4} +% insert video into page using Renditions mechanism with controls and autoplay +\render[video][ + controls=true, + aactions=\renditionautoplay, +]{\picwidth=\hsize \inspic{example-image.pdf}} + +% Maybe add action buttons? +\hlink[rendition::play]{play} \hlink[rendition::pause]{pause} +\hlink[rendition::stop]{stop} \hlink[rendition::resume]{resume} + +% Render the same file again, but with different dimensions, no controls +% and explicit activation. +\render[video]{\inspic{example-image.pdf}} +% This one can't have buttons, because it doesn't have its own name ("video") is used by the previous one. + + + +% Add already embedded video to the list of attachments shown in user +% interface. +\attach[video] + + +% We are done for this page, who not go to the next one? +% +% \hlink typesets in group, so we locally disable lining links (our button is +% bigger than normal line) +\hlink[named:NextPage]{\nolininglinks\typoscale[2000/2000]\inoval{NEXT PAGE}} + + + +\vfil\break + + + +% deliver fresh random number to everyone who sees this page using "page open" +% trigger event of page's actions +\pageactions[ + {O} {js:{app.alert("Random number for you is " + getRandomNumber());}} +] + +% "previous page" link with "Split" transition +\hlink[pg:1, transition:Split]{Go to previous page (with transition).} + + + +\vfil\break + +% A 3D Rich Media annotation with a custom view and script follows: + +% First we define the 3D file, so we can use same name for the view and have it auto included. +\filedef/e[example]{pdfextra-example-part.prc} + +% Then a simplistic "front" view. +\DDDview[example][ + projection=ortho, + roo=400, +] + +% A 3D JavaScript script that will define function to use with action button. +% (we write the script only now, so we don't have to carry around an extra file in the package) +\newwrite\js +\immediate\openout\js=turn.js +% rotate every node by angle degrees along $x$ axis +\immediate\write\js{\detokenize{ +function turn(angle) { + angle = angle * Math.PI / 180; + for (var i = 0; i < scene.nodes.count; i++) { + var node = scene.nodes.getByIndex(i); + node.transform.rotateAboutXInPlace(angle); + } +} +}} +\closeout\js + +% The annotation itself, with our script above. +\RM[example][ + activation=auto, + scripts=turn.js, +]{{\White\vrule width\hsize height\hsize}} + +\hlink[js:\DDDcontext{example}.turn(10);]{Turn by 10 degrees along $x$ axis.}\par +\hlink[js:\DDDcontext{example}.turn(30);]{Turn by 30 degrees along $x$ axis.}\par +\hlink[js:\DDDcontext{example}.turn(90);]{Turn by 90 degrees along $x$ axis.} + + + +\vfil\break + + +% Here is the "epix" 3D model example from media9 documentation ported to pdfextra +% +% First we define a view with the same name as the future Rich Media +% annotation. This view will then automatically be used if no `views` is +% specified. No need to be excessive with decimal numbers. +\DDDview[epix][ + FOV=30, + c2c=4 2 3, + coo=4.41 2.19 0, + roo=430, +] + +% 3Dmenu is used often, lets use shortcut instead. +\filedef/e[3dmenu]{3Dmenu.js} +% We want to use the nice "epix" name for the view and annotation. +\filedef/e[epix]{epix.prc} + +% Just to spice things up, we diverge a bit from media9 and define custom background color. +\colordef\GreyBG{0.1\Black} + +% Define the 3D Rich Media annotation. One view is automatically detected from +% name ("epix"). Scripts will run in turn at initialization time. +\RM[epix][ + scripts={ + asylabels.js, + 3Dspintool.js, + 3dmenu, + }, + background=\GreyBG, +]{\picwidth=0.8\hsize \picheight=0.8\hsize \inspic{epixposter.pdf}} + + + +\vfil\break + + + +% Second media9 example is "dice" it has a lot of views, but they are simple. +% This time we can't use the deduction with same name. +\DDDview[Front][roo=27] +\DDDview[Back][roo=27, c2c=0 1 0] +\DDDview[Left][roo=27, c2c=-1 0 0] +\DDDview[Right][roo=27, c2c=1 0 0] +\DDDview[Top][roo=27, c2c=0 0 1] +\DDDview[Bottom][roo=27, c2c=0 0 -1] +\DDDview[Fish Eye at Centre][fov=120] + +% We want to use all the defined views, as well as autoactivate the annotation. +% This means that the previews mostly sets dimensions, because it will not be +% shown much. (Except in viewers that don't support 3D Rich Media -- all except +% Acrobat). +\RM[dice.u3d][ + views={Front, Back, Left, Right, Top, Bottom, Fish Eye at Centre}, + activation=auto, + scripts=3dmenu, +]{{\Red \vrule height.5\hsize width.5\hsize}} + +% A few buttons for switching views. +\hlink[goto3dview::/N]{\frame{Next view}} +\hlink[goto3dview::(Back)]{\frame{View \"Back"}} +\hlink[goto3dview::5]{\frame{6th view in the list}} + +% And define the action buttons using this new custom action. +\hlink[diceview:/N]{Next view} +\hlink[diceview:(Back)]{View \"Back"} +\hlink[diceview:5]{6th view in the list} + + +\vfil\break + + +% Last media9 example ported. It has its own JavaScript file for animation, +% which can be customized at runtime using JavaScript actions that access 3D +% conotext. +\filedef/e[malte]{malte.u3d} +\DDDview[malte][c2c=1 1 1, roo=0.25] +\RM[malte][ + activation=auto, + scripts={3dmenu, malte.js}, +]{{\Blue \vrule height.5\hsize width0.5\hsize}} + +{\picheight=1.44em +% Normal JavaScript actions, but we access functions defined globaly in the 3D +% JavaScript context of "malte" Rich Media annotation. +\hlink[js:\DDDcontext{malte}.cntrClockWise();]{\inspic{boutona.pdf}} +\hlink[js:\DDDcontext{malte}.pause();]{\inspic{boutonb.pdf}} +\hlink[js:\DDDcontext{malte}.clockWise();]{\inspic{boutonc.pdf}} +\hlink[js:\DDDcontext{malte}.scaleSpeed(1/1.1);]{\inspic{boutond.pdf}} +\hlink[js:\DDDcontext{malte}.origSpeed();]{\inspic{boutone.pdf}} +\hlink[js:\DDDcontext{malte}.scaleSpeed(1.1);]{\inspic{boutonf.pdf}} +} + + +\vfil\break + + +% Lastly a showcase of transitions / page durations in \OpTeX/ slideshow. +% Because transitions are displayed only in fullscreen mode, we could request +% it by using "\fullscreen". But we have more pages before this, so we didn't. + +% We just turn the rest of the document into slideshow. +\slides +\slideshow +% To see the transitions better, we color each page with a background color. +\global\pgbackground={\bgcolor \hrule height\pdfpageheight width\pdfpagewidth} +\glet\bgcolor=\Yellow + +% Transitions on all pages where it is not said otherwise will be of type +% "Wipe" and be 1 second long. +\transitions[Wipe:1] + +% The slides will by default be shown for 3 seconds before advancing to the next one. +\defaultpageduration[3] +% But the first slide has override to only be shown for 1 second. +\pageduration[1] + +\tit Presentation + +\subtit Transistions and durations + +\pg; +\glet\bgcolor=\Red +% All transitions are defined on the page object and they are shown when we go +% to that page. That means that we probably didn't see the "Wipe:1" animation +% of the first slide, because we already were there. However, this second slide +% with "Fade" is now shown correctly. (The first one also will, when we go +% back.) +\transition[Fade] + +\sec First slide + +Some\pg+ +% In a slideshow, by using \pg+ we are on a new PDF page with independently set +% transition/duration. We can use this to disable page durations -- we have +% seen the "single page override" in action on previous page, and the default +% duration on this "page". +\defaultpageduration[] + +% Also apply a long transition on this "page"/"slide"/"subslide". +\transition[Dissolve:4] + +% More uses of currently set default values follow. +text\pg+ + +to\pg+ + +test\pg+ + +slideshow + +\pg; +% Now show different transitions on differently colored pages: +\glet\bgcolor=\Green +\transition[Split:3:/Dm /V /M /I] + +\sec Second slide + +\transitions[Blinds:2] + +more\pg+ + +text + +\transitions[Wipe] + +\pg; +\glet\bgcolor=\Brown +\transition[Dissolve] + +\sec Third slide + +\pg; +\glet\bgcolor=\Red +\transition[Box] + +\sec More + +\pg; +\glet\bgcolor=\Yellow + +\sec slides + +\pg; +\glet\bgcolor=\Red + +\sec using + +\pg; +\glet\bgcolor=\Yellow + +\sec default transition + +bye\pg+ + +bye + +\bye |