diff options
Diffstat (limited to 'Master')
-rw-r--r-- | Master/texmf-dist/doc/latex/beamersubframe/README | 42 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/beamersubframe/beamersubframe-append.pdf | bin | 17540 -> 14955 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/beamersubframe/beamersubframe-append.svg | 369 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/beamersubframe/beamersubframe-embed.pdf | bin | 17446 -> 15283 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/beamersubframe/beamersubframe-embed.svg | 367 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/beamersubframe/beamersubframe.pdf | bin | 520899 -> 505027 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/beamersubframe/beamersubframe.tex | 454 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/beamersubframe/bsf-example.tex | 150 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/beamersubframe/beamersubframe.dtx | 2354 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/beamersubframe/beamersubframe.ins | 67 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/beamersubframe/beamersubframe.sty | 515 | ||||
-rwxr-xr-x | Master/tlpkg/libexec/ctan2tds | 1 |
12 files changed, 3389 insertions, 930 deletions
diff --git a/Master/texmf-dist/doc/latex/beamersubframe/README b/Master/texmf-dist/doc/latex/beamersubframe/README index e661088543b..6fb9795eef7 100644 --- a/Master/texmf-dist/doc/latex/beamersubframe/README +++ b/Master/texmf-dist/doc/latex/beamersubframe/README @@ -1,30 +1,42 @@ -Copyright (c) 2004 Mike Kaufmann +Copyright (c) 2011 Mike Kaufmann m.km@gmx.de Licence: LPPL <http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html> + 1. What is it The Beamer SubFrame package provides a method to reorder frames in the PDF file without reordering the source. Mainly, it is meant to embed or append frames with details on some subject. -This is the very first version! It's still considered experimental! -Everything, including the name and the user interface, may change in -the future. +This package is in an early state of development (it's version 0.2). +It is already useful, but there are some restrictions. And although +it's not planned, the user interface may change in the future. + + +2. Generating beamersubframe.sty +Simply run: tex beamersubframe.ins + +The file beamersubframe.dtx also contains a small example. You will be asked, +if you want to generate it. + + +3. Making the Documentation +To get contents, cross references and index right, run TeX and makeindex +as follows: -Although it can only be used with the beamer class, it is not a part -of the beamer class! +pdflatex beamersubframe.dtx +makeindex -s gind.ist beamersubframe.idx +pdflatex beamersubframe.dtx +pdflatex beamersubframe.dtx -2. Example -The presentation explainig the package also serves as an example. -Feel free to play around with it. -3. Files -00readme this file -beamersubframe.sty the package -beamersubframe.tex source of presentation -beamersubframe.pdf presentation +4. Files +README this file +beamersubframe.dtx +beamersubframe.ins the package +beamersubframe.pdf the manual beamersubframe-append.pdf -beamersubframe-embed.pdf pictures used in presentation +beamersubframe-embed.pdf pictures used in manual beamersubframe-append.svg beamersubframe-embed.svg source of pictures (inkscape) diff --git a/Master/texmf-dist/doc/latex/beamersubframe/beamersubframe-append.pdf b/Master/texmf-dist/doc/latex/beamersubframe/beamersubframe-append.pdf Binary files differindex 37e617abf66..6908e0004bc 100644 --- a/Master/texmf-dist/doc/latex/beamersubframe/beamersubframe-append.pdf +++ b/Master/texmf-dist/doc/latex/beamersubframe/beamersubframe-append.pdf diff --git a/Master/texmf-dist/doc/latex/beamersubframe/beamersubframe-append.svg b/Master/texmf-dist/doc/latex/beamersubframe/beamersubframe-append.svg index 0048cceb5c2..1fff13f5c0e 100644 --- a/Master/texmf-dist/doc/latex/beamersubframe/beamersubframe-append.svg +++ b/Master/texmf-dist/doc/latex/beamersubframe/beamersubframe-append.svg @@ -1,6 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Created with Inkscape (http://www.inkscape.org/) --> - <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" @@ -13,7 +12,7 @@ height="1052.3622" id="svg2" sodipodi:version="0.32" - inkscape:version="0.48.1 " + inkscape:version="0.46" sodipodi:docname="beamersubframe-append.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" version="1.0"> @@ -112,17 +111,17 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="0.48426804" - inkscape:cx="617.73918" - inkscape:cy="604.67055" + inkscape:zoom="0.75826447" + inkscape:cx="602.23721" + inkscape:cy="503.27459" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" gridtolerance="50" objecttolerance="10000" guidetolerance="10000" - inkscape:window-width="1024" - inkscape:window-height="578" + inkscape:window-width="1280" + inkscape:window-height="961" inkscape:window-x="-4" inkscape:window-y="-3" inkscape:window-maximized="0"> @@ -177,434 +176,444 @@ id="rect3324" width="141.73228" height="106.29921" - x="141.73228" - y="141.73227" /> + x="141.73232" + y="106.2992" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3322" width="141.73228" height="106.29921" - x="124.01575" - y="124.01573" /> + x="124.01577" + y="88.582664" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3320" width="141.73228" height="106.29921" - x="106.29921" - y="106.29919" /> + x="106.29923" + y="70.866119" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect2528" width="141.73228" height="106.29921" - x="88.58268" - y="88.582657" /> + x="88.582703" + y="53.149586" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3326" width="141.73228" height="106.29921" - x="141.73228" - y="407.48032" /> + x="141.73232" + y="372.04724" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3328" width="141.73228" height="106.29921" - x="124.01575" - y="389.76376" /> + x="124.01577" + y="354.33069" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3330" width="141.73228" height="106.29921" - x="106.29921" - y="372.04724" /> + x="106.29923" + y="336.61417" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3332" width="141.73228" height="106.29921" - x="88.58268" - y="354.33069" /> + x="88.582703" + y="318.89761" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3334" width="141.73228" height="106.29921" - x="141.7323" - y="673.22833" /> + x="141.73233" + y="637.79529" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3336" width="141.73228" height="106.29921" - x="124.01575" - y="655.51178" /> + x="124.01577" + y="620.07874" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3338" width="141.73228" height="106.29921" - x="106.29921" - y="637.79523" /> + x="106.29923" + y="602.36218" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3340" width="141.73228" height="106.29921" - x="88.582687" - y="620.07874" /> + x="88.58271" + y="584.64569" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3342" width="141.73228" height="106.29921" - x="584.64569" - y="283.46454" /> + x="584.64575" + y="372.04721" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3344" width="141.73228" height="106.29921" - x="566.92914" - y="265.74802" /> + x="566.9292" + y="354.33069" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3346" width="141.73228" height="106.29921" - x="549.21259" - y="248.03146" /> + x="549.21265" + y="336.61414" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3348" width="141.73228" height="106.29921" - x="531.49609" - y="230.31494" /> + x="531.49615" + y="318.89761" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3350" width="141.73228" height="106.29921" - x="885.82672" - y="283.46457" /> + x="885.82678" + y="372.04724" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3352" width="141.73228" height="106.29921" - x="868.11017" - y="265.74802" /> + x="868.11023" + y="354.33069" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3354" width="141.73228" height="106.29921" - x="850.39368" - y="248.03148" /> + x="850.39374" + y="336.61414" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3356" width="141.73228" height="106.29921" - x="832.67712" - y="230.31496" /> + x="832.67719" + y="318.89761" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3366" width="141.73228" height="106.29921" - x="584.64569" - y="584.64563" /> + x="584.64581" + y="637.79529" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3368" width="141.73228" height="106.29921" - x="566.92914" - y="566.92914" /> + x="566.92926" + y="620.0788" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3370" width="141.73228" height="106.29921" - x="549.21259" - y="549.21259" /> + x="549.21271" + y="602.36224" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3372" width="141.73228" height="106.29921" - x="531.49609" - y="531.49603" /> + x="531.49622" + y="584.64563" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3374" width="141.73228" height="106.29921" - x="885.82666" - y="584.64569" /> + x="885.82678" + y="637.79535" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3376" width="141.73228" height="106.29921" - x="868.11011" - y="566.92914" /> + x="868.11023" + y="620.0788" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3378" width="141.73228" height="106.29921" - x="850.39362" - y="549.21259" /> + x="850.39374" + y="602.36224" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3380" width="141.73228" height="106.29921" - x="832.67706" - y="531.49603" /> + x="832.67719" + y="584.64563" /> <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mstart);stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" - d="M 212.59843,248.03147 C 212.59843,248.03147 212.59843,230.31493 212.59843,265.74801 C 212.59842,301.18109 159.44882,301.18108 159.44882,336.61415 C 159.44882,372.04722 159.44882,354.33069 159.44882,354.33069" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mstart);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 212.59846,212.5984 C 212.59846,212.5984 212.59846,194.88186 212.59846,230.31494 C 212.59845,265.74802 159.44885,265.74801 159.44885,301.18108 C 159.44885,336.61415 159.44885,318.89762 159.44885,318.89762" id="path3390" sodipodi:nodetypes="czzc" /> <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mstart);stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" - d="M 212.59843,513.7795 C 212.59843,513.7795 212.59843,496.06296 212.59843,531.49604 C 212.59842,566.92912 159.44882,566.92911 159.44882,602.36218 C 159.44882,637.79525 159.44882,620.07872 159.44882,620.07872" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mstart);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 212.59846,478.34643 C 212.59846,478.34643 212.59846,460.62989 212.59846,496.06297 C 212.59845,531.49605 159.44885,531.49604 159.44885,566.92911 C 159.44885,602.36218 159.44885,584.64565 159.44885,584.64565" id="path4434" sodipodi:nodetypes="czzc" /> <path style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mstart);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 726.37795,336.61415 C 726.37795,336.61415 708.66141,336.61415 744.09449,336.61415 C 779.52757,336.61414 779.52756,283.46454 814.96063,283.46454 C 850.3937,283.46454 832.67717,283.46454 832.67717,283.46454" + d="M 726.37805,425.19683 C 726.37805,425.19683 708.66151,425.19683 744.09459,425.19683 C 779.52767,425.19682 779.52766,372.04722 814.96073,372.04722 C 850.3938,372.04722 832.67727,372.04722 832.67727,372.04722" id="path4436" sodipodi:nodetypes="czzc" /> <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mstart);stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" - d="M 726.37795,637.79526 C 726.37795,637.79526 708.66141,637.79526 744.09449,637.79526 C 779.52757,637.79525 779.52756,584.64565 814.96063,584.64565 C 850.3937,584.64565 832.67717,584.64565 832.67717,584.64565" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mstart);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 726.37808,690.94488 C 726.37808,690.94488 708.66154,690.94488 744.09462,690.94488 C 779.5277,690.94487 779.52769,637.79527 814.96076,637.79527 C 850.39383,637.79527 832.6773,637.79527 832.6773,637.79527" id="path4440" sodipodi:nodetypes="czzc" /> <path style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#marker20908);marker-end:url(#marker20912);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 1018.7008,380.90549 C 1018.7008,380.90549 1045.2756,380.90549 1080.7087,380.90549 C 1116.1417,380.90549 1116.1417,442.91336 1080.7087,442.91336 C 1045.2757,442.91336 265.74803,442.91336 265.74803,442.91336" + d="M 1018.7008,469.48817 C 1018.7008,469.48817 1009.8425,469.48817 1045.2756,469.48817 C 1080.7087,469.48817 1080.7087,513.77951 1045.2756,513.77951 C 1009.8425,513.77951 602.3622,513.77951 531.49606,513.77951 C 460.62992,513.77951 425.19685,407.48029 354.33071,407.48029 C 283.46457,407.48029 265.74803,407.48029 265.74803,407.48029" id="path4446" - sodipodi:nodetypes="czzc" /> + sodipodi:nodetypes="czzzzc" /> <path style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#marker20908);marker-end:url(#marker20912);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 1018.7008,682.08659 C 1018.7008,682.08659 1036.4173,682.08659 1080.7087,682.08659 C 1125,682.08659 1125,744.09447 1080.7087,744.09447 C 1036.4174,744.09447 549.2126,744.09447 478.34646,744.09447 C 407.48031,744.09447 425.19684,708.6614 265.74803,708.6614" + d="M 1018.7008,735.23619 C 1018.7008,735.23619 1009.8425,735.2362 1045.2756,735.2362 C 1080.7087,735.2362 1075.772,779.52754 1045.2756,779.52754 C 1014.7791,779.52754 301.1811,779.52754 265.74803,779.52754 C 230.31496,779.52754 177.16535,797.24407 177.16535,850.39368" id="path4969" sodipodi:nodetypes="czzzc" /> <path style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#marker20908);marker-end:url(#marker20912);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 239.17323,380.90549 C 283.46457,380.90549 265.74804,380.90549 318.89764,380.90549 C 372.04724,380.90549 372.04725,283.46454 442.91339,283.46454 C 513.77953,283.46454 531.49606,283.46454 531.49606,283.46454" + d="M 239.17326,345.47242 C 283.4646,345.47242 265.74807,345.47242 318.89767,345.47242 C 372.04727,345.47242 372.04725,354.33069 442.91339,354.33069 C 513.77953,354.33069 531.49606,354.33069 531.49606,354.33069" id="path7324" sodipodi:nodetypes="czzc" /> <path style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#marker20908);marker-end:url(#marker20912);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 239.17323,646.65352 C 239.17323,646.65352 265.74803,646.65352 318.89764,646.65352 C 372.04725,646.65352 389.76378,602.36218 442.91339,602.36218 C 496.063,602.36218 531.49606,602.36218 531.49606,602.36218" + d="M 274.6063,735.2362 C 274.6063,735.2362 283.46457,735.2362 336.61417,735.2362 C 389.76378,735.2362 389.76378,655.51179 442.91339,655.51179 C 496.063,655.51179 531.49606,655.51179 531.49606,655.51179" id="path8380" sodipodi:nodetypes="czzc" /> <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mstart);stroke-miterlimit:4;stroke-dasharray:6,6;stroke-dashoffset:0" - d="M 1027.5591,336.61415 C 1027.5591,336.61415 992.12607,336.61415 1080.7087,336.61415 C 1169.2913,336.61415 1169.2914,478.34643 1080.7087,478.34643 C 992.12601,478.34643 584.64567,478.34643 496.06299,478.34643 C 407.48031,478.34643 407.48031,566.92911 496.06299,566.92911 C 584.64567,566.92911 531.49606,566.92911 531.49606,566.92911" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mstart);stroke-miterlimit:4;stroke-dasharray:6, 6;stroke-dashoffset:0;stroke-opacity:1" + d="M 1027.5591,425.19683 C 1027.5591,425.19683 992.12603,425.19683 1062.9921,425.19683 C 1133.8582,425.19683 1133.8582,531.49604 1062.9921,531.49604 C 992.12593,531.49604 549.2126,531.49604 496.06299,531.49604 C 442.91339,531.49604 442.91339,620.07872 496.06299,620.07872 C 549.2126,620.07872 531.49606,620.07872 531.49606,620.07872" id="path17489" sodipodi:nodetypes="czzzzc" /> <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:6, 6;stroke-dashoffset:0;font-size:18" - d="M 194.88189,779.52754 C 194.88189,850.39368 246.49713,850.39368 292.32283,850.39368 C 338.14854,850.39368 389.76378,832.67714 389.76378,779.52754 C 389.76378,726.37793 389.76378,442.91337 389.76378,389.76376 C 389.76378,336.61415 407.48031,318.89762 460.62992,318.89762 C 513.77953,318.89762 531.49606,318.89762 531.49606,318.89762" + style="font-size:18px;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:6, 6;stroke-dashoffset:0;stroke-opacity:1" + d="M 212.59845,1009.8425 C 212.59843,1045.2756 230.31496,1045.2756 301.1811,1045.2756 C 372.04724,1045.2756 389.76378,1009.8425 389.76378,956.69289 C 389.76378,903.54329 389.76378,513.77951 389.76378,460.6299 C 389.76378,407.48029 407.48031,389.76376 460.62992,389.76376 C 513.77953,389.76376 531.49606,389.76376 531.49606,389.76376" id="path4883" sodipodi:nodetypes="czzzzc" /> <text xml:space="preserve" style="font-size:18px;font-style:normal;font-weight:bold;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Sans" - x="159.44882" - y="145.27557" + x="159.44885" + y="109.84251" id="text20916"><tspan sodipodi:role="line" id="tspan20918" - x="159.44882" - y="145.27557">some frame</tspan></text> + x="159.44885" + y="109.84251">some frame</tspan></text> <text xml:space="preserve" style="font-size:18px;font-style:normal;font-weight:bold;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Sans" - x="159.44882" - y="411.02359" + x="159.44885" + y="375.59052" id="text20920"><tspan sodipodi:role="line" id="tspan20922" - x="159.44882" - y="411.02359">frame on foo</tspan></text> + x="159.44885" + y="375.59052">frame on foo</tspan></text> <text xml:space="preserve" style="font-size:18px;font-style:normal;font-weight:bold;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Sans" - x="159.44882" - y="676.77161" + x="159.44885" + y="641.33856" id="text20924"><tspan sodipodi:role="line" id="tspan20926" - x="159.44882" - y="676.77161">frame on bar</tspan></text> + x="159.44885" + y="641.33856">frame on bar</tspan></text> <text xml:space="preserve" style="font-size:18px;font-style:normal;font-weight:bold;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Sans" - x="602.36218" - y="265.74802" + x="602.36224" + y="354.33069" id="text20928"><tspan sodipodi:role="line" - x="602.36218" - y="265.74802" + x="602.36224" + y="354.33069" id="tspan20934">details on</tspan><tspan sodipodi:role="line" - x="602.36218" - y="288.24802" + x="602.36224" + y="376.83069" id="tspan2470">foo</tspan><tspan sodipodi:role="line" - x="604.85828" - y="310.74802" - id="tspan2472">item x</tspan></text> + x="602.36224" + y="399.33069" + id="tspan2472">item b</tspan></text> <text xml:space="preserve" style="font-size:18px;font-style:normal;font-weight:bold;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Sans" - x="903.54333" - y="265.74802" + x="903.5434" + y="354.33069" id="text20940"><tspan sodipodi:role="line" - x="903.54333" - y="265.74802" + x="903.5434" + y="354.33069" id="tspan20946">more details</tspan><tspan sodipodi:role="line" - x="903.54333" - y="288.24802" + x="903.5434" + y="376.83069" id="tspan2478">on foo</tspan><tspan sodipodi:role="line" - x="906.03943" - y="310.74802" - id="tspan2480">item x</tspan></text> + x="903.5434" + y="399.33069" + id="tspan2480">item b</tspan></text> <text xml:space="preserve" style="font-size:18px;font-style:normal;font-weight:bold;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Sans" - x="903.54333" - y="566.92914" + x="903.54346" + y="620.0788" id="text20948"><tspan sodipodi:role="line" - x="903.54333" - y="566.92914" + x="903.54346" + y="620.0788" id="tspan20954">more details</tspan><tspan sodipodi:role="line" - x="903.54333" - y="589.42914" + x="903.54346" + y="642.5788" id="tspan2494">on bar</tspan><tspan sodipodi:role="line" - x="906.03943" - y="611.92914" - id="tspan2496">item y</tspan></text> + x="903.54346" + y="665.0788" + id="tspan2496">item z</tspan></text> <text xml:space="preserve" style="font-size:18px;font-style:normal;font-weight:bold;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Sans" - x="602.36218" - y="566.92914" + x="602.3623" + y="620.0788" id="text20956"><tspan sodipodi:role="line" - x="602.36218" - y="566.92914" + x="602.3623" + y="620.0788" id="tspan20962">details on</tspan><tspan sodipodi:role="line" - x="602.36218" - y="589.42914" + x="602.3623" + y="642.5788" id="tspan2486">bar</tspan><tspan sodipodi:role="line" - x="604.85828" - y="611.92914" - id="tspan2488">item y</tspan></text> + x="602.3623" + y="665.0788" + id="tspan2488">item z</tspan></text> <text xml:space="preserve" style="font-size:18px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Sans" - x="265.74802" - y="350.78738" + x="255.1181" + y="315.35431" id="text2452"><tspan sodipodi:role="line" id="tspan2454" - x="265.74802" - y="350.78738">Goto</tspan><tspan + x="255.1181" + y="315.35431">Goto</tspan><tspan sodipodi:role="line" - x="265.74802" - y="373.28738" + x="255.1181" + y="337.85431" id="tspan3268">Details</tspan></text> <text xml:space="preserve" style="font-size:18px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Sans" - x="478.34647" - y="435.82675" + x="531.49603" + y="506.6929" id="text3256"><tspan sodipodi:role="line" id="tspan3258" - x="478.34647" - y="435.82675">Return from Details</tspan></text> + x="531.49603" + y="506.6929">Return from Details</tspan></text> <text xml:space="preserve" style="font-size:18px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Sans" - x="478.34647" - y="737.00787" + x="442.91339" + y="772.44092" id="text3260"><tspan sodipodi:role="line" id="tspan3262" - x="478.34647" - y="737.00787">Return from Details</tspan></text> + x="442.91339" + y="772.44092">Return from Details</tspan></text> <text xml:space="preserve" style="font-size:18px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Sans" - x="265.74802" - y="616.5354" + x="290.55118" + y="705.1181" id="text3264"><tspan sodipodi:role="line" id="tspan3266" - x="265.74802" - y="616.5354">Goto</tspan><tspan + x="290.55118" + y="705.1181">Goto</tspan><tspan sodipodi:role="line" - x="265.74802" - y="639.0354" + x="290.55118" + y="727.6181" id="tspan3270">Details</tspan></text> - <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#DotL);marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 159.44882,53.149584 L 159.44882,88.582655" - id="path3272" /> - <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#DotL)" - d="M 1027.5591,637.79525 L 1062.9921,637.79525" - id="path4627" /> - <text - xml:space="preserve" - style="font-size:18px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Sans" - x="531.49603" - y="141.73225" - id="text2498"><tspan - sodipodi:role="line" - id="tspan2500" - x="531.49603" - y="141.73225">transition with cursor keys</tspan></text> + <rect + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2472" + width="141.73228" + height="106.29921" + x="141.73232" + y="903.54327" /> + <rect + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2474" + width="141.73228" + height="106.29921" + x="124.01577" + y="885.82678" /> + <rect + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2476" + width="141.73228" + height="106.29921" + x="106.29922" + y="868.11023" /> + <rect + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2478" + width="141.73228" + height="106.29921" + x="88.582695" + y="850.39368" /> <text xml:space="preserve" - style="font-size:18px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Sans" - x="531.49603" - y="177.16533" - id="text2502"><tspan + style="font-size:18px;font-style:normal;font-weight:bold;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Sans" + x="159.44885" + y="907.08661" + id="text2480"><tspan sodipodi:role="line" - id="tspan2504" - x="531.49603" - y="177.16533">transition with link (button)</tspan></text> + id="tspan2482" + x="159.44885" + y="907.08661">another frame</tspan></text> <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 460.62992,138.18895 L 513.77953,138.18895" - id="path3312" - sodipodi:nodetypes="cc" /> + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mstart);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 212.59846,744.09447 C 212.59846,744.09447 212.59846,726.37793 212.59846,761.81101 C 212.59845,797.24409 141.73228,797.24407 141.73228,832.67714 C 141.73228,868.11021 141.73228,850.39368 141.73228,850.39368" + id="path2484" + sodipodi:nodetypes="czzc" /> <path - style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#marker20908);marker-end:url(#marker20912);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 460.62992,173.62203 L 513.77953,173.62203" - id="path3859" - sodipodi:nodetypes="cc" /> + style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#marker20908);marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 717.51969,735.2362 C 717.51969,735.2362 708.66142,735.2362 744.09449,735.2362 C 779.52756,735.2362 779.52756,779.52754 744.09449,779.52754" + id="path2486" + sodipodi:nodetypes="czz" /> </g> </svg> diff --git a/Master/texmf-dist/doc/latex/beamersubframe/beamersubframe-embed.pdf b/Master/texmf-dist/doc/latex/beamersubframe/beamersubframe-embed.pdf Binary files differindex 707930fdacf..8da0f4d8a60 100644 --- a/Master/texmf-dist/doc/latex/beamersubframe/beamersubframe-embed.pdf +++ b/Master/texmf-dist/doc/latex/beamersubframe/beamersubframe-embed.pdf diff --git a/Master/texmf-dist/doc/latex/beamersubframe/beamersubframe-embed.svg b/Master/texmf-dist/doc/latex/beamersubframe/beamersubframe-embed.svg index b534a4ecb86..6a3a8a23e7b 100644 --- a/Master/texmf-dist/doc/latex/beamersubframe/beamersubframe-embed.svg +++ b/Master/texmf-dist/doc/latex/beamersubframe/beamersubframe-embed.svg @@ -1,6 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Created with Inkscape (http://www.inkscape.org/) --> - <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" @@ -13,7 +12,7 @@ height="1052.3622" id="svg2" sodipodi:version="0.32" - inkscape:version="0.48.1 " + inkscape:version="0.46" sodipodi:docname="beamersubframe-embed.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" version="1.0"> @@ -112,17 +111,17 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="0.50140353" - inkscape:cx="617.73918" - inkscape:cy="618.46709" + inkscape:zoom="0.75864593" + inkscape:cx="613.73366" + inkscape:cy="503.52459" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" gridtolerance="50" objecttolerance="10000" guidetolerance="10000" - inkscape:window-width="1024" - inkscape:window-height="578" + inkscape:window-width="1280" + inkscape:window-height="961" inkscape:window-x="-4" inkscape:window-y="-3" inkscape:window-maximized="0"> @@ -177,280 +176,280 @@ id="rect3324" width="141.73228" height="106.29921" - x="141.73228" - y="141.73227" /> + x="141.73224" + y="106.29919" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3322" width="141.73228" height="106.29921" - x="124.01575" - y="124.01573" /> + x="124.0157" + y="88.582657" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3320" width="141.73228" height="106.29921" - x="106.29921" - y="106.29919" /> + x="106.29916" + y="70.866112" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect2528" width="141.73228" height="106.29921" - x="88.58268" - y="88.582657" /> + x="88.582634" + y="53.149582" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3326" width="141.73228" height="106.29921" - x="141.73228" - y="407.48032" /> + x="141.73224" + y="372.04724" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3328" width="141.73228" height="106.29921" - x="124.01575" - y="389.76376" /> + x="124.0157" + y="354.33069" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3330" width="141.73228" height="106.29921" - x="106.29921" - y="372.04724" /> + x="106.29916" + y="336.61417" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3332" width="141.73228" height="106.29921" - x="88.58268" - y="354.33069" /> + x="88.582634" + y="318.89761" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3334" width="141.73228" height="106.29921" - x="141.7323" - y="673.22833" /> + x="141.73225" + y="637.79529" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3336" width="141.73228" height="106.29921" - x="124.01575" - y="655.51178" /> + x="124.0157" + y="620.07874" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3338" width="141.73228" height="106.29921" - x="106.29921" - y="637.79523" /> + x="106.29916" + y="602.36218" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3340" width="141.73228" height="106.29921" - x="88.582687" - y="620.07874" /> + x="88.582642" + y="584.64569" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3342" width="141.73228" height="106.29921" - x="584.64569" - y="283.46454" /> + x="584.64563" + y="372.04721" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3344" width="141.73228" height="106.29921" - x="566.92914" - y="265.74802" /> + x="566.92908" + y="354.33069" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3346" width="141.73228" height="106.29921" - x="549.21259" - y="248.03146" /> + x="549.21252" + y="336.61414" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3348" width="141.73228" height="106.29921" - x="531.49609" - y="230.31494" /> + x="531.49603" + y="318.89761" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3350" width="141.73228" height="106.29921" - x="885.82672" - y="283.46457" /> + x="885.82666" + y="372.04724" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3352" width="141.73228" height="106.29921" - x="868.11017" - y="265.74802" /> + x="868.11011" + y="354.33069" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3354" width="141.73228" height="106.29921" - x="850.39368" - y="248.03148" /> + x="850.39362" + y="336.61417" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3356" width="141.73228" height="106.29921" - x="832.67712" - y="230.31496" /> + x="832.67706" + y="318.89764" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3366" width="141.73228" height="106.29921" - x="584.64569" - y="584.64563" /> + x="584.64563" + y="637.79529" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3368" width="141.73228" height="106.29921" - x="566.92914" - y="566.92914" /> + x="566.92908" + y="620.0788" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3370" width="141.73228" height="106.29921" - x="549.21259" - y="549.21259" /> + x="549.21252" + y="602.36224" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3372" width="141.73228" height="106.29921" - x="531.49609" - y="531.49603" /> + x="531.49603" + y="584.64563" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3374" width="141.73228" height="106.29921" - x="885.82666" - y="584.64569" /> + x="885.8266" + y="637.79535" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3376" width="141.73228" height="106.29921" - x="868.11011" - y="566.92914" /> + x="868.11005" + y="620.0788" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3378" width="141.73228" height="106.29921" - x="850.39362" - y="549.21259" /> + x="850.39355" + y="602.36224" /> <rect style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect3380" width="141.73228" height="106.29921" - x="832.67706" - y="531.49603" /> + x="832.677" + y="584.64563" /> <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mstart);stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" - d="M 212.59843,248.03147 C 212.59843,248.03147 212.59843,230.31493 212.59843,265.74801 C 212.59842,301.18109 159.44882,301.18108 159.44882,336.61415 C 159.44882,372.04722 159.44882,354.33069 159.44882,354.33069" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mstart);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 212.59839,212.5984 C 212.59839,212.5984 212.59839,194.88186 212.59839,230.31494 C 212.59838,265.74802 159.44878,265.74801 159.44878,301.18108 C 159.44878,336.61415 159.44878,318.89762 159.44878,318.89762" id="path3390" sodipodi:nodetypes="czzc" /> <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mstart);stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" - d="M 212.59843,513.7795 C 212.59843,513.7795 212.59843,496.06296 212.59843,531.49604 C 212.59842,566.92912 159.44882,566.92911 159.44882,602.36218 C 159.44882,637.79525 159.44882,620.07872 159.44882,620.07872" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mstart);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 212.59839,478.34643 C 212.59839,478.34643 212.59839,460.62989 212.59839,496.06297 C 212.59838,531.49605 159.44878,531.49604 159.44878,566.92911 C 159.44878,602.36218 159.44878,584.64565 159.44878,584.64565" id="path4434" sodipodi:nodetypes="czzc" /> <path style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mstart);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 726.37796,336.61415 C 726.37796,336.61415 708.66142,336.61415 744.0945,336.61415 C 779.52758,336.61414 779.52757,283.46454 814.96064,283.46454 C 850.39371,283.46454 832.67718,283.46454 832.67718,283.46454" + d="M 726.37795,425.19683 C 726.37795,425.19683 708.66141,425.19683 744.09449,425.19683 C 779.52757,425.19682 779.52756,372.04722 814.96063,372.04722 C 850.3937,372.04722 832.67717,372.04722 832.67717,372.04722" id="path4436" sodipodi:nodetypes="czzc" /> <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mstart);stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" - d="M 726.37795,637.79526 C 726.37795,637.79526 708.66141,637.79526 744.09449,637.79526 C 779.52757,637.79525 779.52756,584.64565 814.96063,584.64565 C 850.3937,584.64565 832.67717,584.64565 832.67717,584.64565" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mstart);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 726.37794,690.94488 C 726.37794,690.94488 708.6614,690.94488 744.09448,690.94488 C 779.52756,690.94487 779.52755,637.79527 814.96062,637.79527 C 850.39369,637.79527 832.67716,637.79527 832.67716,637.79527" id="path4440" sodipodi:nodetypes="czzc" /> <path style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#marker20908);marker-end:url(#marker20912);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 239.1732,469.48816 C 239.1732,469.48816 265.748,460.6299 301.1811,460.6299 C 336.6141,460.6299 336.6141,478.34643 301.1811,478.34643 C 265.7481,478.34643 265.74803,478.34643 265.74803,478.34643" + d="M 239.17316,434.05509 C 239.17316,434.05509 265.74796,425.19683 301.18106,425.19683 C 336.61406,425.19683 336.61406,442.91336 301.18106,442.91336 C 265.74806,442.91336 265.74799,442.91336 265.74799,442.91336" id="path4446" sodipodi:nodetypes="czzc" /> <path style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 248.0315,425.19683 C 292.32284,425.19683 265.74804,425.19683 318.89764,425.19683 C 372.04724,425.19683 372.04725,283.46454 442.91339,283.46454 C 513.77953,283.46454 531.49606,283.46454 531.49606,283.46454" + d="M 248.03146,389.76376 C 248.0315,389.76376 301.18111,389.76376 354.33071,389.76376 C 407.48031,389.76376 389.76378,372.04722 442.91339,372.04722 C 496.063,372.04722 531.49606,372.04722 531.49606,372.04722" id="path7324" sodipodi:nodetypes="czzc" /> <path style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - d="M 1027.5591,336.61415 C 1027.5591,336.61415 992.12607,336.61415 1080.7087,336.61415 C 1169.2913,336.61415 1169.2914,442.91336 1080.7087,442.91336 C 992.12601,442.91336 265.74803,442.91336 265.74803,442.91336" + d="M 1027.5592,425.19683 C 1027.5592,425.19683 1027.5593,425.19683 1080.7088,425.19683 C 1133.8583,425.19683 1133.8583,513.77951 1080.7087,513.77951 C 1027.5591,513.77951 602.3622,513.7795 531.49606,513.77951 C 460.62992,513.77951 478.34646,407.48029 407.48031,407.48029 C 336.61416,407.48029 265.74803,407.48029 265.74803,407.48029" id="path17489" - sodipodi:nodetypes="czzc" /> + sodipodi:nodetypes="czzzzc" /> <text xml:space="preserve" style="font-size:18px;font-style:normal;font-weight:bold;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Sans" - x="159.44882" - y="145.27557" + x="159.44878" + y="109.8425" id="text20916"><tspan sodipodi:role="line" id="tspan20918" - x="159.44882" - y="145.27557">some frame</tspan></text> + x="159.44878" + y="109.8425">some frame</tspan></text> <text xml:space="preserve" style="font-size:18px;font-style:normal;font-weight:bold;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Sans" - x="159.44882" - y="411.02359" + x="159.44878" + y="375.59052" id="text20920"><tspan sodipodi:role="line" id="tspan20922" - x="159.44882" - y="411.02359">frame on foo</tspan></text> + x="159.44878" + y="375.59052">frame on foo</tspan></text> <text xml:space="preserve" style="font-size:18px;font-style:normal;font-weight:bold;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Sans" - x="159.44882" - y="676.77161" + x="159.44878" + y="641.33856" id="text20924"><tspan sodipodi:role="line" id="tspan20926" - x="159.44882" - y="676.77161">frame on bar</tspan></text> + x="159.44878" + y="641.33856">frame on bar</tspan></text> <text xml:space="preserve" style="font-size:18px;font-style:normal;font-weight:bold;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Sans" - x="602.36218" - y="265.74802" + x="602.36212" + y="354.33069" id="text20928"><tspan sodipodi:role="line" - x="602.36218" - y="265.74802" + x="602.36212" + y="354.33069" id="tspan20934">details on</tspan><tspan sodipodi:role="line" - x="602.36218" - y="288.24802" + x="602.36212" + y="376.83069" id="tspan2464">foo</tspan><tspan sodipodi:role="line" - x="602.36218" - y="310.74802" - id="tspan2466">item x</tspan></text> + x="602.36212" + y="399.33069" + id="tspan2466">item b</tspan></text> <text xml:space="preserve" style="font-size:18px;font-style:normal;font-weight:bold;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Sans" @@ -464,129 +463,157 @@ <text xml:space="preserve" style="font-size:18px;font-style:normal;font-weight:bold;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Sans" - x="903.54333" - y="566.92914" + x="903.54327" + y="620.0788" id="text20948"><tspan sodipodi:role="line" - x="903.54333" - y="566.92914" + x="903.54327" + y="620.0788" id="tspan20954">more details</tspan><tspan sodipodi:role="line" - x="903.54333" - y="589.42914" + x="903.54327" + y="642.5788" id="tspan2496">on bar</tspan><tspan sodipodi:role="line" - x="903.54333" - y="611.92914" - id="tspan2498">item y</tspan></text> + x="903.54327" + y="665.0788" + id="tspan2498">item z</tspan></text> <text xml:space="preserve" style="font-size:18px;font-style:normal;font-weight:bold;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Sans" - x="602.36218" - y="566.92914" + x="602.36212" + y="620.0788" id="text20956"><tspan sodipodi:role="line" - x="602.36218" - y="566.92914" + x="602.36212" + y="620.0788" id="tspan20962">details on</tspan><tspan sodipodi:role="line" - x="602.36218" - y="589.42914" + x="602.36212" + y="642.5788" id="tspan2488">bar</tspan><tspan sodipodi:role="line" - x="604.85828" - y="611.92914" - id="tspan2490">item y</tspan></text> - <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-end:url(#Arrow1Mstart);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 248.0315,690.94486 C 292.32284,690.94486 283.46457,690.94486 336.61417,690.94486 C 389.76377,690.94486 407.48032,584.64565 478.34646,584.64565 C 549.2126,584.64565 531.49606,584.64565 531.49606,584.64565" - id="path25914" - sodipodi:nodetypes="czzc" /> + x="602.36212" + y="665.0788" + id="tspan2490">item z</tspan></text> <path style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - d="M 1027.5591,637.79525 C 1027.5591,637.79525 992.12606,637.79525 1080.7087,637.79525 C 1169.2913,637.79525 1147.1457,744.09447 1080.7087,744.09447 C 1014.2716,744.09447 673.22835,744.09447 478.34646,744.09447 C 354.33071,744.09447 389.76378,708.6614 265.74803,708.6614" + d="M 1027.5591,690.94486 C 1027.5591,690.94486 992.12603,690.94486 1062.9921,690.94486 C 1133.8582,690.94486 1129.4291,797.24407 1062.9921,797.24407 C 996.55503,797.24407 265.74803,797.24407 230.31496,797.24407 C 194.88189,797.24407 177.16535,797.24407 177.16535,850.39368" id="path26994" - sodipodi:nodetypes="czzsc" /> + sodipodi:nodetypes="czzzc" /> <path style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#marker20908);marker-end:url(#marker20912);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 239.1732,735.2362 C 239.1732,735.2362 265.748,726.37794 301.1811,726.37794 C 336.6141,726.37794 336.6141,744.09447 301.1811,744.09447 C 265.7481,744.09447 265.74803,744.09447 265.74803,744.09447" + d="M 150.59049,735.2362 C 150.59049,735.2362 150.59055,744.09447 150.59055,761.811 C 150.59055,779.52754 141.73228,779.52753 141.73228,814.9606 C 141.73228,850.39368 141.73228,850.39368 141.73228,850.39368" id="path26996" sodipodi:nodetypes="czzc" /> <text xml:space="preserve" style="font-size:18px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Sans" - x="301.18109" - y="496.06296" + x="290.55118" + y="464.17322" id="text26998"><tspan sodipodi:role="line" id="tspan27000" - x="301.18109" - y="496.06296">Skip Details</tspan></text> + x="290.55118" + y="464.17322">Skip</tspan><tspan + sodipodi:role="line" + x="290.55118" + y="486.67322" + id="tspan2485">Details</tspan></text> <text xml:space="preserve" style="font-size:18px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Sans" - x="301.18109" - y="761.81097" - id="text27002"><tspan + x="-832.67712" + y="113.38583" + id="text27002" + transform="matrix(0,-1,1,0,0,0)"><tspan sodipodi:role="line" id="tspan27004" - x="301.18109" - y="761.81097">Skip Details</tspan></text> - <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#DotL);marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 159.44882,53.149584 L 159.44882,88.582655" - id="path27012" /> - <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#DotL)" - d="M 212.59843,779.52754 L 212.59843,814.96061" - id="path28106" /> + x="-832.67712" + y="113.38583">Skip</tspan><tspan + sodipodi:role="line" + x="-832.67712" + y="135.88583" + id="tspan2487">Details</tspan></text> <text xml:space="preserve" style="font-size:18px;font-style:normal;font-weight:bold;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Sans" - x="903.54333" - y="265.74802" + x="903.54327" + y="354.33069" id="text2476"><tspan sodipodi:role="line" id="tspan2478" - x="903.54333" - y="265.74802">more details</tspan><tspan + x="903.54327" + y="354.33069">more details</tspan><tspan sodipodi:role="line" - x="903.54333" - y="288.24802" + x="903.54327" + y="376.83069" id="tspan2480">on foo</tspan><tspan sodipodi:role="line" - x="903.54333" - y="310.74802" - id="tspan2482">item x</tspan></text> - <text - xml:space="preserve" - style="font-size:18px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Sans" - x="531.49603" - y="177.16531" - id="text2504"><tspan - sodipodi:role="line" - id="tspan2506" - x="531.49603" - y="177.16531">transition with link (button)</tspan></text> + x="903.54327" + y="399.33069" + id="tspan2482">item b</tspan></text> + <rect + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2468" + width="141.73228" + height="106.29921" + x="141.73228" + y="903.54327" /> + <rect + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2470" + width="141.73228" + height="106.29921" + x="124.01575" + y="885.82678" /> + <rect + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2472" + width="141.73228" + height="106.29921" + x="106.2992" + y="868.11023" /> + <rect + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2474" + width="141.73228" + height="106.29921" + x="88.58268" + y="850.39368" /> <text xml:space="preserve" - style="font-size:18px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Sans" - x="531.49603" - y="141.73225" - id="text2508"><tspan + style="font-size:18px;font-style:normal;font-weight:bold;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Sans" + x="159.44882" + y="907.08661" + id="text2477"><tspan sodipodi:role="line" - id="tspan2510" - x="531.49603" - y="141.73225">transition with cursor keys</tspan></text> + id="tspan2479" + x="159.44882" + y="907.08661">another frame</tspan></text> <path style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 460.6299,138.18896 L 513.7795,138.18895" - id="path2512" - sodipodi:nodetypes="cc" /> + d="M 283.46457,690.94486 C 283.46461,690.94486 301.18111,690.94486 354.33071,690.94486 C 407.48031,690.94486 389.76378,637.79525 442.91339,637.79525 C 496.063,637.79525 531.49606,637.79525 531.49606,637.79525" + id="path2483" + sodipodi:nodetypes="czzc" /> <path style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#marker20908);marker-end:url(#marker20912);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 460.62989,173.62202 L 513.7795,173.62202" - id="path2514" - sodipodi:nodetypes="cc" /> + d="M 717.51966,735.2362 C 717.51969,770.66927 708.66142,779.52754 655.51181,779.52754 C 602.3622,779.52754 301.1811,779.52754 230.31496,779.52754 C 159.44882,779.52754 159.44882,797.24407 159.44882,850.39368" + id="path2489" + sodipodi:nodetypes="czzc" /> + <text + xml:space="preserve" + style="font-size:18px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Sans" + x="336.61417" + y="772.44092" + id="text2491"><tspan + sodipodi:role="line" + x="336.61417" + y="772.44092" + id="tspan2495">Skip further Details</tspan></text> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0" + d="M 265.74803,1045.2756 L 336.61417,1045.2756" + id="path2499" /> </g> </svg> diff --git a/Master/texmf-dist/doc/latex/beamersubframe/beamersubframe.pdf b/Master/texmf-dist/doc/latex/beamersubframe/beamersubframe.pdf Binary files differindex acceb33a574..d5ba6e486d2 100644 --- a/Master/texmf-dist/doc/latex/beamersubframe/beamersubframe.pdf +++ b/Master/texmf-dist/doc/latex/beamersubframe/beamersubframe.pdf diff --git a/Master/texmf-dist/doc/latex/beamersubframe/beamersubframe.tex b/Master/texmf-dist/doc/latex/beamersubframe/beamersubframe.tex deleted file mode 100644 index 826d5601f3a..00000000000 --- a/Master/texmf-dist/doc/latex/beamersubframe/beamersubframe.tex +++ /dev/null @@ -1,454 +0,0 @@ -\documentclass{beamer} -\usepackage{lmodern} -\usepackage[T1]{fontenc} - -\usepackage[append]{beamersubframe} - -\setbeamercovered{transparent=50} -\usetheme{Dresden} -%\usetheme{Berkeley} -%\usetheme{Montpellier} -%\usetheme{Malmoe} -%\usetheme{AnnArbor} -\usecolortheme{crane} - - -%------------------------------------------------------------------------------- -% conditional buttons -% #1: label for ``skip details'' -% #2: text for ``skip details'' -% #3: label for ``goto details'' -% #4: text for ``goto details'' -\newcommand<>{\beamerlinkdetailbutton}[4]{% - \ifappend{\uncover#5{\alt#5{\hyperlink{#3}{\beamergotobutton{#4}}}{\beamergotobutton{#4}}}}% - {\uncover#5{\alt#5{\hyperlink{#1}{\beamerskipbutton{#2}}}{\beamerskipbutton{#2}}}} -} - -% #1: label for ``return from details'' -% #2: text for ``return from details'' -\newcommand<>{\beamerlinkbackbutton}[2]{% - \ifappend{\uncover#3{\alt#3{\hyperlink{#1}{\beamerreturnbutton{#2}}}{\beamerreturnbutton{#2}}}}{} -} - -\title[Beamer SubFrame]{The Beamer SubFrame Package} -\subtitle{Reordering frames in the PDF file without reordering the source} -\author{Mike Kaufmann} -\institute{\href{mailto:m.km@gmx.de}{\texttt{m.km@gmx.de}}\\~\\ - Version 0.1} -\date{29.06.2011} - -%------------------------------------------------------------------------------- -\begin{document} -\begin{frame} -\maketitle -\end{frame} - -%------------------------------------------------------------------------------- -%------------------------------------------------------------------------------- -%------------------------------------------------------------------------------- -\part{Documentation} -\section{Introduction} -\begin{frame}{Introduction} -\begin{itemize} -\item can reorder frames in PDF without reordering the source -\item to embed or append frames with details -\vspace{2ex} -\item only one level -\vspace{2ex} -\item very first version -\item not well tested -\item propably many flaws -\item therefore \alert{experimental} -\end{itemize} -\end{frame} - -%------------------------------------------------------------------------------- -%------------------------------------------------------------------------------- -\section{Frame Order} -\subsection{Embedded Details} -\begin{frame}{Frame Order with Details embedded} -Order in PDF with details embedded (same as source): -\begin{itemize} -\item frame on foo -\item frame with details on item foo x -\item frame with more details on item foo x -\item frame on bar -\item frame with details on item bar y -\item frame with more details on item bar y -\end{itemize} -\vspace{2ex} -\beamerlinkdetailbutton{append}{Skip Picture}{embed-pic}{Show Picture} -\end{frame} - -\begin{subframe}[label=embed-pic,plain]{Frame Order with Details embedded} -\includegraphics[scale=0.3]{beamersubframe-embed.pdf} - -\beamerlinkbackbutton{append}{Return from Picture} -\end{subframe} - -%------------------------------------------------------------------------------- -\subsection{Appended Details} -\begin{frame}[label=append]{Frame Order with Details appended} -Order in PDF with details appended (different from source): -\begin{itemize} -\item frame on foo -\item frame on bar -\item frame with details on item foo x -\item frame with more details on item foo x -\item frame with details on item bar y -\item frame with more details on item bar y -\end{itemize} -\vspace{2ex} -\beamerlinkdetailbutton{depend}{Skip Picture}{append-pic}{Show Picture} -\end{frame} - -\begin{subframe}[label=append-pic,plain]{Frame Order with Details appended} -\includegraphics[scale=0.3]{beamersubframe-append.pdf} - -\beamerlinkbackbutton{depend}{Return from Picture} -\end{subframe} - -%------------------------------------------------------------------------------- -%------------------------------------------------------------------------------- -\section{Dependencies} -\begin{frame}[label=depend]{Dependencies} -\begin{itemize} -\item only works with Beamer class - \begin{itemize} - \item not loaded otherwhise - \item error message - \item disregarding $\to$ \alert{additional errors} - \end{itemize} -\vspace{2ex} -\item needs verbatim -\end{itemize} -\end{frame} - -%------------------------------------------------------------------------------- -%------------------------------------------------------------------------------- -\section{Usage} -\subsection{Package and Options} -\begin{frame}[fragile]{Usage -- Package and Options} -\begin{verbatim} -\usepackage[...]{beamersubframe} -\end{verbatim} -Options: -\begin{description} -\item[\texttt{embed }] subframes shown in order of source, - \texttt{\textbackslash appendsubframes} ignored, default -\item[\texttt{append}] subframes removed and appended in place of - \texttt{\textbackslash appendsubframes} -\end{description} -\begin{itemize} -\item options mutually exclusive -\item if both given $\to$ last one wins -\end{itemize} -\end{frame} - -%------------------------------------------------------------------------------- -\subsection{Appending Subframes} -\begin{frame}{Usage -- Appending Subframes} -Add \texttt{\textbackslash appendsubframes} before \texttt{\textbackslash end\{document\}} - -\vspace{2ex} -\begin{itemize} -\item no more subframes allowed after \texttt{\textbackslash appendsubframes} -\item \texttt{\textbackslash appendsubframes} only allowed once -\item restrictions not tested by package -\end{itemize} -\end{frame} - -%------------------------------------------------------------------------------- -\subsection{Changes of Source} -\begin{frame}<1>[label=sourcechange]{Usage -- Changes of Source} -\begin{itemize} -\item<1-> For frames with details to be embbeded or appended conditionally, - change to subframe environment (same options as frame environment) - \beamerlinkdetailbutton<1>{sourcechange<2>}{Skip Source Example}{sourceenv}{Show Source Example} -\item<2-> Add labels to - \begin{itemize} - \item frame to skip or return to - \item first subframe with details - \end{itemize} - \beamerlinkdetailbutton<2>{sourcechange<3>}{Skip Source Example}{sourcelabel}{Show Source Example} -\item<3-> Add conditional links/buttons to - \begin{itemize} - \item frame with details - \item last subframe with details - \end{itemize} - \beamerlinkdetailbutton<3>{conditional}{Skip Source Example}{sourcelink}{Show Source Example} -\end{itemize} -\end{frame} - -\begin{subframe}[label=sourceenv,fragile]{Source Example}{Changing Environment} -Change from -\begin{scriptsize} -\begin{verbatim} - \begin{frame} ... options ... - ... framecontents ... - \end{frame} -\end{verbatim} -\end{scriptsize} -to -\begin{scriptsize} -\begin{verbatim} - \begin{subframe} ... options ... - ... framecontents ... -\end{verbatim} -\texttt{\hspace{2em}\textbackslash end\{subframe\}} -\end{scriptsize} - -\vspace{1ex} -\beamerlinkbackbutton{sourcechange<2>}{Return from Source Example} -\end{subframe} - -\againframe<2>{sourcechange} - -\begin{subframe}[label=sourcelabel,fragile]{Source Example}{Adding Labels} -\begin{scriptsize} -\begin{verbatim} - \begin{frame} - ... - - \begin{subframe}[label=detailsstart] - ... - - \begin{subframe} - ... - - \begin{frame}[label=skiptohere] - ... -\end{verbatim} -\end{scriptsize} -\beamerlinkbackbutton{sourcechange<3>}{Return from Source Example} -\end{subframe} - -\againframe<3->{sourcechange} - -\begin{subframe}[label=sourcelink,fragile]{Source Example}{Adding Buttons} -\begin{scriptsize} -\begin{verbatim} - \begin{frame} - ... - \ifappend{... link to detailsstart ...}% - {... link to skiptohere ...} - ... - \begin{subframe}[label=detailsstart] - ... - \begin{subframe} - ... - \ifappend{... link to skiptohere ...}{} - ... - \begin{frame}[label=skiptohere] - ... -\end{verbatim} -\end{scriptsize} -\beamerlinkbackbutton{conditional}{Return from Source Example} -\end{subframe} - -%------------------------------------------------------------------------------- -\subsection{Conditional Execution} -\begin{frame}<1>[label=conditional,fragile]{Usage -- Conditional Execution} -Command: -\begin{scriptsize} -\begin{verbatim} -\ifappend{... executed if appended ...}% - {... executed if embedded ...} -\end{verbatim} -\end{scriptsize} -\begin{itemize} -\item useful for conditional links or buttons -\item can be used in own commands -\end{itemize} -\end{frame} - - -%------------------------------------------------------------------------------- -%------------------------------------------------------------------------------- -\section{Additional Information} -\subsection{Restrictions} -\begin{frame}{Restrictions of Beamer SubFrame} -Additional restrictions to those already mentioned: -\begin{itemize} -\item no \texttt{\textbackslash subframe} command -\item no \texttt{\textbackslash againsubframe} command -\item appendix not tested -\item only tested with mode \texttt{beamer} -\item after errors \texttt{.nav} file has to be erased (sometimes) -\end{itemize} -\end{frame} - -\begin{frame}{Themes used for Testing} -\begin{itemize} -\item Dresden -\item Berkeley -\item Montpellier -\item Malmoe -\item AnnArbor -\vspace{2ex} -\item no options used -\end{itemize} -\end{frame} - -%------------------------------------------------------------------------------- -\subsection{Files} -\begin{frame}{Files generated by Beamer SubFrame} -\begin{description} -\item[\texttt{\textbackslash jobname.sfr}] - contains subframes for appending -\item[\texttt{\textbackslash jobname.sfp}] - contains information about subframes used for sidebar and miniframe navigation -\end{description} -\end{frame} - -%------------------------------------------------------------------------------- -\subsection{Navigation} -\begin{frame}{Navigationbar} -\begin{itemize} -\item frames and slides in order of PDF file -\item section and subsection confusing on appended subframes -\item presentation leads to last frame in PDF -\item appendix not tested -\end{itemize} - -\vspace{2ex} -Discussion necessary -\end{frame} - -\begin{frame}{Sidebar and Miniframes} -\begin{itemize} -\item number and order of miniframes always as if subframes embedded -\item highlighting always as if subframes embedded -\end{itemize} -\end{frame} - -%------------------------------------------------------------------------------- -\subsection{ToDo} -\begin{frame}{ToDo} -\begin{itemize} -\item proper manual -\item proper package -\item package documentation -\item more testing -\item fix navigationbar -\item enabling beamer modes -\item multiple levels of subframes (?) -\item \dots -\end{itemize} - -\vspace{2ex} -But first lets talk about this package. -\end{frame} - -%------------------------------------------------------------------------------- -%------------------------------------------------------------------------------- -%------------------------------------------------------------------------------- -\part{Implementation} -\section{How it works} -\subsection{In Embed Mode} -\begin{frame} -\frametitle{\texttt{subframe} Environment -- embedded} - -\begin{itemize} -\item parses and stores frist three arguments (if there) -\item adds \texttt{environmet=subframe} to \texttt{\textit{options}} -\item calls \texttt{frame} environment with stored arguments -\end{itemize} - -\beamerlinkdetailbutton{appended}{Skip Source}{envsource1}{Goto Source} -\end{frame} - -\begin{subframe}[label=envsource1] -\frametitle{\texttt{subframe} Environment -- Source (1)} -(no source here, just for testing) -\end{subframe} - -\begin{subframe} -\frametitle{\texttt{subframe} Environment -- Source (2)} -(no source here, just for testing) - -\vspace{2ex} -\beamerlinkbackbutton{appended}{Return from Source} -\end{subframe} - - -%------------------------------------------------------------------------------- -\subsection{In Append Mode} -\begin{frame}[label=appended] -\frametitle{\texttt{subframe} Environment -- appended} - -\begin{itemize} -\item \texttt{verbatim} environment -\item writes to \texttt{.sfr} file - \begin{itemize} - \item \texttt{\textbackslash beamerrestore}\dots - \item \texttt{\textbackslash begin\{frame\}} with arguments - \item contents - \item \texttt{\textbackslash end\{frame\}} - \end{itemize} -\item one file for all subframes -\end{itemize} - -\beamerlinkdetailbutton{appending}{Skip Source}{envsource2}{Goto Source} -\end{frame} - -\begin{subframe}[label=envsource2] -\frametitle{\texttt{subframe} Environment -- Source (3)} -(no source here, just for testing) -\end{subframe} - -\begin{subframe} -\frametitle{\texttt{subframe} Environment -- Source (4)} -(no source here, just for testing) - -\vspace{2ex} -\beamerlinkbackbutton{appending}{Return from Source} -\end{subframe} - -%------------------------------------------------------------------------------- -\subsection{Appending Subframes} -\begin{frame}[label=appending] -\frametitle{Appending Subframes} -\begin{itemize} -\item does nothing in embed mode -\item in append mode - \begin{itemize} - \item closes \texttt{.sfr} file - \item inputs \texttt{.sfr} file - \end{itemize} -\end{itemize} - -\beamerlinkdetailbutton{testframe}{Skip Source}{appendsource}{Goto Source} -\end{frame} - -\begin{subframe}[label=appendsource] -\frametitle{Appending -- Source} -(no source here, just for testing) - -\vspace{2ex} -\beamerlinkbackbutton{testframe}{Return from Source} -\end{subframe} - -%------------------------------------------------------------------------------- -%------------------------------------------------------------------------------- -\section{Just a test section} -\begin{frame}[label=testframe] -\frametitle{Just a Test Frame} -(nothing here, just for testing) -\end{frame} - -%------------------------------------------------------------------------------- -%------------------------------------------------------------------------------- -%------------------------------------------------------------------------------- -\beamerrestore{0}{0}{0}{0}{}{} -\begin{frame} -\begin{center} -Thanks for reading! - -\vspace{4ex} -Thanks in advance for testing and feedback! -\end{center} -\end{frame} - -\appendsubframes -\end{document}
\ No newline at end of file diff --git a/Master/texmf-dist/doc/latex/beamersubframe/bsf-example.tex b/Master/texmf-dist/doc/latex/beamersubframe/bsf-example.tex new file mode 100644 index 00000000000..79dd20af927 --- /dev/null +++ b/Master/texmf-dist/doc/latex/beamersubframe/bsf-example.tex @@ -0,0 +1,150 @@ +%% +%% This is file `bsf-example.tex', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% beamersubframe.dtx (with options: `example') +%% +%% Copyright (c) 2011 Mike Kaufmann, all rights reserved +%% +%% This program is provided under the terms of the +%% LaTeX Project Public License distributed from CTAN +%% archives in directory macros/latex/base/lppl.txt. +%% +%% Author: Mike Kaufmann +%% m.km@gmx.de +%% +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +%% +\documentclass{beamer} +\usepackage{lmodern} +\usepackage[T1]{fontenc} + +\usepackage[append]{beamersubframe} + +\newcommand<>{\linkdetail}[4]{% + \ifappend{\uncover#5{\hyperlink{#3}{\beamergotobutton{#4}}}}% + {\uncover#5{\hyperlink{#1}{\beamerskipbutton{#2}}}} +} +\newcommand<>{\returndetail}[2]{% +\ifappend{\uncover#3{\hyperlink{#1}{\beamerreturnbutton{#2}}}}% + {\visible<0>{\beamerreturnbutton{#2}}} +} +\newcommand<>{\linkdifftext}[3]{% + \ifappend{\uncover#4{\hyperlink{#1}{\beamergotobutton{#3}}}}% + {\uncover#4{\hyperlink{#1}{\beamerskipbutton{#2}}}} +} + +\defbeamertemplate*{sidebar left}{bsf test}[1][50] +{ + \vfill% + \rlap{\hskip0.1cm\hbox{\color{fg!#1!bg}\tiny{\ifsubframe{detail}{main part}}}}% + \vskip2pt% +} + +\begin{document} +\begin{frame}{some frame} +\begin{itemize}[<+->] +\item there is foo +\item foo is good +\item and there is bar +\item bar is good too +\end{itemize} +\end{frame} + +\begin{frame}<1-2>[label=lfoo]{frame on foo} +\begin{itemize}[<+->] +\item item a +\item item b \linkdetail<2>{lfoo<3>}{Skip Details}{ldfoob}{Goto Details} +\item item c +\item item d +\end{itemize} +\end{frame} + +\begin{subframe}[label=ldfoob]{details on foo item b} +\begin{itemize}[<+->] +\item item b.1 +\item item b.2 +\item item b.3 +\item item b.4 +\end{itemize} +\end{subframe} + +\begin{subframe} +\frametitle{more details on foo item b} +\begin{itemize}[<+->] +\item item b.5 +\item item b.6 +\item item b.7 +\item item b.8 +\end{itemize} + +\vspace{2ex} +\returndetail<4>{lfoo<3>}{Return from Details} +\end{subframe} + +\againframe<3->{lfoo} + +\begin{frame}{frame on bar} +\begin{itemize}[<+->] +\item item w +\item item x +\item item y +\item item z \linkdetail<4>{lother}{Skip Details}{ldbarz}{Goto Details} +\end{itemize} +\end{frame} + +\begin{subframe}[label=ldbarz] +\frametitle{details on bar item z} +\begin{itemize}[<+->] +\item item z.1 +\item item z.2 +\item item z.3 +\item item z.4 +\end{itemize} + +\vspace{2ex} +\linkdifftext<4>{lother}{Skip further Details}{Return from Details} +\end{subframe} + +\begin{subframe}{more details on bar item z} +\begin{itemize}[<+->] +\item item z.5 +\item item z.6 +\item item z.7 +\item item z.8 +\end{itemize} + +\vspace{2ex} +\returndetail<4>{lother}{Return from Details} +\end{subframe} + +\begin{frame}[label=lother]{another frame} +\begin{itemize}[<+->] +\item conclusion 1 +\item conclusion 2 +\item conclusion 3 +\item conclusion 4 +\end{itemize} +\end{frame} + +\appendsubframes +\end{document} +\endinput +%% +%% End of file `bsf-example.tex'. diff --git a/Master/texmf-dist/source/latex/beamersubframe/beamersubframe.dtx b/Master/texmf-dist/source/latex/beamersubframe/beamersubframe.dtx new file mode 100644 index 00000000000..d6698dd3caf --- /dev/null +++ b/Master/texmf-dist/source/latex/beamersubframe/beamersubframe.dtx @@ -0,0 +1,2354 @@ +% \iffalse meta-comment +% +% Package beamersubframe +% Copyright (c) 2011 Mike Kaufmann, all rights reserved +% +% This program is provided under the terms of the +% LaTeX Project Public License distributed from CTAN +% archives in directory macros/latex/base/lppl.txt. +% +% Author: Mike Kaufmann +% m.km@gmx.de +% \fi +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +%% +% \CheckSum{922} +% +% \iffalse meta-comment +% +%<*package> +%% +\def\fileversion{0.2} +\def\filedate{2011/08/07} + +%</package> +% +%<*driver> +\documentclass{ltxdoc} +\usepackage{hypdoc} +\usepackage{graphicx} +%\usepackage[pdfborder=0,colorlinks,linkcolor=blue]{hyperref} +\usepackage[all]{hypcap} +\setcounter{IndexColumns}{2} +\EnableCrossrefs +\CodelineIndex +%\RecordChanges +%\OnlyDescription +\makeatletter +% new, like ...Env... commands from doc.sty) +\let\PrintDescribeOpt\PrintDescribeEnv +\let\PrintOptName\PrintEnvName +\def\DescribeOpt{\leavevmode\@bsphack\begingroup\MakePrivateLetters + \Describe@Opt} +\def\Describe@Opt#1{\endgroup + \marginpar{\raggedleft\PrintDescribeOpt{#1}}% + \SpecialOptIndex{#1}\@esphack\ignorespaces} +\def\SpecialOptIndex#1{\@bsphack + \index{#1\actualchar{\protect\ttfamily#1} + (option)\encapchar usage}% + \index{options:\levelchar#1\actualchar{\protect\ttfamily#1}\encapchar + usage}\@esphack} +% new (like \SpecialEnvIndex from hypdoc.sty) +\let\HDorg@SpecialOptIndex\SpecialOptIndex +\renewcommand*\SpecialOptIndex[1]{% + \@bsphack + \begingroup + \HD@target + \let\HDorg@encapchar\encapchar + \edef\encapchar usage{% + \HDorg@encapchar hdclindex{\the\c@HD@hypercount}{usage}% + }% + \HDorg@SpecialOptIndex{#1}% + \endgroup + \@esphack +} +% redefinition (from doc.sty) +\def\macro{\begingroup + \catcode`\\12 + \MakePrivateLetters \m@cro@ \z@} +\def\environment{\begingroup + \catcode`\\12 + \MakePrivateLetters \m@cro@ \@ne} +% new, environment 'option', like 'environment', but index entries with +% '(option)' +\def\option{\begingroup + \catcode`\\12 + \MakePrivateLetters \m@cro@ \tw@} +% redefinition (from doc.sty) +\long\def\m@cro@#1#2{\endgroup \topsep\MacroTopsep \trivlist + \edef\saved@macroname{\string#2}% + \def\makelabel##1{\llap{##1}}% + \if@inlabel + \let\@tempa\@empty \count@\macro@cnt + \loop \ifnum\count@>\z@ + \edef\@tempa{\@tempa\hbox{\strut}}\advance\count@\m@ne \repeat + \edef\makelabel##1{\llap{\vtop to\baselineskip + {\@tempa\hbox{##1}\vss}}}% + \advance \macro@cnt \@ne + \else \macro@cnt\@ne \fi + \edef\@tempa{\noexpand\item[% + \ifcase #1% + \noexpand\PrintMacroName + \or + \noexpand\PrintEnvName + \or + \noexpand\PrintOptName + \fi + {\string#2}]}% + \@tempa + \global\advance\c@CodelineNo\@ne + \ifcase #1% + \SpecialMainIndex{#2}\nobreak + \DoNotIndex{#2}% + \or + \SpecialMainEnvIndex{#2}\nobreak + \or + \SpecialMainOptIndex{#2}\nobreak + \fi + \global\advance\c@CodelineNo\m@ne + \ignorespaces} +% new +\let\endoption\endmacro +\def\SpecialMainOptIndex#1{\@bsphack\special@index{% + #1\actualchar + {\string\ttfamily\space#1} + (option)% + \encapchar main}% + \special@index{options:\levelchar#1\actualchar{% + \string\ttfamily\space#1}\encapchar + main}\@esphack} +\makeatother +\begin{document} +\DocInput{beamersubframe.dtx} +\end{document} +%</driver> +% +%<*package> +% \fi +% +% \DoNotIndex{\^} +% \DoNotIndex{\@auxout} +% \DoNotIndex{\@@end,\@empty} +% \DoNotIndex{\@gobble,\@gobbletwo} +% \DoNotIndex{\@ifclassloaded,\@ifnextchar,\@ifundefined} +% \DoNotIndex{\@makeother} +% \DoNotIndex{\@nameuse} +% \DoNotIndex{\@tempa,\@tempb,\@tempcnta,\@tempcntb} +% \DoNotIndex{\@writefile,\@nameuse} +% \DoNotIndex{\advance,\active,\addtocontents,\addtocounter} +% \DoNotIndex{\AtBeginDocument,\AtEndDocument} +% \DoNotIndex{\begin,\begingroup} +% \DoNotIndex{\beamer@endpageofdocument,\beamer@endpageofframe} +% \DoNotIndex{\beamer@endpageofpart,\beamer@endpageofsection} +% \DoNotIndex{\beamer@endpageofsubsection} +% \DoNotIndex{\beamer@frameendpage,\beamer@framepages,\beamer@framestartpage} +% \DoNotIndex{\beamer@startpageofpart,\beamer@startpageofsection} +% \DoNotIndex{\beamer@startpageofsubsection,\beamer@subsectionstartpage} +% \DoNotIndex{\beamer@partstartpage,\beamer@sectionstartpage} +% \DoNotIndex{\beamer@ifempty,\beamer@notesactions,\beamer@tempcount} +% \DoNotIndex{\c@framenumber,\c@page,\c@part} +% \DoNotIndex{\c@section,\c@subsection,\c@subsectionslide} +% \DoNotIndex{\catcode,\clearpage,\closeout,\csname} +% \DoNotIndex{\DeclareOption,\def,\do,\dospecials} +% \DoNotIndex{\edef,\else,\end,\endgroup,\endcsname,\endinput,\ExecuteOption} +% \DoNotIndex{\expandafter,\ExecuteOptions} +% \DoNotIndex{\fi,\filedate,\fileversion} +% \DoNotIndex{\gdef,\global} +% \DoNotIndex{\headcommand,\hyperlink} +% \DoNotIndex{\if@filesw} +% \DoNotIndex{\if,\ifcase,\ifcat,\ifdim,\ifnum,\ifx,\InputIfFileExists} +% \DoNotIndex{\immediate,\input} +% \DoNotIndex{\insertpartheadnumber,\insertsectionhead,\insertsubsectionhead} +% \DoNotIndex{\insertsectionheadnumber,\insertsubsectionheadnumber} +% \DoNotIndex{\jobname} +% \DoNotIndex{\let,\lastsubsection} +% \DoNotIndex{\MessageBreak} +% \DoNotIndex{\NeedsTeXFormat,\newcommand,\newcount,\newdimen,\newif} +% \DoNotIndex{\newenvironment,\newtoks,\newwrite,\noexpand} +% \DoNotIndex{\openout} +% \DoNotIndex{\PackageError,\PackageWarning,\PackageInfo} +% \DoNotIndex{\ProcessOptions,\ProvidesPackage} +% \DoNotIndex{\protect} +% \DoNotIndex{\relax,\RequirePackage} +% \DoNotIndex{\setcounter,\slideentry,\space,\string} +% \DoNotIndex{\the} +% \DoNotIndex{\verbatim@,\verbatim@line,\verbatim@processline} +% \DoNotIndex{\write} +% \DoNotIndex{\xdef,\z@} +% +% \changes{0.1}{2011/06/29}{initial release} +% \changes{0.2}{2011/08/07}{proper package, manual and documentation} +% \changes{0.2}{2011/08/07}{appendix tested} +% \changes{0.2}{2011/08/07}{fixed navigation bar} +% \changes{0.2}{2011/08/07}{total number of frames not counting appended frames} +% \changes{0.2}{2011/08/07}{new environment lastframe} +% \changes{0.2}{2011/08/07}{subslideentry} +% \changes{0.2}{2011/08/07}{inserttotalframenumberwithsub} +% \changes{0.2}{2011/08/07}{new option nominiframes} +% \changes{0.2}{2011/08/07}{defaults for bsf@sub...page... macros} +% \changes{0.2}{2011/08/07}{checking .sfp file} +% +% \newcommand{\BSF}{\textsf{BeamerSubFrame}} +% +% \title{The \BSF\ Package\\[1ex] +% Reordering frames in the PDF file without reordering the source} +% \author{Mike Kaufmann\\\href{mailto:m.km@gmx.de}{\texttt{m.km@gmx.de}}} +% \date{\filedate\ (v\fileversion)} +% ^^A-------------------------------------------------------------------------- +% \maketitle +% \begin{abstract} +% The \BSF\ package provides a method to reorder frames in the +% PDF file without reordering the source. Mainly, it is meant to embed or +% append frames with details on some subject. +% \end{abstract} +% +% \tableofcontents +% +% ^^A-------------------------------------------------------------------------- +% \section{Introduction} +% \subsection{Why this Package} +% Of course, usually a presentation is prepared for one occasion. +% But sometimes a presentation is used more then once, and the audience +% and/or the available time differs. +% +% For me, there are two kinds of audience. The first group are the +% sales people, who for the most part only want to know the features +% of a new product I developed. And the second group are the technicians, +% who want to know everything. +% +% So basically, on one time I have to give a presentation in half an hour, +% covering only the basics. But there might be questions, where I need to +% show some details. In this case it's nice to have the necessary frames. +% And an another time, I have to give a presentation in one hour, covering +% also the details. +% +% In both cases, it would be nice to have a presentation, where normally +% only the cursor keys are needed for navigation, and without the necessity +% of clicking on links. +% +% With Beamer, one would have to create two presentation. One with the +% frames containing details at the end, and another one with the details +% between the other frames. +% +% Now here the \BSF\ package comes in handy. After some changes to the source +% of the presentation with the details embedded, both version can be compiled +% out of the same source. To select the version, only one option must be +% changed. +% +% ^^A--------------------------------------------- +% \subsection{A Warning} +% This package is in an early state of development (it's version +% \fileversion). It is already useful, but there are some restrictions (see +% \autoref{sec:restrictions}). And although it's not planned, the user +% interface may change in the future. +% +% ^^A--------------------------------------------- +% \subsection{Feeback and Testing} +% Because this package is very new and still under development, any feedback +% is appreciated. A good location for a discussion would be the newsgroup +% \texttt{comp.text.tex} (or \texttt{de.comp.text.tex}). +% +% And since Beamer offers a lot of features and it is hard to test the +% \BSF\ package with all of them, it would be nice, if some people would +% do some additional testing and/or provide some presentation for testing. +% +% ^^A--------------------------------------------- +% \subsection{Dependencies} +% The \BSF\ package can only be used with the Beamer class (article mode +% is not supported yet). +% +% Additionally, it needs the |verbatim| package. +% +% ^^A--------------------------------------------- +% \subsection{Legal Stuff} +% This program is provided under the terms of the +% \LaTeX\ Project Public License distributed from CTAN +% archives in directory macros/latex/base/lppl.txt. +% +% ^^A-------------------------------------------------------------------------- +% \section{Using the Packages} +% \subsection{Package Options} +% The \BSF\ package has three options. +% +% \DescribeOpt{embed} +% The option |embed| is used to put frames with details between the other +% frames. +% +% \DescribeOpt{append} +% The option |append| is used to remove the frames with details from the other +% frames and append them at the end of the PDF file. +% +% If none of these two options is given, |embed| is used as default. Both +% options are mutually exclusive. If both are given, the last one wins. +% +% \DescribeOpt{nominiframes} +% In themes with miniframes, there are also frame symbols for appended frames +% with details by default. If the option |nominiframes| is given, these frame +% symbols will disappear. This option has only an effect, if the |append| option +% is given too. +% +% ^^A--------------------------------------------- +% \subsection{The \texttt{subframe} Environment} +% \DescribeEnv{subframe} +% For frames which should be embedded or appended contitionally (i.e.\ frames +% with details), the |subframe| environment must be used instead of the |frame| +% environment. Basically, it works the same way as the |frame| environment, +% i.e.\ it has the same options and arguments. +% +% For typesetting, the |frame| environment is used internally. In embed mode +% (i.e.\ the |embed| option is given) it inserts the option |environment=subframe| +% to enable the use of verbatim material in the frames. In append mode the contents +% of the frame is written to a file. Before the contents, |\begin{frame}|, with +% all arguments of the |subframe| environment appended, is inserted. And after +% the contents |\end{frame}| is inserted. +% +% For copying the contents, the |verbatim| package is used. So in append mode +% the |subframe| environment is treated as a |verbatim| +% environment,\footnote{Because of this, the phrase \texttt{\bslash +% end\{subframe\}} cannot be used in a \texttt{subframe} environment.} but +% without typesetting anything. +% +% There should be no parts, sections, or subsections only containing subframes, +% because in append mode, they would have no contents. Since it is not the +% intention of the \BSF\ package, to move parts, sections, or subsections, this +% was not even tested. +% +% ^^A--------------------------------------------- +% \subsection{Appending Frames} +% \DescribeMacro\appendsubframes +% To append the subframes, the macro |\appendsubframes| must be called before +% |\end{document}|. In embed mode, the command simply does nothing. In append +% mode it inputs the file written by the |subframe| environments. +% +% The command is only allowed once and it can only appear right before +% |\end{document}|.\footnote{Both restrictions are not tested by the package yet.} +% Disregarding this may lead to some strange errors. +% +% The command can be omitted to remove the subframes from the PDF file in append +% mode. But links to them will then produce warnigs and will lead somewhere else. +% In themes with miniframes, the links of the miniframe symbols for subframes +% will lead to page 1. +% +% ^^A--------------------------------------------- +% \subsection{Conditional Execution} +% \DescribeMacro\ifappend +% To execute some macros or insert some text according to the mode of the +% \BSF\ package, the marco |\ifappend| can be used. It has two arguments. +% +% \vspace{1ex} +% |\ifappend{|\meta{material for append mode}|}{|\meta{material for embed mode}|}| +% +% \vspace{1ex} +% \noindent +% The first argument is inserted only in append mode and the second one only in +% embed mode. +% +% The macro is intended for conditional links in frames and subframes. It can +% be used in own macros. To do something only in one mode, the argument for the +% other mode can be left empty. +% +% ^^A--------------------------------------------- +% \subsection{The \texttt{lastframe} Environment} +% \DescribeEnv{lastframe} +% Normally, a presentation has a last frame, containing something like ``Thanks +% for listening'' (at least I learned it this way). But using a |frame| +% environmet, the navigation (sidebar, miniframes, and so on) appears as if the +% frame belongs to the last (sub)section. +% +% Using the |lastframe| environment, the navigation has the same appearance as +% on the title frame. +% +% It has the same options and arguments as the |frame| environment, which is +% used internally with all given arguments.. To enable the use of verbatim +% contents, it additionally inserts the option |environment=lastframe|. +% +% The |lastframe| environment must be used only for the last frame (before the +% |\appendsubframes| command), because it sets the counters for parts, sections, +% and subsections to 0. So after a ``lastframe'', sectioning will not work +% properly anymore. +% +% ^^A--------------------------------------------- +% \subsection{Inserts} +% \DescribeMacro\inserttotalframenumber +% Beamers |\inserttotalframenumber| was changed. In append mode it now contains +% the number of frames without the subframes. In embed mode it contains the +% number of frames as usual. +% +% \DescribeMacro\inserttotalframenumberwithsub +% Additionally, the insert |\inserttotalframenumberwithsub| is available. It +% inserts the total number of frames including appended subframes in append mode. +% It is also defined in embed mode. Then it just contains the total number of +% frames (so the same as |\inserttotalframenumber|). +% +% ^^A--------------------------------------------- +% \subsection{Files written} +% The \BSF\ package writes two files. +% \begin{description} +% \item[\texttt{\bslash jobname.sfr}] contains the contents of all subframes. +% The package inputs this file before the end of the document with the +% |\appendsubframes| command. The file is written regardless of |\nofiles|. +% \item[\texttt{\bslash jobname.sfp}] contains the information necessary for +% miniframes. It is written indirectly, using the |.aux| file. So if +% |\nofiles| is used, the |.sfp| file is not written too. +% \end{description} +% Both files are only written and used in append mode. +% +% ^^A--------------------------------------------- +% \subsection{Warnings and Errors} +% Currently, there is one warning and one error in the \BSF\ package. +% +% When loading the package, it checks, if the Beamer class is loaded. If not, +% an error message will be displayed and the package is not loaded. Disregarding +% this error will therefore lead to additional errors. +% +% The |.sfp| file is checked at the end of the document. If it is missing, +% corrupted or incomplete, a warning is given out. In this case some links of +% miniframe symbols for subframes will lead to page 1. Of course this applies +% only to themes with miniframes. +% +% ^^A--------------------------------------------- +% \subsection{Conditional Execution (2)} +% \DescribeMacro\ifsubframe +% This macro is intended to be used in themes, to make things appear differently +% on normal frames and subframes. This could be used to set some marker on +% subframes.\footnote{There is an example in the example file, which can be +% generated from \texttt{beamersubframe.dtx}.} The command works regardless of +% the mode. +% +% \vspace{1ex} +% |\ifsubframe{|\meta{material for subframes}|}{|\meta{material for normal frames}|}| +% +% \vspace{1ex} +% \noindent +% The first argument is inserted only in subframes and the second one only in +% normal frames. An unused argument may be left empty. +% +% ^^A--------------------------------------------- +% \subsection{The \texttt{subslideentry}} +% \label{sec:man-subse} +% \DescribeMacro\subslideentry +% This is not a macro for normal users. It may be useful for people who want to +% write their own theme, willing to do more, then defining and using templates. +% If you are not one of these people, just skip this section. +% +% In append mode, the \BSF\ package writes a |\subslideentry| instead of a +% |\slideentry| for subframes to the |.nav| file. The |\subslideentry| has the +% same arguments as the |\slideentry|. By default, it just passes its arguments +% to |\slideentry|. This way it does the same as |\slideentry|, independent of +% the used theme. By redefining |\subslideentry|, it is possible to, for example, +% make miniframes for subframes appear differently form miniframes for normal +% frames. +% +% ^^A-------------------------------------------------------------------------- +% \section{The Look and Feel} +% \subsection{In Embed Mode} +% In embed mode, the frames containing details are between the other frames. +% And navigation (navigation bar, sidebar and so on) behaves the same way, as +% it would without the \BSF\ package. Of course the highlighting of section +% and subsection names is the same too. +% +% ^^A--------------------------------------------- +% \subsection{In Append Mode} +% In apend mode, the frames containing details are at the end of the PDF file. +% +% The navigation in the main part (the part of the PDF without the details) +% behaves as if the frames with details are not part of the PDF. And for the +% total number of frames, the frames with details are not counted (leading to +% something like ``41 / 29'' for the subframes in themes with a footline like +% AnnArbor). +% +% In themes with miniframes there are also frame symbols for the frames with +% details. Clicking on the symbols leads to these frames. But if the option +% |nominiframes| is given, the frame symbols will disappear and the symbol for +% the normal frame before the frame with details is highlighted on the frame +% with details. +% +% The navigation bar in the appended part (the part of the PDF with frames +% containing details) behaves as follows +% \begin{description} +% \item[slide and frame symbol:] behave as if the appended frames where at the +% end of the source, so leading to the next or previous slide or frame in +% the PDF (arrows), or leading to the last or first slide of a frame. +% \item[section and subsection symbol:] are always leading to the appropriate +% slides in the main part of the PDF. +% \item[presentation symbol:] leads to the first frame of the presentation or +% the last frame of the main part (before a possible appendix). +% \item[appendix symbol:] leads to the first or last frame of the appendix. +% \end{description} +% +% The links for sections and subsections in the sidebar and others lead to the +% first slide of the section or subsetion. +% +% In the navigation part of appended frames, the section and subsection names +% are the same and the highlighting is done as if the frames where embedded. +% +% ^^A-------------------------------------------------------------------------- +% \section{A practical Approach} +% \subsection{The Order of Frames} +% If a presentation contains details on some items, there are two ways to +% insert them. +% \begin{enumerate} +% \item The details can be inserted right after the according item. This is +% useful, if it is planned to present the details. +% \item The details can be inserted at the end. This is useful, if it is not +% planned to present the details, but they might be needed to answer +% question. +% \end{enumerate} +% +% In both cases, links can be useful. In the first case, these are links to +% skip the details. And in the second case, these are links to jump to and +% return from the details. +% +% The first case is shown in \autoref{fig:embed} and the second in +% \autoref{fig:append}. In both pictures the black lines denote the +% transitions using the cursor keys, and the blue lines the transitions +% using links. The dashed black lines are transitions by cursor keys, which +% are normally not needed. +% +% \begin{figure}[htb] +% \includegraphics[width=\textwidth]{beamersubframe-embed.pdf} +% \caption{Frame Order with Details embedded}\label{fig:embed} +% \end{figure} +% +% \begin{figure}[htb] +% \includegraphics[width=\textwidth]{beamersubframe-append.pdf} +% \caption{Frame Order with Details appended}\label{fig:append} +% \end{figure} +% +% Of course, the way the links are arranged in the picuters is only an example. +% There are hundreds of possibilities. And how the links are arranged the best +% way, depends on the presentation \emph{and} on the person giving the +% presentation. For this section, let's consider the links in the pictures +% the ideal way. +% +% To use the \BSF\ package, in the source the frames must be arranged as shown +% in \autoref{fig:embed}. By default, the frames in the PDF file are arranged +% the same way. By just using the option |append|, the frames in the PDF file +% will be arragned as shown in \autoref{fig:append}. +% +% ^^A--------------------------------------------- +% \subsection{Basic Changes to the Source} +% To use the \BSF\ package, a few changes to the source of a presentaion must +% be applied. In the example below, the left side shows the source before the +% changes and the right side the source after them. +% +% \noindent +% \begin{minipage}{0.49\textwidth} +% \footnotesize +% \begin{verbatim} +% \begin{frame}{Frame on Foo} +% material on foo +% \end{frame} +% +% \begin{frame} +% {Details on Foo Item b} +% details for item b +% \end{frame} +% +% \begin{frame}{Another Frame} +% other material +% \end{frame} +% +% \end{document} +% \end{verbatim} +% \end{minipage} +% \hfill +% \begin{minipage}{0.49\textwidth} +% \footnotesize +% \begin{verbatim} +% \begin{frame}{Frame on Foo} +% material on foo +% \end{frame} +% +% \begin{subframe} +% {Details on Foo Item b} +% details for item b +% \end{subframe} +% +% \begin{frame}{Another Frame} +% other material +% \end{frame} +% \appendsubframes +% \end{document} +% \end{verbatim} +% \end{minipage} +% +% Here, the |frame| environment for the frame with details was changed to the +% |subframe| environment, and the command |\appendsubframes| was inserted +% before |\end{document}|. This is the minimum of changes necessary. +% +% It is not necessary, to change the arguments of subframes. Also, there is no +% need to change the contents of subframes. Even the |fragile| option (for +% verbatim material) will work, because the |subframe| environment automatically +% adds the option |environment=subframe|. +% +% ^^A--------------------------------------------- +% \subsection{Conditional Links} +% \label{sec:clinks} +% How links are used and arranged, it totally up to the user, because this is +% highly individual. But nevertheless, links in embed mode should be different +% from links in append mode. For example, a link on a frame before a subframe +% (or a group of subframes) with details should skip them in embed mode, while +% in append mode the same link should lead to the subframe (or the first +% subframe of the group). +% +% Let's stay with the examples shown in \autoref{fig:embed} and +% \autoref{fig:append}. +% +% The link ``Skip Details'' on slide 2 of ``frame on foo'' in embed mode is +% replaced by a link ``Goto Details'' in append mode. In the first case the +% destination is slide 3 of ``frame on foo'' and in the second case it is +% slide 1 of ``details on foo item b''. +% +% Let's say, ``frame on foo'' has a label ``lfoo'', given as option |label=lfoo| +% to the |frame| environment (this is also necessary, if the \BSF\ package is +% not used). For append mode a label must be added to the subframe ``details +% on foo item b''. Let's call it ``ldfoob''. +% +% For embed mode the link can be realised with +% \begin{verbatim} +% \uncover<2>{\hyperlink{lfoo<3>}{\beamerskipbutton{Skip Details}}} +% \end{verbatim} +% and for append mode with +% \begin{verbatim} +% \uncover<2>{\hyperlink{ldfoob}{\beamergotobutton{Goto Details}}} +% \end{verbatim} +% +% In order to make the link work as expected in both modes, without the need to +% change the source, |\ifappend| can be used like this: +% \begin{verbatim} +% \ifappend{\uncover<2>{\hyperlink{ldfoob}% +% {\beamergotobutton{Goto Details}}}}% +% {\uncover<2>{\hyperlink{lfoo<3>}% +% {\beamerskipbutton{Skip Details}}}} +% \end{verbatim} +% +% The link to return from the frames with details can then be done this way: +% \begin{verbatim} +% \ifappend{\uncover<4>{\hyperlink{lfoo<3>}% +% {\beamerreturnbutton{Return from Details}}}}{} +% \end{verbatim} +% This has the disatvantage, that in embed mode there is no link, and therefore +% the layout will differ between embed mode and append mode. But this can be +% fixed by adding an invisible button like this: +% \begin{verbatim} +% \ifappend{\uncover<4>{\hyperlink{lfoo<3>} +% {\beamerreturnbutton{Return from Details}}}}% +% {\visible<0>{\beamerreturnbutton{Return from Details}}} +% \end{verbatim} +% +% Typing all this every time can be a bit exhausting. So let's define some macros. +% +% For skipping or going to the details, a macro called |\linkdetail| can be +% defined as +% \begin{verbatim} +% \newcommand<>{\linkdetail}[4]{% +% \ifappend{\uncover#5{\hyperlink{#3}{\beamergotobutton{#4}}}}% +% {\uncover#5{\hyperlink{#1}{\beamerskipbutton{#2}}}} +% } +% \end{verbatim} +% +% The command is overlay-aware and it has four arguments: +% \begin{description} +% \item[\texttt{\#1}] is the label for the destination to go to in order to skip +% the details. +% \item[\texttt{\#2}] is the text for the link to skip the details. +% \item[\texttt{\#3}] is the label for the destination to go to in order to jump +% to the details. +% \item[\texttt{\#4}] is the text for the link to go to the details. +% \end{description} +% Now the link on the frame before the subframe can be written as +% \begin{verbatim} +% \linkdetails<2>{lfoo<3>}{Skip Details}{ldfoob}{Goto Details} +% \end{verbatim} +% +% For returning from the details, a macro called |\returndetail| can be +% defined as +% \begin{verbatim} +% \newcommand<>{\returndetail}[2]{% +% \ifappend{\uncover#3{\hyperlink{#1}{\beamerreturnbutton{#2}}}}% +% {\visible<0>{\beamerreturnbutton{#2}}} +% } +% \end{verbatim} +% +% The command is also overlay-aware and it has two arguments: +% \begin{description} +% \item[\texttt{\#1}] is the label for the destination to go to in order to return +% from details. +% \item[\texttt{\#2}] is the text for the link to return from details. +% \end{description} +% And the link on the subframe can be written as +% \begin{verbatim} +% \returndetails<4>{lfoo<3>}{Return from Details} +% \end{verbatim} +% +% Of course, these are only examples. How links are done, is up to the user. +% And therefore, it is also up to the user, how commands like |\linkdetail| and +% |\returndetail| are defined. +% +% Another example: I like my links to be active only on the slide, they are +% needed. On all other slides, they should be covered and inactive. So I definded +% the macros a bit different: +% \begin{verbatim} +% \newcommand<>{\linkdetail}[4]{% +% \ifappend{\uncover#5{\alt#5{\hyperlink{#3}{\beamergotobutton{#4}}}% +% {\beamergotobutton{#4}}}}% +% {\uncover#5{\alt#5{\hyperlink{#1}{\beamerskipbutton{#2}}}% +% {\beamerskipbutton{#2}}}} +% } +% \newcommand<>{\returndetail}[2]{% +% \ifappend{\uncover#3{\alt#3{\hyperlink{#1}{\beamerreturnbutton{#2}}}% +% {\beamerreturnbutton{#2}}}}{} +% } +% \end{verbatim} +% +% ^^A--------------------------------------------- +% \subsection{An Example} +% \subsubsection{Without \BSF} +% As an example, let's realise frames in the order shown in \autoref{fig:embed} +% and \autoref{fig:append}. To show the difference of the source with and +% without using the \BSF\ package, first the order shown in \autoref{fig:embed} +% is realised without \BSF. +% +% \begin{verbatim} +% \documentclass{beamer} +% \usepackage{lmodern} +% \usepackage[T1]{fontenc} +% +% \begin{document} +% \begin{frame}{some frame} +% \begin{itemize}[<+->] +% \item there is foo +% \item foo is good +% \item and there is bar +% \item bar is good too +% \end{itemize} +% \end{frame} +% +% \begin{frame}<1-2>[label=lfoo]{frame on foo} +% \begin{itemize}[<+->] +% \item item a +% \item item b \uncover<2>{\hyperlink{lfoo<3>}% +% {\beamerskipbutton{Skip Details}}} +% \item item c +% \item item d +% \end{itemize} +% \end{frame} +% +% \begin{frame}{details on foo item b} +% \begin{itemize}[<+->] +% \item item b.1 +% \item item b.2 +% \item item b.3 +% \item item b.4 +% \end{itemize} +% \end{frame} +% +% \begin{frame} +% \frametitle{more details on foo item b} +% \begin{itemize}[<+->] +% \item item b.5 +% \item item b.6 +% \item item b.7 +% \item item b.8 +% \end{itemize} +% \end{frame} +% +% \againframe<3->{lfoo} +% +% \begin{frame}{frame on bar} +% \begin{itemize}[<+->] +% \item item w +% \item item x +% \item item y +% \item item z \uncover<4>{\hyperlink{lother}% +% {\beamerskipbutton{Skip Details}}} +% \end{itemize} +% \end{frame} +% +% \begin{frame} +% \frametitle{details on bar item z} +% \begin{itemize}[<+->] +% \item item z.1 +% \item item z.2 +% \item item z.3 +% \item item z.4 +% \end{itemize} +% +% \vspace{2ex} +% \uncover<4>{\hyperlink{lother}{\beamerskipbutton{Skip further Details}}} +% \end{frame} +% +% \begin{frame}{more details on bar item z} +% \begin{itemize}[<+->] +% \item item z.5 +% \item item z.6 +% \item item z.7 +% \item item z.8 +% \end{itemize} +% \end{frame} +% +% \begin{frame}[label=lother]{another frame} +% \begin{itemize}[<+->] +% \item conclusion 1 +% \item conclusion 2 +% \item conclusion 3 +% \item conclusion 4 +% \end{itemize} +% \end{frame} +% \end{document} +% \end{verbatim} +% +% ^^A------------------------- +% \subsubsection{With \BSF} +% And now the same order of frames, but this time using the \BSF\ package and +% with some comments. +% \begin{verbatim} +% \documentclass{beamer} +% \usepackage{lmodern} +% \usepackage[T1]{fontenc} +% \end{verbatim} +% Here, the option |embed| has to be changed to |append|, to get the order as +% shown in \autoref{fig:append}. +% \begin{verbatim} +% \usepackage[embed]{beamersubframe} +% \end{verbatim} +% The two commands, as explained in \autoref{sec:clinks}. +% \begin{verbatim} +% \newcommand<>{\linkdetail}[4]{% +% \ifappend{\uncover#5{\hyperlink{#3}{\beamergotobutton{#4}}}}% +% {\uncover#5{\hyperlink{#1}{\beamerskipbutton{#2}}}} +% } +% \newcommand<>{\returndetail}[2]{% +% \ifappend{\uncover#3{\hyperlink{#1}{\beamerreturnbutton{#2}}}}% +% {\visible<0>{\beamerreturnbutton{#2}}} +% } +% \end{verbatim} +% The next command realises a link with the same destination (argument |#1|) for +% both modes, but different texts (|#2| for embed mode and |#3| for append mode. +% \begin{verbatim} +% \newcommand<>{\linkdifftext}[3]{% +% \ifappend{\uncover#4{\hyperlink{#1}{\beamergotobutton{#3}}}}% +% {\uncover#4{\hyperlink{#1}{\beamerskipbutton{#2}}}} +% } +% \end{verbatim} +% The template defined below is an example for the use of |\ifsubframe|. It puts +% the text ``detail'' in the lower left corner of subframes and ``main part'' in +% the lower left corner of normal frames. Careful: it replaces a sidebar, so +% this will not work with themes like Berkeley. +% \begin{verbatim} +% \defbeamertemplate*{sidebar left}{bsf test}[1][50] +% { +% \vfill% +% \rlap{\hskip0.1cm\hbox{\color{fg!#1!bg}\tiny{\ifsubframe{detail}{main part}}}}% +% \vskip2pt% +% } +% +% \begin{document} +% \begin{frame}{some frame} +% \begin{itemize}[<+->] +% \item there is foo +% \item foo is good +% \item and there is bar +% \item bar is good too +% \end{itemize} +% \end{frame} +% +% \begin{frame}<1-2>[label=lfoo]{frame on foo} +% \begin{itemize}[<+->] +% \item item a +% \end{verbatim} +% Here, the link was changed. +% \begin{verbatim} +% \item item b \linkdetail<2>{lfoo<3>}{Skip Details}{ldfoob}{Goto Details} +% \item item c +% \item item d +% \end{itemize} +% \end{frame} +% \end{verbatim} +% For the next two frames the environment was changed to |subframe|. And for the +% first, the label |ldfoob| was added. +% \begin{verbatim} +% \begin{subframe}[label=ldfoob]{details on foo item b} +% \begin{itemize}[<+->] +% \item item b.1 +% \item item b.2 +% \item item b.3 +% \item item b.4 +% \end{itemize} +% \end{subframe} +% +% \begin{subframe} +% \frametitle{more details on foo item b} +% \begin{itemize}[<+->] +% \item item b.5 +% \item item b.6 +% \item item b.7 +% \item item b.8 +% \end{itemize} +% +% \vspace{2ex} +% \end{verbatim} +% The link to return from details was added. Because there was no link in the +% version without \BSF\ the layout of the frame is now changed compared to that +% version. But it doesn't change from one mode to the other, because of the way +% |\returndetails| was definded. +% \begin{verbatim} +% \returndetail<4>{lfoo<3>}{Return from Details} +% \end{subframe} +% +% \againframe<3->{lfoo} +% +% \begin{frame}{frame on bar} +% \begin{itemize}[<+->] +% \item item w +% \item item x +% \item item y +% \end{verbatim} +% Again, the link was changed here. +% \begin{verbatim} +% \item item z \linkdetail<4>{lother}{Skip Details}{ldbarz}{Goto Details} +% \end{itemize} +% \end{frame} +% \end{verbatim} +% For the next two frames the environment was changed to |subframe| also. And +% for the first, the label |ldbarz| was added. +% \begin{verbatim} +% \begin{subframe}[label=ldbarz] +% \frametitle{details on bar item z} +% \begin{itemize}[<+->] +% \item item z.1 +% \item item z.2 +% \item item z.3 +% \item item z.4 +% \end{itemize} +% +% \vspace{2ex} +% \end{verbatim} +% This link was changed, so the text differs between modes. But it would have +% been possible here, to leave the link unchanged. +% \begin{verbatim} +% \linkdifftext<4>{lother}{Skip further Details}{Return from Details} +% \end{subframe} +% +% \begin{subframe}{more details on bar item z} +% \begin{itemize}[<+->] +% \item item z.5 +% \item item z.6 +% \item item z.7 +% \item item z.8 +% \end{itemize} +% +% \vspace{2ex} +% \end{verbatim} +% Again, the link was added here, resulting also in a change off layout compared +% to the first version. +% \begin{verbatim} +% \returndetail<4>{lother}{Return from Details} +% \end{subframe} +% +% \begin{frame}[label=lother]{another frame} +% \begin{itemize}[<+->] +% \item conclusion 1 +% \item conclusion 2 +% \item conclusion 3 +% \item conclusion 4 +% \end{itemize} +% \end{frame} +% \end{verbatim} +% And finally, the |\appendsubframes| command was inserted here. +% \begin{verbatim} +% \appendsubframes +% \end{document} +% \end{verbatim} +% +% The source of the second version is available as example file, which can be +% generated from |beamersubframe.dtx|. +% +% ^^A-------------------------------------------------------------------------- +% \section{Restrictions} +% \label{sec:restrictions} +% Since this is an early version of the \BSF\ package, there are some +% restrictions. +% +% \begin{itemize} +% \item The package was only tested with Beamer mode |beamer|. Using other +% modes may lead to strange errors. +% \item Supporting material, like notes, is not tested yet. +% \item Lectures are not tested yet. +% \item There is no support for subsubsections (not even tested). And it is not +% planned at all. +% \item There is no |\subframe| command. +% \item There is no |\againsubframe| command. +% \end{itemize} +% +% ^^A-------------------------------------------------------------------------- +% \section{Testing} +% For testing the \BSF\ package the following themes were used: +% \begin{itemize} +% \item Dresden +% \item Darmstadt +% \item Berkeley +% \item Montpellier +% \item Malmoe +% \item AnnArbor +% \end{itemize} +% +% The themes were used without options. They where choosen to cover all types of +% navigation possible with the themes delivered with Beamer. If I missed +% something and this doesn't work, please let me know. If there are other things +% not working (e.g.\ some inserts), please let me know too. In both cases, a +% file for testing would be nice. +% +% ^^A-------------------------------------------------------------------------- +% \section{ToDo} +% Although the \BSF\ package is already useful, there are a lot of things left +% to do: +% \begin{description} +% \item[testing] Beamer has a lot of features, an many of them are still +% not tested. +% \item[Beamer modes] I have to admit, I didn't even test them. +% \item[notes] The same here. +% \item[lectures] And again, not tested. +% \item[macros] There are commands, which would be nice to have, like +% |\subframe|, |\againsubframe|, and |\subnote| (to get notes between +% frames moved too) +% \item[levels] With multiple levels of subframes, it would be possible, to have +% details on details (on details on \dots). And then, one could embed the +% first $n$ levels of details, and append the others. +% \end{description} +% +% The list is not complete. If someone has an item to add, please let me know. +% +% ^^A-------------------------------------------------------------------------- +% \StopEventually{\newpage\PrintIndex} +% ^^A \PrintChanges} +% +% ^^A-------------------------------------------------------------------------- +% \newpage +% \section{The Code} +% \subsection{The Usual} +% First the usual things. +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{beamersubframe}[\filedate\space + v\fileversion\space reordering beamer frames] +% \end{macrocode} +% +% ^^A--------------------------------------------- +% \subsection{Check the Class} +% Since the \BSF\ package only works with the Beamer class and article mode is +% not supported yet, check for the Beamer class. If it is not loaded, throw an +% error message and stop loading the package. +% \begin{macrocode} +\@ifclassloaded{beamer}{}{% + \PackageError{beamersubframe}{% + The package works only with the beamer class,\MessageBreak + therefore it is not loaded. + }{% + The package is not loaded, because it needs the\MessageBreak + beamer class. Continuing may lead to additional\MessageBreak + errors because of undefined commands. + } + \endinput +} +% \end{macrocode} +% +% ^^A--------------------------------------------- +% \subsection{``Variables''} +% \begin{macro}{\if@bsf@append} +% First there is the main flag to distinguish between append mode and embed mode. +% \begin{macrocode} +\newif\if@bsf@append +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@bsf@miniframes} +% This flag is true by default. It is set to false by the option |nominiframes|. +% \begin{macrocode} +\newif\if@bsf@miniframes +\@bsf@miniframestrue +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@bsf@subframe} +% This flag is set to true for subframes in both modes. For normal frames it is +% false. +% \begin{macrocode} +\newif\if@bsf@subframe +\@bsf@subframefalse +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@bsf@nosfnum} +% This flag is used for checking the |.sfp| file. +% \begin{macrocode} +\newif\if@bsf@nosfnum +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@bsf@firstline} +% This flag is needed to write |\begin{frame}| in front of the arguments of a +% |subframe| environment to the |.sfr| file in append mode. +% \begin{macrocode} +\newif\if@bsf@firstline +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@bsf@firstpart} +% This flag is needed by |\bsfrestorepart| to initialize some macros used as +% variables instead of writing the |\bsf@partpages| entry to the |.nav| file. +% \begin{macrocode} +\newif\if@bsf@firstpart +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@bsf@firstsection} +% This flag is needed by |\bsfrestoresection| to initialize some macros used as +% variables instead of writing the |\bsf@sectionpages| entry to the |.nav| file. +% \begin{macrocode} +\newif\if@bsf@firstsection +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@bsf@firstsubsection} +% This flag is needed by |\bsfrestoresubsection| to initialize some macros used +% as variables instead of writing the |\bsf@subsectionpages| entry to the |.nav| +% file. +% \begin{macrocode} +\newif\if@bsf@firstsubsection +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@bsf@nosubsection} +% This flag is used by |\bsfrestoresection| and |\bsfrestoresubsection| to +% determine, if a section contains any subsections. +% \begin{macrocode} +\newif\if@bsf@nosubsection +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@bsf@prevnosubsection} +% This flag contains the final state of |\if@bsf@nosubsection| for the previous +% section. +% \begin{macrocode} +\newif\if@bsf@prevnosubsection +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bsf@frame@param} +% This token register is used to store the first three arguments of the +% |subframe| environment in embed mode, after adding the option +% |environmet=subframe|. The contents is passed to the |frame| environmet as +% its first three arguments. +% \begin{macrocode} +\newtoks\bsf@frame@param +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bsf@sfrout} +% The stream used to write the |.sfr| file. It holds the contents of all +% subframes. The file is only written and used in append mode. +% \begin{macrocode} +\newwrite\bsf@sfrout +% \end{macrocode} +% \end{macro} +% +% ^^A--------------------------------------------- +% \subsection{Options and Packages} +% \begin{option}{embed} +% The options are rather simple. The option |embed| just sets |\if@bsf@append| +% to false. +% \begin{macrocode} +\DeclareOption{embed}{\@bsf@appendfalse} +% \end{macrocode} +% \end{option} +% \begin{option}{append} +% And |append| sets |\if@bsf@append| to true. +% \begin{macrocode} +\DeclareOption{append}{\@bsf@appendtrue} +% \end{macrocode} +% \end{option} +% \begin{option}{nominiframes} +% The option |nominiframes| sets |\if@bsf@miniframes| to false. +% \begin{macrocode} +\DeclareOption{nominiframes}{\@bsf@miniframesfalse} +% \end{macrocode} +% \end{option} +% The default is set and the options are processed. +% \begin{macrocode} +\ExecuteOptions{embed} +\ProcessOptions*\relax +% \end{macrocode} +% And the verbatim package is loaded. +% \begin{macrocode} +\RequirePackage{verbatim} +% \end{macrocode} + +% ^^A--------------------------------------------- +% \subsection{Navigation} +% \subsubsection{Sidebar and Headline} +% To get the highlighting of sections and subsections on appened subframes as if +% the frames were embedded, some counters must be restored to the values, they +% had at the point, the subframe appeared in the source. Additionally, for the +% headline some inserts must be restored. +% +% To achieve this, the |subframe| environment writes a macro with all necessary +% arguments to the |.sfr| file. This is done for each subframe, before its +% contents, embedded in a |frame| environmet, is written to the file (see +% \autoref{sec:code-subframe}). +% +% \begin{macro}{\bsfrestore} +% The macro is called |\bsfrestore|. It is executed, when the |.sfr| file is +% loaded. It restores the counters for part (|#1|), section (|#2|), and +% aubsection (|#3|). It also restores the counter subsectionslide (|#4|), which +% is needed for miniframes. +% +% Then |\insertsectionhead| and |\insertsubsectionhead| are restored to their +% meanings at the point, the subframe appeard in the source. These meanings were +% stored to the two macros |\bsf@sectionhead|\meta{part}|.|\meta{section} and +% |\bsf@subsectionhead|\meta{part}|.|\meta{section}|.|\meta{subsection} by the +% |subframe| environment (see \autoref{sec:code-subframe}). +% +% After that, the inserts for the part, section, and subsection numbers are +% restored. +% +% The macro is also used by the |lastframe| environment (see +% \autoref{sec:code-lastframe}). +% \begin{macrocode} +\newcommand{\bsfrestore}[4]{% + \setcounter{part}{#1}% + \setcounter{section}{#2}% + \setcounter{subsection}{#3}% + \setcounter{subsectionslide}{#4}% + \expandafter\let\expandafter\insertsectionhead + \csname bsf@sectionhead\the\c@part.\the\c@section\endcsname + \expandafter\let\expandafter\insertsubsectionhead + \csname bsf@subsectionhead\the\c@part.\the\c@section.\the\c@subsection\endcsname + \def\insertpartheadnumber{#1}% + \def\insertsectionheadnumber{#2}% + \def\insertsubsectionheadnumber{#3}% +} +% \end{macrocode} +% \end{macro} +% +% ^^A------------------------- +% \subsubsection{Miniframes} +% \label{sec:code-miniframes} +% To typset miniframes, Beamer writes a |\slideentry| with the necessary +% arguments to the |.nav| file. Because miniframes should appear, as if the +% subframes are embedded, the |subframe| environment has to write such an entry +% at the point, the subframe appears in the source. But instead of a +% |\slideentry|, \BSF\ writes a |\subslideentry| (see \autoref{sec:man-subse}). +% +% Argument |#4| of |\slideentry| contains the start page and the end page of the +% frame. Unfortunately, for subframes these numbers are unknown, until the +% |.sfr| file was loaded by |\appendsubframes|. +% +% To get around this, for each subframe two macros are used. Their names \linebreak +% are +% |\bsf@substartpage|\meta{part}|.|\meta{section}|.|\meta{subsection}|.|\meta{subsectionslide} +% and \linebreak +% |\bsf@subendpage|\meta{part}|.|\meta{section}|.|\meta{subsection}|.|\meta{subsectionslide}. +% Here \meta{part}, \meta{section} and so on are the numbers. +% +% Now at the point where the subframe appears in the souce, the |\subslideentry| +% is written. Instead of the unknown frame numbers, it contains the sequence +% |{\bsf@usenum{bsf@substartpage...}/\bsf@usenum{bsf@subendpage...}}| as argument +% |#4|. After a subframe was typeset by loading the |.sfr| file, the necessary +% information is written to the |.sfp| file. In the next \TeX\ run, when loading +% the |.sfp| file at the beginning of the document (see \autoref{sec:code-beginend}), +% these macros are all defined. +% +% \begin{macro}{\bsf@subnum} +% The first macro involved is just a shortcut to get the numbers. +% \begin{macrocode} +\def\bsf@subnum{% + \the\c@part.\the\c@section.\the\c@subsection.\the\c@subsectionslide +} +% \end{macrocode} +% \end{macro} +% +% Beamer uses the macro |\beamer@writeslidentry| to write the |\slideentry| and +% the |\beamer@framepages| entry (used for the navigation bar) to the |.nav| +% file. For subframes this is split into two macros. +% +% \begin{macro}{\beamer@writeslidentry@miniframes} +% The |\subslideentry| is written by |\beamer@writeslidentry@miniframes|. The +% macro is called directly by the |subframe| environment (see +% \autoref{sec:code-subframe}). +% \begin{macrocode} +\def\beamer@writeslidentry@miniframes{% + \addtocontents{nav}% + {\protect\headcommand{% + \protect\subslideentry{\the\c@section}{\the\c@subsection}% + {\the\c@subsectionslide}% + {\protect\bsf@usenum{bsf@substartpage\bsf@subnum}/% + \protect\bsf@usenum{bsf@subendpage\bsf@subnum}}% + {\lastsubsection}{\the\c@part}}}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\beamer@writeslidentry@navbar} +% The |\beamer@framepages| entry is written by |\beamer@writeslidentry@navbar|. +% And it also writes the |\bsfsubframepages| entry to the |.sfp| file. +% +% This macro is used to replace |\beamer@writeslidentry|, before the |.sfr| file +% is loaded. This is done in |\appendsubframes| (see \autoref{sec:code-appendsub}). +% \begin{macrocode} +\def\beamer@writeslidentry@navbar{% + \expandafter\beamer@ifempty\expandafter{\beamer@framestartpage}{}% does not happen normally + {%else + \addtocontents{nav}% + {\protect\headcommand{% + \protect\beamer@framepages{\beamer@framestartpage}{\beamer@frameendpage}}}% + \addtocontents{sfp}{% + \protect\bsfsubframepages{\the\c@part}{\the\c@section}{\the\c@subsection}% + {\the\c@subsectionslide}{\beamer@framestartpage}{\beamer@frameendpage}}% + \clearpage\beamer@notesactions% + }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\subslideentry} +% The |\subslideentry| is initialized in a way that it does the same as the +% |\slideentry|. Because |\slideentry| is refedined by some themes, |\let| can +% not be used here. +% \begin{macrocode} +\def\subslideentry{\slideentry} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bsfsubframepages} +% The |.sfp| file contains one |\bsfsubframepages| entry for each subframe. The +% arguments are the part number (|#1|), the section number (|#2|), the subsection +% number (|#3|), the subsectionslide number (|#4|), and the first (|#5|) and the +% last page of the subframe (|#6|). +% +% When the |.sfp| file is loaded, each |\bsfsubframepages| defines two macros +% |\bsf@substartpage...| and |\bsf@subendpage...| used by the |\subslideentry|. +% \begin{macrocode} +\def\bsfsubframepages#1#2#3#4#5#6{% + \expandafter\def\csname bsf@substartpage#1.#2.#3.#4\endcsname{#5}% + \expandafter\def\csname bsf@subendpage#1.#2.#3.#4\endcsname{#6}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bsf@usenum} +% The macro |\bsf@usenum|, used in the |\subslideentry|, sets a default in case +% the |\bsf@substartpage...| and |\bsf@subendpage...| macros are not defined due +% to a missing, corrupted or incomplete |.sfp| file. Without this, there could +% be errors which would persist on every subsequent run of \TeX. +% \begin{macrocode} +\def\bsf@usenum#1{% + \@ifundefined{#1}{1}{\csname #1\endcsname}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bsf@checksfp} +% In order to warn the user about a missing, corrupted or incomplete |.sfp| file, +% the file is checked. This is done indirectly by checking, if all +% |\bsf@substartpage...| and |\bsf@subendpage...| macros in the current |.nav| +% file are defined. +% +% For this all commands in the |.nav| file are executed using Beamers |\dohead| +% command. Because some of the commands would typeset something, they are +% disabled and everything is done in a group to keep the changes local. +% +% The macro |\bsf@usenum| is also redefined to set the flag |\if@bsf@nosfnum| to +% true in case one of the checked macros is undefined. +% \begin{macrocode} +\def\bsf@checksfp{% + \begingroup + \@bsf@nosfnumfalse + \def\bsf@usenum##1{% + \@ifundefined{##1}{\@bsf@nosfnumtrue}{}} + \def\slideentry##1##2##3##4##5##6{}% + \def\partentry##1##2{}% + \def\sectionentry##1##2##3##4##5{}% + \def\beamer@subsectionentry##1##2##3##4##5{}% + \def\subslideentry##1##2##3##4##5##6{% + \bsf@checksfnum(##4)}% + \dohead + \if@bsf@nosfnum + \PackageWarningNoLine{Beamer SubFrame}{% + Missing, incomplete or corrupted file\MessageBreak + \jobname.sfp! Links for miniframes of\MessageBreak + subframes may be wrong. Please run TeX\MessageBreak + again} + \fi + \endgroup +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bsf@checksfnum} +% The macro |\bsf@checksfnum| is just used by |\bsf@checksfp| to get rid of the +% slash in argument |#4| of the |\subslideentry|. +% \begin{macrocode} +\def\bsf@checksfnum(#1/#2){#1#2} +% \end{macrocode} +% \end{macro} +% +% ^^A------------------------- +% \subsubsection{Navigation Bar} +% Getting the navigation bar right takes some effort. First lets take a look, +% what Beamer does to get the necessary information for the navigation bar. +% +% \paragraph{How Beamer does it}~\\ +% Beamer writes several different entries to the |.nav| file. +% \begin{description} +% \item[\texttt{\bslash beamer@framepages}] with the first and the last page of +% the frame as arguments. It is written for every frame at its end. +% \item[\texttt{\bslash beamer@subsectionpages}] with the first and the last +% page of the subsection as arguments. It is written by the |\subsection| +% command for the previous subsection, as well as by |\section| and +% |\part| and the end of the document for the last subsection. +% \item[\texttt{\bslash beamer@sectionpages}] with the first and the last page +% of the section as arguments. It is written by the |\section| command for +% the previous section, as well as by |\part| and the end of the document +% for the last section. +% \item[\texttt{\bslash beamer@partpages}] with the first and the last page of +% the part as arguments. It is written by the |\part| command for the +% previous part and the end of the document for the last part. +% \item[\texttt{\bslash beamer@documentpages}] with the last page of the +% documnet as argument. It is written at the end of the document. +% \end{description} +% +% The macros in the |.nav| file are executed once for every page (i.e.\ slide). +% By this the entry |\beamer@framepages| sets the macro |\beamer@startpageofframe| +% to its first argument and |\beamer@endpageofframe| to its second argument, but +% only if the current page is $\ge$ than the first argument and $\le$ than the +% second one. Similar macros are set the same way by the other entries. +% +% The frame icon is then typeset in a way, that +% \begin{itemize} +% \item the left arrow points to page |\beamer@startpageofframe| $-1$, +% \item the left part of the frame symbol points to page |\beamer@startpageofframe|, +% \item the right part of the frame symbol points to page |\beamer@endpageofframe|, +% \item and the right arrow points to page |\beamer@endpageofframe| $+1$. +% \end{itemize} +% The arrows are limited 1 or |\beamer@endpageofdocument| respectively. The icons +% for subsections and sections are typeset in a similar way. +% +% The right part of the presentation symbol or (if there is an appendix) of the +% appendix symbol will point to page |\beamer@endpageofdocument|. + +% \paragraph{How \BSF\ does it}~\\ +% The frame icon should point to the previous or next frame or subframe in the +% PDF file. This is simply achieved by writing the |\beamer@framepages| entry +% with |\beamer@writeslidentry@navbar| (see \autoref{sec:code-miniframes}) for +% every subframe. +% +% The section icon should point to the first and last page of the section the +% subframe belongs to in the main part. For this, the first page of the first +% and the last page of the last subframe of a section is needed also. The +% information is stored in two steps. +% \begin{enumerate} +% \item A macro |\bsfrestoresection| is written to the |.sfr| file for each +% section. Its arguments are the number of the previous section and the +% first page of the section just started. +% \item When loading the |.sfr| file, the first |\bsfrestoresection| entry +% initializes some makros (used as variables). All subsequent entries +% write a |\bsf@sectionpages| entry to the |.nav| file, which has the +% necessary pages as arguments. +% \end{enumerate} +% For parts and subsections corresponding entries are written to the files. And +% for the last part, section, and subsection |\bsf@...pages| entries are written +% after appending the subframes. +% +% The |\beamer@...pages| entries written by Beamer at the end of the document +% would mix up the links of the navigation bar. It is not possible to prevent +% writing these entries. Instead they are disabled after appending the subframes. +% Since they would stay disabled for all pages after the first, they are +% reenabled at the beginning of the |.nav| file. Also, these entries have to be +% written before appending the subframes, in order to make the navigation bar +% work correctly for the last section and subsection in the main part. +% +% Since this is also done for the |\beamer@documentpages| entry, the right +% arrows of the section and subsection icons are limited to the last page of the +% main part, i.e.\ the page before the first subframe. The same applies to the +% right part of the presentation or appendix symbol. +% +% Unfortunately, this would apply to the right arrows of the slide icon and the +% frame icon too. Therefore the package writes a |\bsf@documentpages| entry to +% the |.nav| file after appending the subframes. Additionally, two macros of +% Beamer are redefined to use this information, instead of the information of +% the |\beamer@documentpages| entry. +% +% \paragraph{The Macros}~\\ +% Lets start with the two redefined macros. The originals are defined in +% \textsf{beamerbasenavigation.sty}. +% +% \begin{macro}{\hyperlinkslidenext} +% The new definition of |\hyperlinkslidenext| uses |\bsf@nextpage| instead of +% |\beamer@nextpage|. +% \begin{macrocode} +\def\hyperlinkslidenext{% + \bsf@nextpage\c@page% + \hyperlink{Navigation\the\beamer@tempcount}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\hyperlinkframestartnext} +% The new definition of |\hyperlinkframestartnext| also uses |\bsf@nextpage| +% instead of |\beamer@nextpage|. +% \begin{macrocode} +\def\hyperlinkframestartnext{% + \bsf@nextpage\beamer@endpageofframe% + \hyperlink{Navigation\the\beamer@tempcount}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bsf@nextpage} +% The macro |\bsf@nextpage| works like |\beamer@nextpage| (from +% \textsf{beamerbasenavigation.sty}), but it uses |\bsf@endpageofdocument| as +% the last page for links, instead of |\beamer@endpageofdocument|. +% \begin{macrocode} +\def\bsf@nextpage#1{% + \beamer@tempcount=#1% + \advance\beamer@tempcount by1\relax% + \ifnum\beamer@tempcount>\bsf@endpageofdocument% + \beamer@tempcount=\bsf@endpageofdocument% + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bsf@documentpages} +% The |\bsf@endpageofdocument| is defined by the |\bsf@documentpages| entry of +% the |.nav| file. +% \begin{macrocode} +\def\bsf@documentpages#1{\def\bsf@endpageofdocument{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bsf@endpageofdocument} +% And |\bsf@endpageofdocument| is initialized to reflect the original. +% \begin{macrocode} +\def\bsf@endpageofdocument{\beamer@endpageofdocument} +% \end{macrocode} +% \end{macro} +% +% To disable and reenable the |\beamer@...pages| entries, first +% \begin{macro}{\beamer@partpages@orig} +% the macro |\beamer@partpages|, +% \begin{macrocode} +\let\beamer@partpages@orig\beamer@partpages +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\beamer@subsectionpages@orig} +% the macro |\beamer@subsectionpages|, +% \begin{macrocode} +\let\beamer@subsectionpages@orig\beamer@subsectionpages +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\beamer@sectionpages@orig} +% the macro |\beamer@sectionpages|, +% \begin{macrocode} +\let\beamer@sectionpages@orig\beamer@sectionpages +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\beamer@documentpages@orig} +% and the macro |\beamer@documentpages| are saved. +% \begin{macrocode} +\let\beamer@documentpages@orig\beamer@documentpages +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bsf@enablenaventries} +% The command |\bsf@enablenaventries| restores the original meanings of the +% |\beamer@...pages| entries. It is written to the |.nav| file at the beginning +% of the document (see \autoref{sec:code-beginend}). +% \begin{macrocode} +\def\bsf@enablenaventries{% + \let\beamer@partpages\beamer@partpages@orig + \let\beamer@subsectionpages\beamer@subsectionpages@orig + \let\beamer@sectionpages\beamer@sectionpages@orig + \let\beamer@documentpages\beamer@documentpages@orig +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bsf@disablenaventries} +% And |\bsf@disablenaventries| disables the entries by letting them gobble their +% arguments. It is written to the |.nav| file after appending the subframes (see +% \autoref{sec:code-appendsub}). +% \begin{macrocode} +\def\bsf@disablenaventries{% + \let\beamer@partpages\@gobbletwo + \let\beamer@subsectionpages\@gobbletwo + \let\beamer@sectionpages\@gobbletwo + \let\beamer@documentpages\@gobble +} +% \end{macrocode} +% \end{macro} +% +% In order to write the |\bsfrestore...| entries to the |.sfr| file, the +% sectioning commands must be extended. First the originals for +% +% \begin{macro}{\part@orig} +% the macro |\part|, +% \begin{macrocode} +\let\part@orig\part +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\section@orig} +% the macro |\section|, +% \begin{macrocode} +\let\section@orig\section +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\subsection@orig} +% and the macro |\subsection| are saved. +% \begin{macrocode} +\let\subsection@orig\subsection +% \end{macrocode} +% \end{macro} +% The sectioning macros are only redefined in append mode. +% \begin{macrocode} +\if@bsf@append +% \end{macrocode} +% +% \begin{macro}{\part} +% The new version of |\part| writes the |\bsfrestorepart| entry to the |.sfr| +% file. The original version is called at the end, so its arguments are of no +% concern here. But because of that, |\c@part| still contains the number of the +% previous part. Here, |\c@page| already contains the number of the first page +% of the new part. +% \begin{macrocode} + \def\part{% + \immediate\write\bsf@sfrout{\string\bsfrestorepart{\the\c@part}% + {\the\c@page}}% + \part@orig + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\section} +% The new version of |\section| writes the |\bsfrestoresection| entry to the +% |.sfr| file. Besides that, it works like the new |\part| command. +% \begin{macrocode} + \def\section{% + \immediate\write\bsf@sfrout{\string\bsfrestoresection{\the\c@section}% + {\the\c@page}}% + \section@orig + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\subsection} +% And the new version of |\subsection| writes the |\bsfrestoresubsection| entry +% to the |.sfr| file. It also works like the new |\part| command. +% \begin{macrocode} + \def\subsection{% + \immediate\write\bsf@sfrout{\string\bsfrestoresubsection{\the\c@subsection}% + {\the\c@page}}% + \subsection@orig + } +\fi +% \end{macrocode} +% \end{macro} +% +% The |\bsfrestore...| entries are executed, when loading the |.sfr| file. +% Basically, they write the |\bsf@... pages| entries to the |.nav| file. But +% the first time, they just initialize some macros used as variables, because +% at this point only the first page of the first subframe of a part, section +% or subsection and the first page of the part, section or subsection itself +% are known. +% +% \begin{macro}{\bsfrestorepart} +% On the first call, |\bsfrestorepart| stores the the first page of the new part +% (|#2|), the number of the previous part (|#1|), and the number of the first +% page of the first subframe belonging to the new part (|c@page|). +% \begin{macrocode} +\def\bsfrestorepart#1#2{% + \if@bsf@firstpart + \@bsf@firstpartfalse + \def\bsf@partstartpage{#2}% + \def\bsf@prevpart{#1}% + \edef\bsf@partfirstsubframepage{\the\c@page}% + \else +% \end{macrocode} +% On all subsequent calls, if there is a new part, the last page of the last +% subframe belonging to the previous part (in |\@tempcnta|) and the last page +% of the previous part (in |\@tempcntb|) are calculated. +% \begin{macrocode} + \@tempcnta=\bsf@prevpart\relax + \ifnum#1>\@tempcnta + \@tempcnta\c@page\advance\@tempcnta -1\relax + \@tempcntb=#2\relax\advance\@tempcntb -1\relax +% \end{macrocode} +% Then the |\bsf@partpages| entry is written to the |.nav| file. Here +% |\addtocontents| can not be used, because it doesn't work, if |\bsfrestorepart| +% appears after the last subframe. +% \begin{macrocode} + \if@filesw + \immediate\write\@auxout{\string\@writefile{nav}% + {\noexpand\headcommand{% + \noexpand\bsf@partpages{\bsf@partfirstsubframepage}% + {\the\@tempcnta}{\bsf@partstartpage}{\the\@tempcntb}}}}% + \fi +% \end{macrocode} +% After that, the ``variables'' are reinitialized. +% \begin{macrocode} + \def\bsf@partstartpage{#2}% + \def\bsf@prevpart{#1}% + \edef\bsf@partfirstsubframepage{\the\c@page}% + \fi + \fi +} +% \end{macrocode} +% Two of the ``variables'' must be initialized, in order to make the package +% work for presentations without sectioning commands. +% \begin{macrocode} +\def\bsf@partstartpage{1}% +\def\bsf@prevpart{0}% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bsfrestoresection} +% The macros |\bsfrestoresection| and |\bsfrestoresubsection| work the same way +% as |\bsfrestorepart|. But additionally, they must keep track of sections +% without subsections. For this, the flags |\if@bsf@nosubsection| and +% |\if@bsf@prevnosubsection| and the macro |\bsf@prevsectionstartpage| are used. +% \begin{macrocode} +\def\bsfrestoresection#1#2{% + \if@bsf@firstsection + \@bsf@firstsectionfalse + \def\bsf@prevsectionstartpage{#2}% + \@bsf@nosubsectiontrue + \@bsf@prevnosubsectionfalse + \def\bsf@sectionstartpage{#2}% + \def\bsf@prevsection{#1}% + \edef\bsf@sectionfirstsubframepage{\the\c@page}% + \else + \@tempcnta=\bsf@prevsection\relax + \ifnum#1>\@tempcnta +% \end{macrocode} +% When a new section starts, the start page and the |\if@bsf@nosubsection| flag +% of the previous section are stored. +% \begin{macrocode} + \edef\bsf@prevsectionstartpage{\bsf@sectionstartpage}% + \if@bsf@nosubsection + \@bsf@prevnosubsectiontrue + \else + \@bsf@prevnosubsectionfalse + \fi +% \end{macrocode} +% The flag |\if@bsf@nosubsection| is set to false, because the new section has +% no subsections yet. +% \begin{macrocode} + \@bsf@nosubsectiontrue +% \end{macrocode} +% And the number of the previous subsection is set to $-1$, because the +% subsection counter will be reset to 0 on the start of each section. +% \begin{macrocode} + \def\bsf@prevsubsection{-1}% + \@tempcnta\c@page\advance\@tempcnta -1\relax + \@tempcntb=#2\relax\advance\@tempcntb -1\relax + \if@filesw + \immediate\write\@auxout{\string\@writefile{nav}% + {\noexpand\headcommand{% + \noexpand\bsf@sectionpages{\bsf@sectionfirstsubframepage}% + {\the\@tempcnta}{\bsf@sectionstartpage}{\the\@tempcntb}}}}% + \fi + \def\bsf@sectionstartpage{#2}% + \def\bsf@prevsection{#1}% + \edef\bsf@sectionfirstsubframepage{\the\c@page}% + \fi + \fi +} +\def\bsf@sectionstartpage{1}% +\def\bsf@prevsection{0}% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bsfrestoresubsection} +% The macro |\bsfrestoresubsection| uses the flags |\if@bsf@nosubsection| and +% |\if@bsf@prevnosubsection| and the macro |\bsf@prevsectionstartpage| to set +% the correct range of pages. +% \begin{macrocode} +\def\bsfrestoresubsection#1#2{% + \if@bsf@firstsubsection + \@bsf@firstsubsectionfalse + \@bsf@prevnosubsectionfalse + \def\bsf@subsectionstartpage{#2}% + \def\bsf@prevsubsection{#1}% + \edef\bsf@subsectionfirstsubframepage{\the\c@page}% + \else + \@tempcnta=\bsf@prevsubsection\relax + \ifnum#1>\@tempcnta + \@tempcnta\c@page\advance\@tempcnta -1\relax +% \end{macrocode} +% Since the |\bsf@...pages| entries are written (indirectly) at the point of the +% next part, section or subsection, the entry for let's say subsection 1.3 would +% be written at the point of subsection 3.1, if section 2 has no subsections. +% So if the previous section had no subsection, its start page is used to +% calculate the last page of the last subsection instead of the start page of +% this subsection. +% \begin{macrocode} + \if@bsf@prevnosubsection + \@tempcntb=\bsf@prevsectionstartpage\relax + \else + \@tempcntb=#2\relax + \fi + \advance\@tempcntb -1\relax +% \end{macrocode} +% Because |\if@bsf@prevnosubsection| can only be used at the point of the first +% subsection of a new section, it is set to false. +% \begin{macrocode} + \@bsf@prevnosubsectionfalse + \@bsf@nosubsectionfalse + \if@filesw + \immediate\write\@auxout{\string\@writefile{nav}% + {\noexpand\headcommand{% + \noexpand\bsf@subsectionpages{\bsf@subsectionfirstsubframepage}% + {\the\@tempcnta}{\bsf@subsectionstartpage}{\the\@tempcntb}}}}% + \fi + \def\bsf@subsectionstartpage{#2}% + \def\bsf@prevsubsection{#1}% + \edef\bsf@subsectionfirstsubframepage{\the\c@page}% + \fi + \fi +} +\def\bsf@subsectionstartpage{1}% +\def\bsf@prevsubsection{0}% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bsf@partpages} +% The |\bsf@partpages| macro is similar to the |\beamer@partpages| macro (from +% \textsf{beamerbasenavigation.sty}). But to decide if the first and the last +% page of a part are stored in |\beamer@startpageofpart| and |\beamer@endpageofpart|, +% it uses the first page of the first subframe (|#1|) and the last page of the +% last subframe (|#2|) belonging to the part. +% +% There may be parts with no subframes. In this case, |#1| is greater then |#2| +% and the first (|#3|) and last page (|#4|) of the part are not stored. +% \begin{macrocode} +\def\bsf@partpages#1#2#3#4{% + \ifnum\c@page<#1% + \else% + \ifnum\c@page>#2% + \else% + \gdef\beamer@startpageofpart{#3}% + \gdef\beamer@endpageofpart{#4}% + \fi% + \fi% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bsf@sectionpages} +% The macro |\bsf@sectionpages| works the same way as |\bsf@partpages|. +% \begin{macrocode} +\def\bsf@sectionpages#1#2#3#4{% + \ifnum\c@page<#1% + \else% + \ifnum\c@page>#2% + \else% + \gdef\beamer@startpageofsection{#3}% + \gdef\beamer@endpageofsection{#4}% + \fi% + \fi% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bsf@subsectionpages} +% And |\bsf@sectionpages| works the same way as |\bsf@partpages| too. +% \begin{macrocode} +\def\bsf@subsectionpages#1#2#3#4{% + \ifnum\c@page<#1% + \else% + \ifnum\c@page>#2% + \else% + \gdef\beamer@startpageofsubsection{#3}% + \gdef\beamer@endpageofsubsection{#4}% + \fi% + \fi% +} +% \end{macrocode} +% \end{macro} +% +% ^^A------------------------- +% \subsubsection{Inserts} +% Beamers |\inserttotalframenumber| is changed by simply writing its definition +% a second time to the |.nav| file, thus overwriting Beamers original definition. +% This is done at the end of the document (see \autoref{sec:code-beginend}). +% The necessary frame number is stored in |\bsf@totalframenumber| before +% appending the subframes (see \autoref{sec:code-appendsub}). +% \begin{macro}{\inserttotalframenumberwithsub} +% The new |\inserttotalframenumberwithsub| is written at the end of the documnet +% (see \autoref{sec:code-beginend}), regardless of the mode of \BSF, so it's +% always defined. But to work on the first \TeX\ run, it must be initialized. +% \begin{macrocode} +\def\inserttotalframenumberwithsub{\inserttotalframenumber} +% \end{macrocode} +% \end{macro} +% +% ^^A------------------------- +% \subsubsection{The \texttt{subframe} environment} +% \label{sec:code-subframe} +% \begin{environment}{subframe} +% The |subframe| environment is defined differently for the two modes. In append +% mode it is basically a verbatim environment, which writes its contents to the +% |.sfr| file. Here, the verbatim package is used. +% +% Before writing the contents, it writes the |\bsfrestore| entry for the +% subframe. The latter contains the value of the |subsectionslide| counter as +% fourth argument, which has to be corrected, if miniframes for subframes should +% not appear. The counter needs to be incremented, if miniframes should appear +% for subframes. +% +% The |\bsfrestore| entry also has to restore the section and subsection heads. +% Since they might contain macros and not just the text itself, +% |\insertsectionhead| and |\insertsubsectionhead| can not be used directly. +% Their current meaning is stored in macros, which are later used to restore +% the heads. +% +% The first line of the |subframe| environment, which contains the arguments, is +% treated differently. It is preceded with |\begin{frame}|. +% +% At the end of the environment, |\end{frame}| is written to the |.sfr| file. +% And the |\subslideentry| is written with |\beamer@writeslidentry@miniframes|, +% but only if miniframes should appear for subframes. +% \begin{macrocode} +\if@bsf@append + \newenvironment{subframe}{% + \@tempcnta\c@subsectionslide + \if@bsf@miniframes\else \advance\@tempcnta by -1\fi + \expandafter\global\expandafter\let + \csname bsf@sectionhead\the\c@part.\the\c@section + \endcsname\insertsectionhead + \expandafter\global\expandafter\let + \csname bsf@subsectionhead\the\c@part.\the\c@section.\the\c@subsection + \endcsname\insertsubsectionhead + \immediate\write\bsf@sfrout{\string\bsfrestore{\the\c@part}{\the\c@section}% + {\the\c@subsection}{\the\@tempcnta}}% + \if@bsf@miniframes \addtocounter{subsectionslide}{1}\fi + \@bsf@firstlinetrue + \let\do\@makeother\dospecials\catcode`\^^M\active + \def\verbatim@processline{% + \if@bsf@firstline + \immediate\write\bsf@sfrout{\string\begin{frame}\the\verbatim@line}% + \@bsf@firstlinefalse + \else + \immediate\write\bsf@sfrout{\the\verbatim@line}% + \fi + }% + \verbatim@}{\immediate\write\bsf@sfrout{\string\end{frame}^^J}% + \if@bsf@miniframes \beamer@writeslidentry@miniframes \fi + } +\else +% \end{macrocode} +% In embed mode, the |subframe| environment is basically a |frame| environment. +% Before calling it, |\if@bsf@subframe| is set to true. And after the |frame| +% environment, |\if@bsf@subframe| is set to false again. This is needed for the +% |\ifsubframe| command. +% +% The main problem here is adding |environment=subframe| to the options. For +% this, |\bsf@frame| is called with the name of the environment, the optional +% overlay specification (|#2|), and the first optional argument (|#1|). +% \begin{macrocode} + \newenvironment<>{subframe}[1][]{% + \@bsf@subframetrue + \bsf@frame{subframe}{#2}{#1}}{\end{frame}\@bsf@subframefalse} +\fi +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\bsf@frame} +% The macro |\bsf@frame| initializes the token register |\bsf@frame@param|, sets +% a default for the second optional argument and then calls |\bsf@@frame|. +% \begin{macrocode} +\def\bsf@frame#1#2#3{\bsf@frame@param={}% + \@ifnextchar[{\bsf@@frame{#1}{#2}{#3}}{\bsf@@frame{#1}{#2}{#3}[]}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bsf@@frame} +% The macro |\bsf@@frame| is called with the name of the new frame environment +% (|#1|), the overlay specification (|#2|), and the first (|#3|) and the second +% (|#4|) optional argument. It stores the arguments in|\bsf@frame@param|, +% thereby adding |environment=|\meta{name of the new frame environment} at the +% appropriate place. +% \begin{macrocode} +\def\bsf@@frame#1#2#3[#4]{% + \def\@tempa{#3} +% \end{macrocode} +% If |#3| is empty, then there are no optional arguments, i.e.\ no default +% overlay specification and no options. In this case, |#4| is empty too. +% \begin{macrocode} + \ifx\@tempa\@empty + \bsf@frame@param={#2[environment=#1]}% + \else + \def\@tempb{#4} +% \end{macrocode} +% If only |#4| is empty, then there is one optional argument. This case is +% handled by |\bsf@@@frame|. +% \begin{macrocode} + \ifx\@tempb\@empty + \bsf@@@frame{#1}{#2}#3\@@end +% \end{macrocode} +% Otherwhise, both optional arguments are present. +% \begin{macrocode} + \else + \bsf@frame@param={#2[#3][environment=#1,#4]}% + \fi + \fi +% \end{macrocode} +% At the end, |\bsf@frame@| is called with the token register |\bsf@frame@param| +% already expanded. +% \begin{macrocode} + \expandafter\bsf@frame@\the\bsf@frame@param\@@end +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bsf@@@frame} +% The macro |\bsf@@@frame| checks, if the only optional argument is a default +% overlay specification or the list of options. Here |#1| is the name of the new +% frame environment, |#2| is the overlay specification, |#3| is the first +% character of the optional argument and |#4| contains all subsequent characters. +% +% If |#3| is `|<|', then the optional argument is a default overlay specification. +% Otherwhise, it is the list of options. +% \begin{macrocode} +\def\bsf@@@frame#1#2#3#4\@@end{% + \def\@tempa{#3}\def\@tempb{<}% + \ifx\@tempa\@tempb\relax + \bsf@frame@param={#2[#3#4][environment=#1]}% + \else + \bsf@frame@param={#2[environment=#1,#3#4]}% + \fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bsf@frame@} +% The macro |\bsf@frame@| calls |\begin{frame}| with its argument, which +% contains the overlay specification and the default overlay specification if +% present, and the options, containing at least |environment=...|. This includes +% angle brackets and brackets. +% \begin{macrocode} +\def\bsf@frame@#1\@@end{\begin{frame}#1} +% \end{macrocode} +% \end{macro} +% +% ^^A------------------------- +% \subsubsection{The \texttt{lastframe} environment} +% \label{sec:code-lastframe} +% \begin{environment}{lastframe} +% The |lastframe| environment also uses |\bsf@frame| to add |environment=lastframe| +% to the options before calling the |frame| environment. +% +% Before that, it uses |\bsfrestore| to reset all sectioning counters. After +% this, the counters are in the same state, as they would be for a title frame +% before all sectioning commands. By this, navigation in the sidebar or headline +% will appear the same way as on the title page. +% \begin{macrocode} +\newenvironment<>{lastframe}[1][]{% + \bsfrestore{0}{0}{0}{0}% + \bsf@frame{lastframe}{#2}{#1}}{\end{frame}} +% \end{macrocode} +% \end{environment} +% +% ^^A------------------------- +% \subsubsection{Appending Subframes} +% \label{sec:code-appendsub} +% \begin{macro}{\appendsubframes} +% The macro |\appendsubframes| does nothing in embed mode. In append mode it +% first writes |\endinput| to the |.sfr| file and initializes some macros for +% navigation. The page number of the last frame of the main part is stored in +% |\bsf@pagebeforesub|, to be used after loading the |.sfr| file. +% \begin{macrocode} +\newcommand{\appendsubframes}{% + \if@bsf@append + \immediate\write\bsf@sfrout{\string\endinput}% + \edef\bsf@partfirstsubframepage{\the\c@page}% + \edef\bsf@sectionfirstsubframepage{\the\c@page}% + \edef\bsf@subsectionfirstsubframepage{\the\c@page}% + \@tempcnta\c@page\advance\@tempcnta -1\relax + \edef\bsf@pagebeforesub{\the\@tempcnta}% +% \end{macrocode} +% For the navigation in the main part, the |\beamer@...pages| entries are +% written to the |.nav| file. +% \begin{macrocode} + \addtocontents{nav}{\protect\headcommand{% + \protect\beamer@partpages{\the\beamer@partstartpage}{\bsf@pagebeforesub}}}% + \addtocontents{nav}{\protect\headcommand{% + \protect\beamer@subsectionpages{\the\beamer@subsectionstartpage}{\bsf@pagebeforesub}}}% + \addtocontents{nav}{\protect\headcommand{% + \protect\beamer@sectionpages{\the\beamer@sectionstartpage}{\bsf@pagebeforesub}}}% + \addtocontents{nav}{\protect\headcommand{% + \protect\beamer@documentpages{\bsf@pagebeforesub}}}% +% \end{macrocode} +% The number of the last frame of the main part is stored in |\bsf@totalframenumber|. +% And |\beamer@writeslidentry| is replaced by |\beamer@writeslidentry@navbar|. +% \begin{macrocode} + \edef\bsf@totalframenumber{\the\c@framenumber}% + \let\beamer@writeslidentry\beamer@writeslidentry@navbar +% \end{macrocode} +% Before loading the |.sfr| file, it is closed and the flags for the navigation +% bar are initialized. The flag for |\ifsubframe| is set to true, because from +% now on there are only subframes. +% \begin{macrocode} + \immediate\closeout\bsf@sfrout + \@bsf@firstparttrue + \@bsf@firstsectiontrue + \@bsf@firstsubsectiontrue + \@bsf@subframetrue + \input{\jobname.sfr} +% \end{macrocode} +% After all subframes are typeset, the final |\bsf@...pages| entries are written +% to the |.nav| file. +% \begin{macrocode} + \@tempcnta\c@page\advance\@tempcnta -1\relax + \if@filesw + \immediate\write\@auxout{\string\@writefile{nav}% + {\noexpand\headcommand{\noexpand\bsf@partpages{\bsf@partfirstsubframepage}% + {\the\@tempcnta}{\bsf@partstartpage}{\bsf@pagebeforesub}}}}% + \immediate\write\@auxout{\string\@writefile{nav}% + {\noexpand\headcommand{\noexpand\bsf@sectionpages{\bsf@sectionfirstsubframepage}% + {\the\@tempcnta}{\bsf@sectionstartpage}{\bsf@pagebeforesub}}}}% + \immediate\write\@auxout{\string\@writefile{nav}% + {\noexpand\headcommand{\noexpand\bsf@subsectionpages{\bsf@subsectionfirstsubframepage}% + {\the\@tempcnta}{\bsf@subsectionstartpage}{\bsf@pagebeforesub}}}}% + \immediate\write\@auxout{\string\@writefile{nav}% + {\noexpand\headcommand{\noexpand\bsf@documentpages{\the\@tempcnta}}}}% +% \end{macrocode} +% Finally, the command to disable the remaining |\beamer@...pages| entries is +% written to the |.nav| file. +% \begin{macrocode} + \immediate\write\@auxout{\string\@writefile{nav}% + {\noexpand\headcommand{\noexpand\bsf@disablenaventries}}}% + \fi + \fi +} +% \end{macrocode} +% \end{macro} +% +% ^^A------------------------- +% \subsubsection{At Begin and End of the Document} +% \label{sec:code-beginend} +% At the beginning of the document, first the |.sfp| file is loaded. The |.sfr| +% file is only opened in append mode. +% \begin{macrocode} +\AtBeginDocument{% + \InputIfFileExists{\jobname.sfp}{}{}% + \if@bsf@append + \immediate\openout\bsf@sfrout\jobname.sfr\relax +% \end{macrocode} +% To reenable the |\beamer@...pages| entries after the first page, the command +% |\bsf@enablenaventries| is written as the first entry to the |.nav| file. +% \begin{macrocode} + \if@filesw + \immediate\write\@auxout{\string\@writefile{nav}% + {\noexpand\headcommand{\noexpand\bsf@enablenaventries}}}% + \fi + \fi +} +% \end{macrocode} +% +% At the end of the document in append mode first the |.sfp| file is checked. +% After that |\bsf@totalframenumber| is initialized if necessary, i.e.\ if +% |\appendsubframes| was omitted in the source. +% \begin{macrocode} +\AtEndDocument{% + \if@bsf@append + \bsf@checksfp + \@ifundefined{bsf@totalframenumber}{% + \edef\bsf@totalframenumber{\the\c@framenumber}}{}% + \if@filesw +% \end{macrocode} +% The definition for |\inserttotalframenumber| is written to the |.nav| file a +% second time, thus overwriting the first definition written by Beamer. Here it +% contains the number of frames of the main part. +% \begin{macrocode} + \immediate\write\@auxout{\string\@writefile{nav}% + {\noexpand\headcommand{% + \noexpand\def\noexpand\inserttotalframenumber{\bsf@totalframenumber}}}} +% \end{macrocode} +% A stream for the for the |.sfp| file is defined and the file is opened, so +% \LaTeX\ can write it, when loading the |.aux| file at the end of the document. +% \begin{macrocode} + \newwrite\tf@sfp + \immediate\openout\tf@sfp\jobname.sfp\relax + \fi + \fi +% \end{macrocode} +% Regardless of the mode, the definition of |\inserttotalframenumberwithsub| is +% written to the |.nav| file, so it can be used in themes in both modes. +% \begin{macrocode} + \if@filesw + \immediate\write\@auxout{\string\@writefile{nav}% + {\noexpand\headcommand{% + \noexpand\def\noexpand\inserttotalframenumberwithsub{\the\c@framenumber}}}} + \fi +} +% \end{macrocode} +% +% ^^A------------------------- +% \subsubsection{Contitional Execution} +% \begin{macro}{\ifappend} +% The macro |\ifappend| simply expands to its first argument in append mode and +% to its second in embed mode. +% \begin{macrocode} +\newcommand{\ifappend}[2]{\if@bsf@append #1\else #2\fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ifsubframe} +% The macro |\ifsubframes| simply expands to its first argument in subframes and +% to its second in normal frames. +% \begin{macrocode} +\newcommand{\ifsubframe}[2]{\if@bsf@subframe #1\else #2\fi} +% \end{macrocode} +% \end{macro} +% +% \newpage +% \Finale\endinput +%</package> +% ^^A-------------------------------------------------------------------------- +% ^^A Now the source of the example +%<*example> +\documentclass{beamer} +\usepackage{lmodern} +\usepackage[T1]{fontenc} + +\usepackage[append]{beamersubframe} + +\newcommand<>{\linkdetail}[4]{% + \ifappend{\uncover#5{\hyperlink{#3}{\beamergotobutton{#4}}}}% + {\uncover#5{\hyperlink{#1}{\beamerskipbutton{#2}}}} +} +\newcommand<>{\returndetail}[2]{% +\ifappend{\uncover#3{\hyperlink{#1}{\beamerreturnbutton{#2}}}}% + {\visible<0>{\beamerreturnbutton{#2}}} +} +\newcommand<>{\linkdifftext}[3]{% + \ifappend{\uncover#4{\hyperlink{#1}{\beamergotobutton{#3}}}}% + {\uncover#4{\hyperlink{#1}{\beamerskipbutton{#2}}}} +} + +\defbeamertemplate*{sidebar left}{bsf test}[1][50] +{ + \vfill% + \rlap{\hskip0.1cm\hbox{\color{fg!#1!bg}\tiny{\ifsubframe{detail}{main part}}}}% + \vskip2pt% +} + +\begin{document} +\begin{frame}{some frame} +\begin{itemize}[<+->] +\item there is foo +\item foo is good +\item and there is bar +\item bar is good too +\end{itemize} +\end{frame} + +\begin{frame}<1-2>[label=lfoo]{frame on foo} +\begin{itemize}[<+->] +\item item a +\item item b \linkdetail<2>{lfoo<3>}{Skip Details}{ldfoob}{Goto Details} +\item item c +\item item d +\end{itemize} +\end{frame} + +\begin{subframe}[label=ldfoob]{details on foo item b} +\begin{itemize}[<+->] +\item item b.1 +\item item b.2 +\item item b.3 +\item item b.4 +\end{itemize} +\end{subframe} + +\begin{subframe} +\frametitle{more details on foo item b} +\begin{itemize}[<+->] +\item item b.5 +\item item b.6 +\item item b.7 +\item item b.8 +\end{itemize} + +\vspace{2ex} +\returndetail<4>{lfoo<3>}{Return from Details} +\end{subframe} + +\againframe<3->{lfoo} + +\begin{frame}{frame on bar} +\begin{itemize}[<+->] +\item item w +\item item x +\item item y +\item item z \linkdetail<4>{lother}{Skip Details}{ldbarz}{Goto Details} +\end{itemize} +\end{frame} + +\begin{subframe}[label=ldbarz] +\frametitle{details on bar item z} +\begin{itemize}[<+->] +\item item z.1 +\item item z.2 +\item item z.3 +\item item z.4 +\end{itemize} + +\vspace{2ex} +\linkdifftext<4>{lother}{Skip further Details}{Return from Details} +\end{subframe} + +\begin{subframe}{more details on bar item z} +\begin{itemize}[<+->] +\item item z.5 +\item item z.6 +\item item z.7 +\item item z.8 +\end{itemize} + +\vspace{2ex} +\returndetail<4>{lother}{Return from Details} +\end{subframe} + +\begin{frame}[label=lother]{another frame} +\begin{itemize}[<+->] +\item conclusion 1 +\item conclusion 2 +\item conclusion 3 +\item conclusion 4 +\end{itemize} +\end{frame} + +\appendsubframes +\end{document} +%</example> diff --git a/Master/texmf-dist/source/latex/beamersubframe/beamersubframe.ins b/Master/texmf-dist/source/latex/beamersubframe/beamersubframe.ins new file mode 100644 index 00000000000..3aaf0a5737e --- /dev/null +++ b/Master/texmf-dist/source/latex/beamersubframe/beamersubframe.ins @@ -0,0 +1,67 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% Copyright (c) 2011 Mike Kaufmann, all rights reserved +%% +%% This program is provided under the terms of the +%% LaTeX Project Public License distributed from CTAN +%% archives in directory macros/latex/base/lppl.txt. +%% +%% Author: Mike Kaufmann +%% m.km@gmx.de +%% +%% --------------- start of docstrip commands ------------------ +%% + +\input docstrip.tex + +% some macros for conditional generation of example files +\newif\ifaskforexample +\newif\ifgenerateexample +\generateexampletrue +\askforexampletrue +% \generateexample \askforexample then +% true false generate example +% true true ask and generate only if answer is y/yes +% false don' care do not generate +\def\generateExample#1{% + \ifgenerateexample + \ifaskforexample + \Ask\answer{^^JThere is an example file in \jobname.dtx.^^JGenerate it? [y/n]} + \ifx\answer\y \generate{#1}\else + \ifx\answer\yes \generate{#1}\fi\fi + \else\generate{#1}\fi\fi} + +\preamble + +Copyright (c) 2011 Mike Kaufmann, all rights reserved + +This program is provided under the terms of the +LaTeX Project Public License distributed from CTAN +archives in directory macros/latex/base/lppl.txt. + +Author: Mike Kaufmann + m.km@gmx.de + +\endpreamble + +\generate{\file{beamersubframe.sty}{\from{beamersubframe.dtx}{package}}} +\generateExample{\file{bsf-example.tex}{\from{beamersubframe.dtx}{example}}} + +\Msg{***********************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* file into a directory searched by TeX:} +\Msg{*} +\Msg{* \space\space beamersubframe.sty} +\Msg{*} +\Msg{* To produce the documentation run the files ending with} +\Msg{* `.dtx' through PDFLaTeX.} +\Msg{*} +\Msg{* Happy TeXing} +\Msg{***********************************************************} + + +\endbatchfile diff --git a/Master/texmf-dist/tex/latex/beamersubframe/beamersubframe.sty b/Master/texmf-dist/tex/latex/beamersubframe/beamersubframe.sty index 948fc981719..5754bb8e42a 100644 --- a/Master/texmf-dist/tex/latex/beamersubframe/beamersubframe.sty +++ b/Master/texmf-dist/tex/latex/beamersubframe/beamersubframe.sty @@ -1,3 +1,12 @@ +%% +%% This is file `beamersubframe.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% beamersubframe.dtx (with options: `package') +%% +%% Copyright (c) 2011 Mike Kaufmann, all rights reserved %% %% This program is provided under the terms of the %% LaTeX Project Public License distributed from CTAN @@ -6,153 +15,437 @@ %% Author: Mike Kaufmann %% m.km@gmx.de %% -\def\fileversion{0.1} -\def\filedate{2011/06/29} +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +%% +%% +\def\fileversion{0.2} +\def\filedate{2011/08/07} + \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{beamersubframe}[\filedate\space v\fileversion\space reordering beamer frames] - -% check for beamer class \@ifclassloaded{beamer}{}{% - \PackageError{beamersubframe}{% - The package works only with the beamer class,\MessageBreak - therefore it is not loaded. - }{% - The package is not loaded, because it needs the\MessageBreak - beamer class. Continuing may lead to additional\MessageBreak - errors because of undefined commands. - } - \endinput + \PackageError{beamersubframe}{% + The package works only with the beamer class,\MessageBreak + therefore it is not loaded. + }{% + The package is not loaded, because it needs the\MessageBreak + beamer class. Continuing may lead to additional\MessageBreak + errors because of undefined commands. + } + \endinput } - \newif\if@bsf@append +\newif\if@bsf@miniframes +\@bsf@miniframestrue +\newif\if@bsf@subframe +\@bsf@subframefalse +\newif\if@bsf@nosfnum \newif\if@bsf@firstline -\newtoks\sub@frame@param -\newwrite\sfr@out -\newwrite\sfr@sub - +\newif\if@bsf@firstpart +\newif\if@bsf@firstsection +\newif\if@bsf@firstsubsection +\newif\if@bsf@nosubsection +\newif\if@bsf@prevnosubsection +\newtoks\bsf@frame@param +\newwrite\bsf@sfrout \DeclareOption{embed}{\@bsf@appendfalse} \DeclareOption{append}{\@bsf@appendtrue} - +\DeclareOption{nominiframes}{\@bsf@miniframesfalse} \ExecuteOptions{embed} \ProcessOptions*\relax - \RequirePackage{verbatim} -\def\beamer@subnum{% - \the\c@part.\the\c@section.\the\c@subsection.\the\c@subsectionslide +\newcommand{\bsfrestore}[4]{% + \setcounter{part}{#1}% + \setcounter{section}{#2}% + \setcounter{subsection}{#3}% + \setcounter{subsectionslide}{#4}% + \expandafter\let\expandafter\insertsectionhead + \csname bsf@sectionhead\the\c@part.\the\c@section\endcsname + \expandafter\let\expandafter\insertsubsectionhead + \csname bsf@subsectionhead\the\c@part.\the\c@section.\the\c@subsection\endcsname + \def\insertpartheadnumber{#1}% + \def\insertsectionheadnumber{#2}% + \def\insertsubsectionheadnumber{#3}% } - -\def\beamersubframepages#1#2#3#4#5#6{% - \expandafter\def\csname beamer@substartpage#1.#2.#3.#4\endcsname{#5}% - \expandafter\def\csname beamer@subendpage#1.#2.#3.#4\endcsname{#6}% +\def\bsf@subnum{% + \the\c@part.\the\c@section.\the\c@subsection.\the\c@subsectionslide } - \def\beamer@writeslidentry@miniframes{% - \addtocontents{nav}% - {\protect\headcommand{% - \protect\slideentry{\the\c@section}{\the\c@subsection}{\the\c@subsectionslide}% - {\protect\@nameuse{beamer@substartpage\beamer@subnum}/% - \protect\@nameuse{beamer@subendpage\beamer@subnum}}{\lastsubsection}{\the\c@part}}}% + \addtocontents{nav}% + {\protect\headcommand{% + \protect\subslideentry{\the\c@section}{\the\c@subsection}% + {\the\c@subsectionslide}% + {\protect\bsf@usenum{bsf@substartpage\bsf@subnum}/% + \protect\bsf@usenum{bsf@subendpage\bsf@subnum}}% + {\lastsubsection}{\the\c@part}}}% } - \def\beamer@writeslidentry@navbar{% \expandafter\beamer@ifempty\expandafter{\beamer@framestartpage}{}% does not happen normally {%else \addtocontents{nav}% - {\protect\headcommand{% + {\protect\headcommand{% \protect\beamer@framepages{\beamer@framestartpage}{\beamer@frameendpage}}}% - \immediate\write\sfr@sub{\string\beamersubframepages% - {\the\c@part}{\the\c@section}{\the\c@subsection}% - {\the\c@subsectionslide}{\beamer@framestartpage}{\beamer@frameendpage}}% + \addtocontents{sfp}{% + \protect\bsfsubframepages{\the\c@part}{\the\c@section}{\the\c@subsection}% + {\the\c@subsectionslide}{\beamer@framestartpage}{\beamer@frameendpage}}% \clearpage\beamer@notesactions% - } + }% } -\let\beamer@writeslidentry@orig\beamer@writeslidentry - -\newcommand{\beamerrestore}[6]{% - \setcounter{part}{#1}% - \setcounter{section}{#2}% - \setcounter{subsection}{#3}% - \setcounter{subsectionslide}{#4}% - \def\insertsectionhead{#5}% - \def\insertsubsectionhead{#6}% +\def\subslideentry{\slideentry} +\def\bsfsubframepages#1#2#3#4#5#6{% + \expandafter\def\csname bsf@substartpage#1.#2.#3.#4\endcsname{#5}% + \expandafter\def\csname bsf@subendpage#1.#2.#3.#4\endcsname{#6}% +} +\def\bsf@usenum#1{% + \@ifundefined{#1}{1}{\csname #1\endcsname}% } +\def\bsf@checksfp{% + \begingroup + \@bsf@nosfnumfalse + \def\bsf@usenum##1{% + \@ifundefined{##1}{\@bsf@nosfnumtrue}{}} + \def\slideentry##1##2##3##4##5##6{}% + \def\partentry##1##2{}% + \def\sectionentry##1##2##3##4##5{}% + \def\beamer@subsectionentry##1##2##3##4##5{}% + \def\subslideentry##1##2##3##4##5##6{% + \bsf@checksfnum(##4)}% + \dohead + \if@bsf@nosfnum + \PackageWarningNoLine{Beamer SubFrame}{% + Missing, incomplete or corrupted file\MessageBreak + \jobname.sfp! Links for miniframes of\MessageBreak + subframes may be wrong. Please run TeX\MessageBreak + again} + \fi + \endgroup +} +\def\bsf@checksfnum(#1/#2){#1#2} +\def\hyperlinkslidenext{% + \bsf@nextpage\c@page% + \hyperlink{Navigation\the\beamer@tempcount}} +\def\hyperlinkframestartnext{% + \bsf@nextpage\beamer@endpageofframe% + \hyperlink{Navigation\the\beamer@tempcount}} +\def\bsf@nextpage#1{% + \beamer@tempcount=#1% + \advance\beamer@tempcount by1\relax% + \ifnum\beamer@tempcount>\bsf@endpageofdocument% + \beamer@tempcount=\bsf@endpageofdocument% + \fi} +\def\bsf@documentpages#1{\def\bsf@endpageofdocument{#1}} +\def\bsf@endpageofdocument{\beamer@endpageofdocument} +\let\beamer@partpages@orig\beamer@partpages +\let\beamer@subsectionpages@orig\beamer@subsectionpages +\let\beamer@sectionpages@orig\beamer@sectionpages +\let\beamer@documentpages@orig\beamer@documentpages +\def\bsf@enablenaventries{% + \let\beamer@partpages\beamer@partpages@orig + \let\beamer@subsectionpages\beamer@subsectionpages@orig + \let\beamer@sectionpages\beamer@sectionpages@orig + \let\beamer@documentpages\beamer@documentpages@orig +} +\def\bsf@disablenaventries{% + \let\beamer@partpages\@gobbletwo + \let\beamer@subsectionpages\@gobbletwo + \let\beamer@sectionpages\@gobbletwo + \let\beamer@documentpages\@gobble +} +\let\part@orig\part +\let\section@orig\section +\let\subsection@orig\subsection \if@bsf@append - \newenvironment{subframe}{% - \immediate\write\sfr@out{\string\beamerrestore{\the\c@part}{\the\c@section}% - {\the\c@subsection}{\the\c@subsectionslide}{\insertsectionhead}{\lastsubsection}} - \addtocounter{subsectionslide}{1}% - \@bsf@firstlinetrue - \let\do\@makeother\dospecials\catcode`\^^M\active - \def\verbatim@processline{% - \if@bsf@firstline - \immediate\write\sfr@out{\string\begin{frame}\the\verbatim@line}% - \@bsf@firstlinefalse - \else - \immediate\write\sfr@out{\the\verbatim@line}% - \fi - }% - \verbatim@}{\immediate\write\sfr@out{\string\end{frame}^^J}% - \beamer@writeslidentry@miniframes - } + \def\part{% + \immediate\write\bsf@sfrout{\string\bsfrestorepart{\the\c@part}% + {\the\c@page}}% + \part@orig + } + \def\section{% + \immediate\write\bsf@sfrout{\string\bsfrestoresection{\the\c@section}% + {\the\c@page}}% + \section@orig + } + \def\subsection{% + \immediate\write\bsf@sfrout{\string\bsfrestoresubsection{\the\c@subsection}% + {\the\c@page}}% + \subsection@orig + } +\fi +\def\bsfrestorepart#1#2{% + \if@bsf@firstpart + \@bsf@firstpartfalse + \def\bsf@partstartpage{#2}% + \def\bsf@prevpart{#1}% + \edef\bsf@partfirstsubframepage{\the\c@page}% + \else + \@tempcnta=\bsf@prevpart\relax + \ifnum#1>\@tempcnta + \@tempcnta\c@page\advance\@tempcnta -1\relax + \@tempcntb=#2\relax\advance\@tempcntb -1\relax + \if@filesw + \immediate\write\@auxout{\string\@writefile{nav}% + {\noexpand\headcommand{% + \noexpand\bsf@partpages{\bsf@partfirstsubframepage}% + {\the\@tempcnta}{\bsf@partstartpage}{\the\@tempcntb}}}}% + \fi + \def\bsf@partstartpage{#2}% + \def\bsf@prevpart{#1}% + \edef\bsf@partfirstsubframepage{\the\c@page}% + \fi + \fi +} +\def\bsf@partstartpage{1}% +\def\bsf@prevpart{0}% +\def\bsfrestoresection#1#2{% + \if@bsf@firstsection + \@bsf@firstsectionfalse + \def\bsf@prevsectionstartpage{#2}% + \@bsf@nosubsectiontrue + \@bsf@prevnosubsectionfalse + \def\bsf@sectionstartpage{#2}% + \def\bsf@prevsection{#1}% + \edef\bsf@sectionfirstsubframepage{\the\c@page}% + \else + \@tempcnta=\bsf@prevsection\relax + \ifnum#1>\@tempcnta + \edef\bsf@prevsectionstartpage{\bsf@sectionstartpage}% + \if@bsf@nosubsection + \@bsf@prevnosubsectiontrue + \else + \@bsf@prevnosubsectionfalse + \fi + \@bsf@nosubsectiontrue + \def\bsf@prevsubsection{-1}% + \@tempcnta\c@page\advance\@tempcnta -1\relax + \@tempcntb=#2\relax\advance\@tempcntb -1\relax + \if@filesw + \immediate\write\@auxout{\string\@writefile{nav}% + {\noexpand\headcommand{% + \noexpand\bsf@sectionpages{\bsf@sectionfirstsubframepage}% + {\the\@tempcnta}{\bsf@sectionstartpage}{\the\@tempcntb}}}}% + \fi + \def\bsf@sectionstartpage{#2}% + \def\bsf@prevsection{#1}% + \edef\bsf@sectionfirstsubframepage{\the\c@page}% + \fi + \fi +} +\def\bsf@sectionstartpage{1}% +\def\bsf@prevsection{0}% +\def\bsfrestoresubsection#1#2{% + \if@bsf@firstsubsection + \@bsf@firstsubsectionfalse + \@bsf@prevnosubsectionfalse + \def\bsf@subsectionstartpage{#2}% + \def\bsf@prevsubsection{#1}% + \edef\bsf@subsectionfirstsubframepage{\the\c@page}% + \else + \@tempcnta=\bsf@prevsubsection\relax + \ifnum#1>\@tempcnta + \@tempcnta\c@page\advance\@tempcnta -1\relax + \if@bsf@prevnosubsection + \@tempcntb=\bsf@prevsectionstartpage\relax + \else + \@tempcntb=#2\relax + \fi + \advance\@tempcntb -1\relax + \@bsf@prevnosubsectionfalse + \@bsf@nosubsectionfalse + \if@filesw + \immediate\write\@auxout{\string\@writefile{nav}% + {\noexpand\headcommand{% + \noexpand\bsf@subsectionpages{\bsf@subsectionfirstsubframepage}% + {\the\@tempcnta}{\bsf@subsectionstartpage}{\the\@tempcntb}}}}% + \fi + \def\bsf@subsectionstartpage{#2}% + \def\bsf@prevsubsection{#1}% + \edef\bsf@subsectionfirstsubframepage{\the\c@page}% + \fi + \fi +} +\def\bsf@subsectionstartpage{1}% +\def\bsf@prevsubsection{0}% +\def\bsf@partpages#1#2#3#4{% + \ifnum\c@page<#1% + \else% + \ifnum\c@page>#2% + \else% + \gdef\beamer@startpageofpart{#3}% + \gdef\beamer@endpageofpart{#4}% + \fi% + \fi% +} +\def\bsf@sectionpages#1#2#3#4{% + \ifnum\c@page<#1% + \else% + \ifnum\c@page>#2% + \else% + \gdef\beamer@startpageofsection{#3}% + \gdef\beamer@endpageofsection{#4}% + \fi% + \fi% +} +\def\bsf@subsectionpages#1#2#3#4{% + \ifnum\c@page<#1% + \else% + \ifnum\c@page>#2% + \else% + \gdef\beamer@startpageofsubsection{#3}% + \gdef\beamer@endpageofsubsection{#4}% + \fi% + \fi% +} +\def\inserttotalframenumberwithsub{\inserttotalframenumber} +\if@bsf@append + \newenvironment{subframe}{% + \@tempcnta\c@subsectionslide + \if@bsf@miniframes\else \advance\@tempcnta by -1\fi + \expandafter\global\expandafter\let + \csname bsf@sectionhead\the\c@part.\the\c@section + \endcsname\insertsectionhead + \expandafter\global\expandafter\let + \csname bsf@subsectionhead\the\c@part.\the\c@section.\the\c@subsection + \endcsname\insertsubsectionhead + \immediate\write\bsf@sfrout{\string\bsfrestore{\the\c@part}{\the\c@section}% + {\the\c@subsection}{\the\@tempcnta}}% + \if@bsf@miniframes \addtocounter{subsectionslide}{1}\fi + \@bsf@firstlinetrue + \let\do\@makeother\dospecials\catcode`\^^M\active + \def\verbatim@processline{% + \if@bsf@firstline + \immediate\write\bsf@sfrout{\string\begin{frame}\the\verbatim@line}% + \@bsf@firstlinefalse + \else + \immediate\write\bsf@sfrout{\the\verbatim@line}% + \fi + }% + \verbatim@}{\immediate\write\bsf@sfrout{\string\end{frame}^^J}% + \if@bsf@miniframes \beamer@writeslidentry@miniframes \fi + } \else - % problem here: adding ``environment=subframe'' to the options - \def\sub@frame@#1\@@end{\begin{frame}#1} - \def\sub@@@frame#1#2#3\@@end{% processing for one optional argument - \def\@tempa{#2}\def\@tempb{<}% - \ifx\@tempa\@tempb\relax% test for default overlay spec - \sub@frame@param={#1[#2#3][environment=subframe]}% - \else - \sub@frame@param={#1[environment=subframe,#2#3]}% - \fi - } - \def\sub@@frame#1#2[#3]{% - \def\@tempa{#2} - \ifx\@tempa\@empty% this means: no default overlay spec and no options - \sub@frame@param={#1[environment=subframe]}% - \else - \def\@tempb{#3} - \ifx\@tempb\@empty% this means: one optional argument - \sub@@@frame{#1}#2\@@end - \else% both, default overlay spec and options present - \sub@frame@param={#1[#2][environment=subframe,#3]}% - \fi - \fi - \expandafter\sub@frame@\the\sub@frame@param\@@end - } - \def\sub@frame#1#2{% - \@ifnextchar[{\sub@@frame{#1}{#2}}{\sub@@frame{#1}{#2}[]}% - } - \newenvironment<>{subframe}[1][]{% - \sub@frame@param={}% - \sub@frame{#2}{#1}}{\end{frame}} + \newenvironment<>{subframe}[1][]{% + \@bsf@subframetrue + \bsf@frame{subframe}{#2}{#1}}{\end{frame}\@bsf@subframefalse} \fi - +\def\bsf@frame#1#2#3{\bsf@frame@param={}% + \@ifnextchar[{\bsf@@frame{#1}{#2}{#3}}{\bsf@@frame{#1}{#2}{#3}[]}% +} +\def\bsf@@frame#1#2#3[#4]{% + \def\@tempa{#3} + \ifx\@tempa\@empty + \bsf@frame@param={#2[environment=#1]}% + \else + \def\@tempb{#4} + \ifx\@tempb\@empty + \bsf@@@frame{#1}{#2}#3\@@end + \else + \bsf@frame@param={#2[#3][environment=#1,#4]}% + \fi + \fi + \expandafter\bsf@frame@\the\bsf@frame@param\@@end +} +\def\bsf@@@frame#1#2#3#4\@@end{% + \def\@tempa{#3}\def\@tempb{<}% + \ifx\@tempa\@tempb\relax + \bsf@frame@param={#2[#3#4][environment=#1]}% + \else + \bsf@frame@param={#2[environment=#1,#3#4]}% + \fi +} +\def\bsf@frame@#1\@@end{\begin{frame}#1} +\newenvironment<>{lastframe}[1][]{% + \bsfrestore{0}{0}{0}{0}% + \bsf@frame{lastframe}{#2}{#1}}{\end{frame}} \newcommand{\appendsubframes}{% - \if@bsf@append - \let\beamer@writeslidentry\beamer@writeslidentry@navbar - \immediate\closeout\sfr@out - \input{\jobname.sfr} -% \immediate\openout\sfr@out\jobname.sfr - \let\beamer@writeslidentry\beamer@writeslidentry@orig + \if@bsf@append + \immediate\write\bsf@sfrout{\string\endinput}% + \edef\bsf@partfirstsubframepage{\the\c@page}% + \edef\bsf@sectionfirstsubframepage{\the\c@page}% + \edef\bsf@subsectionfirstsubframepage{\the\c@page}% + \@tempcnta\c@page\advance\@tempcnta -1\relax + \edef\bsf@pagebeforesub{\the\@tempcnta}% + \addtocontents{nav}{\protect\headcommand{% + \protect\beamer@partpages{\the\beamer@partstartpage}{\bsf@pagebeforesub}}}% + \addtocontents{nav}{\protect\headcommand{% + \protect\beamer@subsectionpages{\the\beamer@subsectionstartpage}{\bsf@pagebeforesub}}}% + \addtocontents{nav}{\protect\headcommand{% + \protect\beamer@sectionpages{\the\beamer@sectionstartpage}{\bsf@pagebeforesub}}}% + \addtocontents{nav}{\protect\headcommand{% + \protect\beamer@documentpages{\bsf@pagebeforesub}}}% + \edef\bsf@totalframenumber{\the\c@framenumber}% + \let\beamer@writeslidentry\beamer@writeslidentry@navbar + \immediate\closeout\bsf@sfrout + \@bsf@firstparttrue + \@bsf@firstsectiontrue + \@bsf@firstsubsectiontrue + \@bsf@subframetrue + \input{\jobname.sfr} + \@tempcnta\c@page\advance\@tempcnta -1\relax + \if@filesw + \immediate\write\@auxout{\string\@writefile{nav}% + {\noexpand\headcommand{\noexpand\bsf@partpages{\bsf@partfirstsubframepage}% + {\the\@tempcnta}{\bsf@partstartpage}{\bsf@pagebeforesub}}}}% + \immediate\write\@auxout{\string\@writefile{nav}% + {\noexpand\headcommand{\noexpand\bsf@sectionpages{\bsf@sectionfirstsubframepage}% + {\the\@tempcnta}{\bsf@sectionstartpage}{\bsf@pagebeforesub}}}}% + \immediate\write\@auxout{\string\@writefile{nav}% + {\noexpand\headcommand{\noexpand\bsf@subsectionpages{\bsf@subsectionfirstsubframepage}% + {\the\@tempcnta}{\bsf@subsectionstartpage}{\bsf@pagebeforesub}}}}% + \immediate\write\@auxout{\string\@writefile{nav}% + {\noexpand\headcommand{\noexpand\bsf@documentpages{\the\@tempcnta}}}}% + \immediate\write\@auxout{\string\@writefile{nav}% + {\noexpand\headcommand{\noexpand\bsf@disablenaventries}}}% \fi + \fi } - \AtBeginDocument{% - \InputIfFileExists{\jobname.sfp}{}{}% - \if@bsf@append - \immediate\openout\sfr@out\jobname.sfr\relax - \immediate\openout\sfr@sub\jobname.sfp\relax + \InputIfFileExists{\jobname.sfp}{}{}% + \if@bsf@append + \immediate\openout\bsf@sfrout\jobname.sfr\relax + \if@filesw + \immediate\write\@auxout{\string\@writefile{nav}% + {\noexpand\headcommand{\noexpand\bsf@enablenaventries}}}% \fi + \fi } \AtEndDocument{% - \if@bsf@append -% \immediate\closeout\sfr@out - \immediate\closeout\sfr@sub + \if@bsf@append + \bsf@checksfp + \@ifundefined{bsf@totalframenumber}{% + \edef\bsf@totalframenumber{\the\c@framenumber}}{}% + \if@filesw + \immediate\write\@auxout{\string\@writefile{nav}% + {\noexpand\headcommand{% + \noexpand\def\noexpand\inserttotalframenumber{\bsf@totalframenumber}}}} + \newwrite\tf@sfp + \immediate\openout\tf@sfp\jobname.sfp\relax \fi + \fi + \if@filesw + \immediate\write\@auxout{\string\@writefile{nav}% + {\noexpand\headcommand{% + \noexpand\def\noexpand\inserttotalframenumberwithsub{\the\c@framenumber}}}} + \fi } - -% simple command for user macros \newcommand{\ifappend}[2]{\if@bsf@append #1\else #2\fi} +\newcommand{\ifsubframe}[2]{\if@bsf@subframe #1\else #2\fi} +\endinput +%% +%% End of file `beamersubframe.sty'. diff --git a/Master/tlpkg/libexec/ctan2tds b/Master/tlpkg/libexec/ctan2tds index fc713d80939..66b08ea1d5d 100755 --- a/Master/tlpkg/libexec/ctan2tds +++ b/Master/tlpkg/libexec/ctan2tds @@ -1692,6 +1692,7 @@ my $core_latex = "$Master/texmf-dist/tex/latex"; %specialinsrunner = ( 'antomega' => 'latex', # requires interaction 'apa6e' => 'latex', # requires interaction + 'beamersubframe' => 'latex', # requires interaction 'bosisio' => 'latex -translate-file=empty.tcx', # ^^, no 8-bit 'bullcntr' => 'latex', # requires interaction 'canoniclayout' => 'tex', |