From 249e1802e166afcb824ea15688c6fff18f40ff80 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 26 Nov 2015 22:30:27 +0000 Subject: ocgx2 (26nov15) git-svn-id: svn://tug.org/texlive/trunk@38952 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/latex/ocgx2/ChangeLog | 18 +++-- Master/texmf-dist/doc/latex/ocgx2/README | 11 +-- Master/texmf-dist/tex/latex/ocgx2/ocgbase.sty | 97 ++++++++++++++++----------- Master/texmf-dist/tex/latex/ocgx2/ocgx2.sty | 43 +++++++----- 4 files changed, 100 insertions(+), 69 deletions(-) (limited to 'Master') diff --git a/Master/texmf-dist/doc/latex/ocgx2/ChangeLog b/Master/texmf-dist/doc/latex/ocgx2/ChangeLog index 30e962c8596..535b67d6375 100644 --- a/Master/texmf-dist/doc/latex/ocgx2/ChangeLog +++ b/Master/texmf-dist/doc/latex/ocgx2/ChangeLog @@ -1,17 +1,23 @@ +2015-11-26 + * v0.12 : ocgx2.sty + * v0.4 : ocgbase.sty + * fix: last argument of `ocg' environment (initial visibility) had no effect + when re-opening an OCG + 2015-11-23 - * v0.11 (ocgx2.sty) - * v0.3 (ocgbase.sty) + * v0.11 : ocgx2.sty + * v0.3 : ocgbase.sty * new: PDF layers spanning multiple pages 2015-11-02 - * v0.10 (ocgx2.sty) - * v0.2 (ocgbase.sty) + * v0.10 : ocgx2.sty + * v0.2 : ocgbase.sty * new: commands \ocgbase@oc@bdc, \ocgbase_oc_bdc:n and \ocgbase@oc@emc, \ocgbase_oc_emc: for marking optional content in content streams 2015-10-28 - * v0.9 (ocgx2.sty) - * v0.1 (ocgbase.sty) + * v0.9 : ocgx2.sty + * v0.1 : ocgbase.sty * new: Environment option `radiobtngrp' (adding layers to Radio Button Groups), option `showingui' as a synonym for `listintoolbar'; code restructured for better maintenance (new file ocgbase.sty) diff --git a/Master/texmf-dist/doc/latex/ocgx2/README b/Master/texmf-dist/doc/latex/ocgx2/README index ed5d3b512fc..db056cfdf16 100644 --- a/Master/texmf-dist/doc/latex/ocgx2/README +++ b/Master/texmf-dist/doc/latex/ocgx2/README @@ -1,7 +1,7 @@ ================================== The `ocgx2' LaTeX Package - Version 0.11 [2015/11/23] + Version 0.12 [2015/11/26] (C) 2015--\today Alexander Grahn ================================== @@ -25,12 +25,13 @@ To enable dvipdfmx support, pass `dvipdfmx' globally as a class option. * New features: - + layers across page breaks + + layers extending across page breaks + grouping layers into Radio Button Groups -Also, it adds some minor improvements, such as package options, -remembering option settings of re-opened ocgs, correct behaviour of ocg -switching links that were themselves placed on layers, compatibility +Also, it adds some minor improvements and bug fixes, such as package +options, remembering option settings of re-opened ocgs, correct behaviour +of layer switching links that were themselves placed on layers, correct +listing of (nested) ocgs in the layers tab of PDF viewers, compatibility with the `animate' and `media9' packages. `ocgx2' uses code from file `tikzlibraryocgx.code.tex' by P. Gaborit to diff --git a/Master/texmf-dist/tex/latex/ocgx2/ocgbase.sty b/Master/texmf-dist/tex/latex/ocgx2/ocgbase.sty index 445d42a2752..33794d6558d 100644 --- a/Master/texmf-dist/tex/latex/ocgx2/ocgbase.sty +++ b/Master/texmf-dist/tex/latex/ocgx2/ocgbase.sty @@ -2,7 +2,7 @@ % % ocgbase.sty % -% low-level macros for OCG creation, /OC-marked content and +% low-level macros for OCG creation, marking optional content and % for managment of global (document-wide) OCG related lists; % % (automatic) OCG configuration in the PDF catalog @@ -29,7 +29,7 @@ % % Commands defined: % -% \ocgbase_new_ocg:xxx +% \ocgbase_new_ocg:nnn % \ocgbase@new@ocg (LaTeX2e version) % #1: name (as shown in the Layers Tab of the Reader GUI) % #2: usage dict (may be empty), see PDF reference: @@ -40,7 +40,7 @@ % \ocgbase_last_ocg: % \ocgbase@last@ocg (LaTeX2e version) % inserts ID of PDF object created during most recent call of -% \ocgbase_new_ocg:xxx +% \ocgbase_new_ocg:nnn % % -------- % @@ -55,11 +55,18 @@ % \ocgbase_add_to_off_list:n % \ocgbase@add@to@off@list (LaTeX2e version) % #1: PDF object ID of OCG -% macro for belated setting of initial non-visibility of an OCG +% macro for setting initial visibility to `off' % % -------- % -% \ocgbase_add_ocg_to_radiobtn_grp:xxx +% \ocgbase_del_from_off_list:n +% \ocgbase@del@from@off@list (LaTeX2e version) +% #1: PDF object ID of OCG +% macro for setting initial visibility to `on' +% +% -------- +% +% \ocgbase_add_ocg_to_radiobtn_grp:nnn % \ocgbase@add@ocg@to@radiobtn@grp % add OCG #2 (obj ref) to radio button group `#1' (string), % #3: (0|1|false|true) list OCG as part of group `#1' in the Layers Tab) @@ -70,11 +77,11 @@ % \ocgbase@oc@bdc % #1: OCG obj ref % mark begin of optional content belonging to OCG #1 in the current -% content stream +% content stream % % \ocgbase_oc_emc: % \ocgbase@oc@emc -% mark end of optional content in the current content stream +% mark end of optional content in the current content stream % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -94,8 +101,8 @@ \RequirePackage{l3keys2e} \RequirePackage{atenddvi} -\def\g@ocgbase@date@tl{2015/11/23} -\def\g@ocgbase@version@tl{0.3} +\def\g@ocgbase@date@tl{2015/11/26} +\def\g@ocgbase@version@tl{0.4} \ProvidesExplPackage{ocgbase}{\g@ocgbase@date@tl}{\g@ocgbase@version@tl} {support package for ocgx2.sty} @@ -120,8 +127,8 @@ } \tl_new:N\g_ocgbase_ocgs_tl %takes ocg object refs -\tl_new:N\g_ocgbase_offocgs_tl \seq_new:N\g_ocgbase_ocgorder_seq +\seq_new:N\g_ocgbase_offocgs_seq \AtEndDvi{ \tl_if_empty:NF\g_ocgbase_ocgs_tl{ @@ -130,8 +137,8 @@ \tl_set:Nx\l_ocgbase_ocgarray_tl{\pbs_pdflastobj:} \tl_new:N\l_ocgbase_offocgentry_tl %global OFF list - \tl_if_empty:NF\g_ocgbase_offocgs_tl{ - \pbs_pdfobj:nnn{}{array}{\g_ocgbase_offocgs_tl} + \seq_if_empty:NF\g_ocgbase_offocgs_seq{ + \pbs_pdfobj:nnn{}{array}{\seq_use:Nn\g_ocgbase_offocgs_seq{~}} \tl_set:Nx\l_ocgbase_offocgentry_tl{/OFF~\pbs_pdflastobj:} } %global Order list @@ -229,76 +236,84 @@ } %macro for inserting new OCG object -\cs_new:Nn\ocgbase_new_ocg:nnn{ +\cs_new_nopar:Nn\ocgbase_new_ocg:nnn{ \pbs_pdfobj:nnn{}{dict}{ /Type/OCG/Name~(#1)~\tl_if_blank:oF{#2}{/Usage<<#2>>} } \tl_gput_right:Nx\g_ocgbase_ocgs_tl{~\g_pbs_pdflastobj_tl} \bool_if:nT{ - \str_if_eq_p:nn{#3}{\c_zero} || - \str_if_eq_p:nn{#3}{off} || - \str_if_eq_p:nn{#3}{false} + \str_if_eq_x_p:nn{#3}{\c_zero} || + \str_if_eq_x_p:nn{#3}{off} || + \str_if_eq_x_p:nn{#3}{false} }{ - \tl_gput_right:Nx\g_ocgbase_offocgs_tl{~\g_pbs_pdflastobj_tl} - \tl_new:c{off:\g_pbs_pdflastobj_tl} + \ocgbase_add_to_off_list:n{\g_pbs_pdflastobj_tl} } \tl_gset_eq:NN\g_ocgbase_last_ocg_tl\g_pbs_pdflastobj_tl } -\cs_generate_variant:Nn\ocgbase_new_ocg:nnn{xxx} -\cs_new:Nn\ocgbase_last_ocg:{\g_ocgbase_last_ocg_tl} +\cs_new_nopar:Nn\ocgbase_last_ocg:{\g_ocgbase_last_ocg_tl} %macro for appending OCG object to global `Order' list % in Layers Tab of the GUI -\cs_new:Nn\ocgbase_add_to_order_list:n{ +\cs_new_nopar:Nn\ocgbase_add_to_order_list:n{ \seq_gput_right:Nx\g_ocgbase_ocgorder_seq{#1} } -%macro for belated appending an OCG object ref to the global `OFF' list +%macro for appending an OCG object to the global `OFF' list +%(initial non-visibility) +\cs_new_nopar:Nn\ocgbase_add_to_off_list:n{ + \seq_if_in:NxF\g_ocgbase_offocgs_seq{#1}{ + \seq_gput_right:Nx\g_ocgbase_offocgs_seq{#1} + } +} + +%macro for removing an OCG object from global `OFF' list %(initial non-visibility) -\cs_new:Nn\ocgbase_add_to_off_list:n{ - \tl_if_exist:cF{off:#1}{ - \tl_gput_right:Nx\g_ocgbase_offocgs_tl{~#1}\tl_new:c{off:#1} +\cs_new_nopar:Nn\ocgbase_del_from_off_list:n{ + \seq_if_in:NxT\g_ocgbase_offocgs_seq{#1}{ + \ocgbase_seq_gremove_all:Nx\g_ocgbase_offocgs_seq{#1} } } +\cs_set_eq:NN\ocgbase_seq_gremove_all:Nn\seq_gremove_all:Nn +\cs_generate_variant:Nn\ocgbase_seq_gremove_all:Nn{Nx} -\cs_new:Nn\ocgbase_add_ocg_to_radiobtn_grp:nnn{ +\cs_new_nopar:Nn\ocgbase_add_ocg_to_radiobtn_grp:nnn{ % #1: rbtn group name, % #2: OCG obj ref, % #3: visible in Layers Tab - \seq_if_in:NnF\g_ocgbase_ocgorder_seq{#1}{ - \seq_gput_right:Nn\g_ocgbase_ocgorder_seq{#1} + \seq_if_in:NxF\g_ocgbase_ocgorder_seq{#1}{ + \seq_gput_right:Nx\g_ocgbase_ocgorder_seq{#1} \seq_new:c{g_ocgbase_#1_rbtn_order_seq} \seq_new:c{g_ocgbase_#1_rbtn_groups_seq} } - \seq_if_in:cnTF{g_ocgbase_#1_rbtn_order_seq}{#2}{ + \seq_if_in:cxTF{g_ocgbase_#1_rbtn_order_seq}{#2}{ \bool_if:nT{ - \str_if_eq_p:nn{#3}{\c_zero} || - \str_if_eq_p:nn{#3}{false} + \str_if_eq_x_p:nn{#3}{\c_zero} || + \str_if_eq_x_p:nn{#3}{false} }{ - \seq_gremove_all:cn{g_ocgbase_#1_rbtn_order_seq}{#2} + \ocgbase_seq_gremove_all:cx{g_ocgbase_#1_rbtn_order_seq}{#2} } }{ \bool_if:nF{ - \str_if_eq_p:nn{#3}{\c_zero} || - \str_if_eq_p:nn{#3}{false} + \str_if_eq_x_p:nn{#3}{\c_zero} || + \str_if_eq_x_p:nn{#3}{false} }{ - \seq_gput_right:cn{g_ocgbase_#1_rbtn_order_seq}{#2} + \seq_gput_right:cx{g_ocgbase_#1_rbtn_order_seq}{#2} } } - \seq_gput_right:cn{g_ocgbase_#1_rbtn_groups_seq}{#2} + \seq_gput_right:cx{g_ocgbase_#1_rbtn_groups_seq}{#2} } -\cs_generate_variant:Nn\ocgbase_add_ocg_to_radiobtn_grp:nnn{xxx} % OC-marked content -\cs_new:Nn\ocgbase_oc_bdc:n{\pbs_pdfbdc:nn{/OC}{#1}} -\cs_new:Nn\ocgbase_oc_emc:{\pbs_pdfemc:} +\cs_new_nopar:Nn\ocgbase_oc_bdc:n{\pbs_pdfbdc:nn{/OC}{#1}} +\cs_new_nopar:Nn\ocgbase_oc_emc:{\pbs_pdfemc:} %l2e versions -\cs_gset_eq:NN\ocgbase@new@ocg\ocgbase_new_ocg:xxx +\cs_gset_eq:NN\ocgbase@new@ocg\ocgbase_new_ocg:nnn \cs_gset_eq:NN\ocgbase@last@ocg\ocgbase_last_ocg: \cs_gset_eq:NN\ocgbase@add@to@order@list\ocgbase_add_to_order_list:n \cs_gset_eq:NN\ocgbase@add@to@off@list\ocgbase_add_to_off_list:n -\cs_gset_eq:NN\ocgbase@add@ocg@to@radiobtn@grp\ocgbase_add_ocg_to_radiobtn_grp:xxx +\cs_gset_eq:NN\ocgbase@del@from@off@list\ocgbase_del_from_off_list:n +\cs_gset_eq:NN\ocgbase@add@ocg@to@radiobtn@grp\ocgbase_add_ocg_to_radiobtn_grp:nnn \cs_gset_eq:NN\ocgbase@oc@bdc\ocgbase_oc_bdc:n \cs_gset_eq:NN\ocgbase@oc@emc\ocgbase_oc_emc: diff --git a/Master/texmf-dist/tex/latex/ocgx2/ocgx2.sty b/Master/texmf-dist/tex/latex/ocgx2/ocgx2.sty index 946682d0332..2bf8d2273ba 100644 --- a/Master/texmf-dist/tex/latex/ocgx2/ocgx2.sty +++ b/Master/texmf-dist/tex/latex/ocgx2/ocgx2.sty @@ -38,7 +38,7 @@ \RequirePackage{l3keys2e} \RequirePackage{afterpage} -\ProvidesExplPackage{ocgx2}{2015/11/23}{0.11} +\ProvidesExplPackage{ocgx2}{2015/11/26}{0.12} {ports `ocgx' functionality to dvips+ps2pdf, xelatex and dvipdfmx} %creating global definitions @@ -135,14 +135,22 @@ }{ \bool_gset_false:N\g_ocgxii_nestedB_bool } + \bool_if:nTF{ %initial visibility + \str_if_eq_p:nn{#4}{\c_one} || + \str_if_eq_p:nn{#4}{on} || + \str_if_eq_p:nn{#4}{true} + }{ + \ocgbase_del_from_off_list:n{\tl_use:c{ocgxii@#3}} + }{ + \ocgbase_add_to_off_list:n{\tl_use:c{ocgxii@#3}} + } }{ \tl_gset:cn{ocgxii@#3.opts}{#1} \keys_set:nn{ocgx2/user}{#1} - \ocgbase_new_ocg:xxx{#2}{ + \ocgbase_new_ocg:nnn{#2}{ \l_ocgxii_view_tl\l_ocgxii_print_tl\l_ocgxii_export_tl }{#4} \tl_gset:cx{ocgxii@#3}{\ocgbase_last_ocg:} - \tl_gset:cn{ocgxii_#3_is_listed}{0} \int_compare:nTF{\l_ocgxii_listno_tl=\c_one}{ \bool_gset_false:N\g_ocgxii_nestedB_bool }{ @@ -153,7 +161,7 @@ } } \seq_map_inline:Nn\l_ocgxii_rbgrps_seq{% process list of radio btn groups - \ocgbase_add_ocg_to_radiobtn_grp:xxx{##1}{\tl_use:c{ocgxii@#3}}{ + \ocgbase_add_ocg_to_radiobtn_grp:nnn{##1}{\tl_use:c{ocgxii@#3}}{ \int_compare:nTF{\l_ocgxii_listno_tl=\c_one}{false}{true} } } @@ -164,7 +172,7 @@ \c_false_bool } }{ - \cs_if_exist:NF\g_ocgxii_rerunwarned_tl{ + \tl_if_exist:NF\g_ocgxii_rerunwarned_tl{ \tl_new:N\g_ocgxii_rerunwarned_tl \AtEndDocument{\msg_warning:nn{ocgx2}{rerun}} } @@ -190,7 +198,7 @@ \bool_new:N\g_ocgxii_nestedB_bool % nested OCG begin \bool_new:N\g_ocgxii_nestedE_bool % nested OCG end -\cs_gset:Nn\ocgxii_ocgstack_shipout:N{ +\cs_new_nopar:Nn\ocgxii_ocgstack_shipout:N{ \iow_shipout_x:Nx\@mainaux{ \token_to_str:N\ocgxii@stack@on@page{ \exp_not:N\int_use:N\g_ocgxii_page_int @@ -212,7 +220,7 @@ %end of page action in output routine \cs_new_nopar:Nn\ocgxii_at_end_page:{ %check whether end-of-page ocg stack has settled - \iow_now:Nx\@mainaux{ + \iow_shipout:Nx\@mainaux{ \token_to_str:N\ocgxii@newkey{ocgx2.oldstack.\int_use:N\g_ocgxii_page_int}{ \seq_use:cn{g_pending_ocgs_on_\int_use:c{g_ocgxii_page_int}_seq}{,} } @@ -228,7 +236,7 @@ \c_false_bool } }{ - \cs_if_exist:NF\g_ocgxii_rerunwarned_tl{ + \tl_if_exist:NF\g_ocgxii_rerunwarned_tl{ \tl_new:N\g_ocgxii_rerunwarned_tl \AtEndDocument{\msg_warning:nn{ocgx2}{rerun}} } @@ -251,9 +259,9 @@ \seq_map_variable:NNn\l_ocgxii_temp_seq\l_ocgxii_arg_tl{ \ocgbase_oc_bdc:n{\l_ocgxii_arg_tl} } - % copy pending ocg stack to next page, if it has not been initialized yet - % from aux file \int_gincr:N\g_ocgxii_page_int + % copy pending ocg stack from previous page, if it has not been initialized + % yet from aux file \seq_if_exist:cF{g_pending_ocgs_on_\int_use:c{g_ocgxii_page_int}_seq}{ \seq_gset_eq:cc{ g_pending_ocgs_on_\int_use:c{g_ocgxii_page_int}_seq @@ -280,20 +288,20 @@ %macro that inserts /OC <> entry; %for use within annotation dicts -\tl_set:Nn\ocgxii@insert@OC{ +\cs_new_nopar:Npn\ocgxii@insert@OC{ \seq_if_empty:NF\g_ocgxii_ocgstack_seq{ /OC~<> } } -\cs_set:Nn\ocgxii_ocglist_reset:{ +\cs_new_nopar:Nn\ocgxii_ocglist_reset:{ \tl_clear_new:N\l_ocgxii_u_list_tl \tl_clear_new:N\l_ocgxii_d_list_tl \tl_clear_new:N\l_ocgxii_e_list_tl \tl_clear_new:N\l_ocgxii_x_list_tl } -\cs_set:Nn\ocgxii_ocglist_build:Nn{ +\cs_new_nopar:Nn\ocgxii_ocglist_build:Nn{ \tl_set:Nx\l_ocglistarg_tl{#2}\tl_trim_spaces:N\l_ocglistarg_tl \seq_set_split:NnV\l_ocgxii_ocglistarg_seq{~}\l_ocglistarg_tl \seq_map_variable:NNn\l_ocgxii_ocglistarg_seq\l_tempa_tl{ @@ -309,7 +317,7 @@ \ocgxii_ocglist_build:Nn\l_ocgxii_u_list_tl{\seq_item:Nn\l_tmpa_seq{4}} } -\cs_set:Nn\ocgxii_ocglist_process_idlist:nn{ +\cs_new_nopar:Nn\ocgxii_ocglist_process_idlist:nn{ \ocgxii_ocglist_reset: \tl_set:Nx\l_ocgxii_opt_tl{#1}\tl_remove_all:Nn\l_ocgxii_opt_tl{~} \str_case_x:nnF{\l_ocgxii_opt_tl}{ @@ -335,7 +343,8 @@ \int_new:N\g_ocgxii_widcount_int% widget counter -%re-implement commands from ocg-p.sty / ocgx.sty (all engines including ps2pdf [gs>=9.15]) +%re-implement commands from ocg-p.sty / ocgx.sty (all engines including +%ps2pdf [gs>=9.15]) \DeclareDocumentCommand\switchocg{o m +m}{ \leavevmode \IfNoValueTF{#1}{ @@ -558,7 +567,7 @@ \str_if_eq_x:nnF{#2}{}{ \tl_if_exist:cTF{ocgx2.ocg.#2}{\tl_put_right:Nx#1{~\tl_use:c{ocgx2.ocg.#2}}}{ \msg_warning:nnx{ocgx2}{undefined~OCG}{#2} - \cs_if_exist:NF\g_ocgxii_refundefwarned_tl{ + \tl_if_exist:NF\g_ocgxii_refundefwarned_tl{ \tl_new:N\g_ocgxii_refundefwarned_tl \AtEndDocument{\msg_warning:nn{ocgx2}{undefined~OCGs}} } @@ -627,7 +636,7 @@ } % dvipdfmx and xelatex workaround for ocg buttons within `tikzpicture' context -\cs_set:Nn\ocgxii_pdflink:nn{ +\cs_new:Nn\ocgxii_pdflink:nn{ \bool_if:nTF{ \g_ocgxii_dvipdfmx_bool && \cs_if_exist_p:N\pgfpictureid }{ -- cgit v1.2.3