summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/ocgx2/ocgx2.sty
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2015-11-01 22:14:33 +0000
committerKarl Berry <karl@freefriends.org>2015-11-01 22:14:33 +0000
commit9cda77f78d171518f0db92ba633ce5c3ab8124c6 (patch)
tree22a8a5f37359fc4bb6aa5cd636fef82a8f73b6d7 /Master/texmf-dist/tex/latex/ocgx2/ocgx2.sty
parentecb1680ccb53b3b96460fda99cecfb770843d96f (diff)
ocgx2 (1nov15)
git-svn-id: svn://tug.org/texlive/trunk@38760 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/ocgx2/ocgx2.sty')
-rw-r--r--Master/texmf-dist/tex/latex/ocgx2/ocgx2.sty220
1 files changed, 110 insertions, 110 deletions
diff --git a/Master/texmf-dist/tex/latex/ocgx2/ocgx2.sty b/Master/texmf-dist/tex/latex/ocgx2/ocgx2.sty
index e0da040c319..62b9c905b72 100644
--- a/Master/texmf-dist/tex/latex/ocgx2/ocgx2.sty
+++ b/Master/texmf-dist/tex/latex/ocgx2/ocgx2.sty
@@ -7,11 +7,11 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% The intent of this package is to be a drop-in replacement for the already
-% existing CTAN package `ocgx' by Paul Gaborit.
+% existing CTAN package `ocgx' by Paul Gaborit, and also for `ocg-p' and `ocg'.
%
% It re-implements the functionality of the ocg, ocgx and ocg-p packages
% and adds support for all known engines and backends including
-% latex+dvips+ps2pdf, xelatex, latex+dvipdfm, lualatex.
+% latex+dvips+ps2pdf, xelatex, latex+dvipdfmx, lualatex.
%
% Adds some minor improvements, such as package options, remembering option
% settings of reopened ocgs, correct behaviour of ocg switching links that were
@@ -33,58 +33,116 @@
% The Current Maintainer of this work is A. Grahn.
\RequirePackage{xparse}
-\RequirePackage{atenddvi}
-\RequirePackage{ifpdf}
\RequirePackage{l3keys2e}
-\AtBeginDocument{
- \@ifpackageloaded{media9}{}{\RequirePackage{media9}}
- \@ifpackagelater{media9}{2015/01/21}{}{
- \PackageError{ocgx2}{%
- Requires package `media9' v0.49 [2015/01/21] or\MessageBreak
- newer, but only v\g@mix@version@tl\space[\g@mix@date@tl] is available
- }{}%
+\ProvidesExplPackage{ocgx2}{2015/10/28}{0.9}
+{ports `ocgx' functionality to dvips+ps2pdf, xelatex and dvipdfmx}
+
+%package opts
+%unknown package option error message
+\msg_set:nnnn{ocgx2}{unknown~package~option}{Unknown~package~option~`#1'.}{
+ Package option~'#1'~is~unknown;\\
+ perhaps~it~is~spelled~incorrectly.
+}
+
+\bool_new:N\g_ocgxii_dvipdfmx_bool
+\bool_new:N\l_ocgxii_tikz_bool
+
+\keys_define:nn{ocgx2}{
+ xetex .code:n = {
+ \PassOptionsToPackage{xetex}{ocgbase}
+ },
+
+ dvipdfmx .code:n = {
+ \PassOptionsToPackage{dvipdfmx}{ocgbase}
+ \bool_gset_true:N\g_ocgxii_dvipdfmx_bool
+ },
+
+ viewocg .choice:,
+ viewocg / always .code:n={
+ \tl_gset:Nn\g_ocgxii_view_tl{/View<</ViewState/ON>>}},
+ viewocg / never .code:n={
+ \tl_gset:Nn\g_ocgxii_view_tl{/View<</ViewState/OFF>>}},
+ viewocg / ifvisible .code:n={\tl_gclear_new:N\g_ocgxii_view_tl},
+ viewocg .default:n={ifvisible},
+
+ printocg .choice:,
+ printocg / always .code:n={
+ \tl_gset:Nn\g_ocgxii_print_tl{/Print<</PrintState/ON>>}},
+ printocg / never .code:n={
+ \tl_gset:Nn\g_ocgxii_print_tl{/Print<</PrintState/OFF>>}},
+ printocg / ifvisible .code:n={\tl_gclear_new:N\g_ocgxii_print_tl},
+ printocg .default:n={ifvisible},
+
+ exportocg .choice:,
+ exportocg / always .code:n={
+ \tl_gset:Nn\g_ocgxii_export_tl{/Export<</ExportState/ON>>}},
+ exportocg / never .code:n={
+ \tl_gset:Nn\g_ocgxii_export_tl{/Export<</ExportState/OFF>>}},
+ exportocg / ifvisible .code:n={\tl_gclear_new:N\g_ocgxii_export_tl},
+ exportocg .default:n={ifvisible},
+
+ listintoolbar .choices:nn = {always,never,iffirstuse}{
+ \tl_gset:Nx\g_ocgxii_listno_tl{\int_eval:n{\l_keys_choice_int-\c_one}}
+ },
+ listintoolbar .default:n={iffirstuse},
+
+ showingui .meta:n = {listintoolbar=#1},
+ showingui .default:n={iffirstuse},
+
+ tikz .bool_set:N = \l_ocgxii_tikz_bool,
+ tikz .default:n = true,
+
+ unknown .code:n = {
+ \msg_error:nnx{ocgx2}{unknown~package~option}{\l_keys_key_tl}
}
}
-\ProvidesExplPackage{ocgx2}{2015/09/11}{0.8}
-{ports `ocgx' functionality to dvips+ps2pdf, xelatex and dvipdfmx}
+%package options preset
+\keys_set:nn{ocgx2}{viewocg,printocg,exportocg,showingui,tikz=false}
+
+%process package options
+\ProcessKeysOptions{ocgx2}
+\sys_if_engine_xetex:T{\bool_gset_true:N\g_ocgxii_dvipdfmx_bool}
+
+\RequirePackage{ocgbase}
%re-implement ocg-p's `ocg' environment
\DeclareDocumentEnvironment{ocg}{O{}mmm}{
- \bool_if:NT\g_ocgxii_nestedB_bool{\tl_gput_right:Nx\@ocgbase@ocgorder{~[}}
+ \bool_if:NT\g_ocgxii_nestedB_bool{\ocgbase_add_to_order_list:n{[}}
\bool_gset_true:N\g_ocgxii_nestedB_bool
\bool_gset_false:N\g_ocgxii_nestedE_bool
\group_begin:
\ocgxii_reset_cmd_opts: % ... to the user-set package options
\tl_if_exist:cTF{ocgxii@#3}{ %re-open existing layer
\tl_set:Nx\l_tempa_tl{\tl_use:c{ocgxii@#3.opts},#1}
- \keys_set:nV{ocgxii/user}\l_tempa_tl
+ \tl_gset:cx{ocgxii@#3.opts}{\l_tempa_tl} %new options appended
+ \keys_set:nV{ocgx2/user}\l_tempa_tl
\int_compare:nT{\l_ocgxii_listno_tl=\c_zero}{
- \tl_gput_right:Nx\@ocgbase@ocgorder{~\tl_use:c{ocgxii@#3}}
+ \ocgbase_add_to_order_list:n{\tl_use:c{ocgxii@#3}}
}
}{
\tl_gset:cn{ocgxii@#3.opts}{#1}
- \keys_set:nn{ocgxii/user}{#1}
- \mix_pdfobj:nnn{}{dict}{
- /Type/OCG/Name~(#2)/Usage<<
- \l_ocgxii_view_tl\l_ocgxii_print_tl\l_ocgxii_export_tl>>
- }
- \tl_gput_right:Nx\@ocgbase@ocgs{\space\g_mix_pdflastobj_tl}
- \int_compare:nT{#4==\c_zero}{
- \tl_gput_right:Nx\@ocgbase@offocgs{\space\g_mix_pdflastobj_tl}
- }
- \tl_gset:cx{ocgxii@#3}{\g_mix_pdflastobj_tl}
+ \keys_set:nn{ocgx2/user}{#1}
+ \ocgbase_new_ocg:xxx{#2}{
+ \l_ocgxii_view_tl\l_ocgxii_print_tl\l_ocgxii_export_tl
+ }{#4}
+ \tl_gset:cx{ocgxii@#3}{\ocgbase_last_ocg:}
\int_compare:nF{\l_ocgxii_listno_tl=\c_one}{
- \tl_gput_right:Nx\@ocgbase@ocgorder{~\g_mix_pdflastobj_tl}
+ \ocgbase_add_to_order_list:n{\ocgbase_last_ocg:}
}
\iow_now:Nx\@auxout{
\token_to_str:N\expandafter\xdef\token_to_str:N\csname
- \space OCGpdfobj#3\endcsname{\g_mix_pdflastobj_tl}
+ \space OCGpdfobj#3\endcsname{\ocgbase_last_ocg:}
+ }
+ }
+ \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}}{
+ \int_compare:nTF{\l_ocgxii_listno_tl=\c_one}{false}{true}
}
}
\bool_if:nT{
-% !\cs_if_exist_p:c{OCGpdfobj#3} || %lazy evaluation may cease to work
+% !\cs_if_exist_p:c{OCGpdfobj#3} || %lazy evaluation may cease to work
% !\str_if_eq_x_p:nn{\use:c{OCGpdfobj#3}}{\tl_use:c{ocgxii@#3}}
!\cs_if_exist:cTF{OCGpdfobj#3}{
\str_if_eq_x_p:nn{\tl_use:c{OCGpdfobj#3}}{\tl_use:c{ocgxii@#3}}
@@ -98,15 +156,15 @@
}
}
\tl_gset:cx{OCGpdfobj#3}{\tl_use:c{ocgxii@#3}}
- \seq_gput_left:Nx\g_fixocg_ocgstack_seq{\tl_use:c{ocgxii@#3}}
+ \seq_gput_left:Nx\g_ocgxii_ocgstack_seq{\tl_use:c{ocgxii@#3}}
\group_end:
- \mix_pdfbdc:nn{/OC}{\tl_use:c{ocgxii@#3}}
+ \pbs_pdfbdc:nn{/OC}{\tl_use:c{ocgxii@#3}}
\ignorespaces
}{
\unskip
- \mix_pdfemc:
- \seq_gpop_left:NN\g_fixocg_ocgstack_seq\l_tempa_tl
- \bool_if:NT\g_ocgxii_nestedE_bool{\tl_gput_right:Nx\@ocgbase@ocgorder{~]}}
+ \pbs_pdfemc:
+ \seq_gpop_left:NN\g_ocgxii_ocgstack_seq\l_tempa_tl
+ \bool_if:NT\g_ocgxii_nestedE_bool{\ocgbase_add_to_order_list:n{]}}
\bool_gset_true:N\g_ocgxii_nestedE_bool
\bool_gset_false:N\g_ocgxii_nestedB_bool
}
@@ -114,13 +172,13 @@
\bool_new:N\g_ocgxii_nestedE_bool % nested OCG end
%stack of PDF obj references of currently open OCGs
-\seq_new:N\g_fixocg_ocgstack_seq
+\seq_new:N\g_ocgxii_ocgstack_seq
%macro that inserts /OC <<OCMD with currently open OCGs>> entry;
%for use within annotation dicts
\tl_set:Nn\ocgxii@insert@OC{
- \seq_if_empty:NF\g_fixocg_ocgstack_seq{
- /OC~<</Type/OCMD/OCGs~[\seq_use:Nn\g_fixocg_ocgstack_seq{~}]/P/AllOn>>
+ \seq_if_empty:NF\g_ocgxii_ocgstack_seq{
+ /OC~<</Type/OCMD/OCGs~[\seq_use:Nn\g_ocgxii_ocgstack_seq{~}]/P/AllOn>>
}
}
@@ -404,47 +462,8 @@
}
}
-%package opts
-\keys_define:nn{ocgxii}{
- viewocg .choice:,
- viewocg / always .code:n={
- \tl_gset:Nn\g_ocgxii_view_tl{/View<</ViewState/ON>>}},
- viewocg / never .code:n={
- \tl_gset:Nn\g_ocgxii_view_tl{/View<</ViewState/OFF>>}},
- viewocg / ifvisible .code:n={\tl_gclear_new:N\g_ocgxii_view_tl},
- viewocg .default:n={ifvisible},
-
- printocg .choice:,
- printocg / always .code:n={
- \tl_gset:Nn\g_ocgxii_print_tl{/Print<</PrintState/ON>>}},
- printocg / never .code:n={
- \tl_gset:Nn\g_ocgxii_print_tl{/Print<</PrintState/OFF>>}},
- printocg / ifvisible .code:n={\tl_gclear_new:N\g_ocgxii_print_tl},
- printocg .default:n={ifvisible},
-
- exportocg .choice:,
- exportocg / always .code:n={
- \tl_gset:Nn\g_ocgxii_export_tl{/Export<</ExportState/ON>>}},
- exportocg / never .code:n={
- \tl_gset:Nn\g_ocgxii_export_tl{/Export<</ExportState/OFF>>}},
- exportocg / ifvisible .code:n={\tl_gclear_new:N\g_ocgxii_export_tl},
- exportocg .default:n={ifvisible},
-
- listintoolbar .choices:nn = {always,never,iffirstuse}{
- \tl_gset:Nx\g_ocgxii_listno_tl{\int_eval:n{\l_keys_choice_int-\c_one}}
- },
- listintoolbar .default:n={iffirstuse},
-
- tikz .bool_set:N = \l_ocgxii_tikz_bool,
- tikz .default:n = true
-}
-
-%package options preset
-\keys_set:nn{ocgxii}{viewocg,printocg,exportocg,listintoolbar,tikz=false}
-\ProcessKeysOptions{ocgxii} %process package options
-
%command opts
-\keys_define:nn{ocgxii/user}{
+\keys_define:nn{ocgx2/user}{
viewocg .choice:,
viewocg / always .code:n={
\tl_set:Nn\l_ocgxii_view_tl{/View<</ViewState/ON>>}},
@@ -474,7 +493,15 @@
listintoolbar .choices:nn = {always,never,iffirstuse}{
\tl_set:Nx\l_ocgxii_listno_tl{\int_eval:n{\l_keys_choice_int-\c_one}}
},
- listintoolbar .default:n={iffirstuse}
+ listintoolbar .default:n={iffirstuse},
+
+ showingui .meta:n = {listintoolbar=#1},
+ showingui .default:n={iffirstuse},
+
+ radiobtngrp .code:n = {
+ \seq_put_right:Nx\l_ocgxii_rbgrps_seq{#1}
+ },
+ radiobtngrp .value_required:n = {true}
}
\cs_new:Nn\ocgxii_reset_cmd_opts:{
@@ -482,35 +509,8 @@
\tl_set_eq:NN\l_ocgxii_print_tl\g_ocgxii_print_tl
\tl_set_eq:NN\l_ocgxii_export_tl\g_ocgxii_export_tl
\tl_set_eq:NN\l_ocgxii_listno_tl\g_ocgxii_listno_tl
-}
-
-\group_begin:
-\char_set_catcode_active:N\+\let+\space
-\tl_gset:Nx\g_ocgxii_gsoldwarning_tl{
- {product~(Ghostscript)~search~{pop~pop~pop~true}{pop~false}ifelse~
- revision~915~lt~and~{
- (\token_to_str:N\n
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\token_to_str:N\n
- @@++++++++++++Warning:+Ghostscript+too+old!++++++++++++++@@\token_to_str:N\n
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\token_to_str:N\n
- @@+++++++++++++++++++++++++++++++++++++++++++++++++++++++@@\token_to_str:N\n
- @@+Package+`ocgx2'+requires+Ghostscript+version+>=+9.15.+@@\token_to_str:N\n
- @@+Otherwise,+PDF+layers+will+not+work.++++++++++++++++++@@\token_to_str:N\n
- @@+++++++++++++++++++++++++++++++++++++++++++++++++++++++@@\token_to_str:N\n
- @@+Get+current+version+from++++++++++++++++++++++++++++++@@\token_to_str:N\n
- @@+http://www.ghostscript.com/download+++++++++++++++++++@@\token_to_str:N\n
- @@+++++++++++++++++++++++++++++++++++++++++++++++++++++++@@\token_to_str:N\n
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\token_to_str:N\n)
- print}~if}~?pdfmark
-}
-\group_end:
-
-\AtBeginDocument{
- \ifpdf\else
- \bool_if:NF\g_mix_dvipdfmx_bool{
- \AtEndDvi{\special{ps::[nobreak]\g_ocgxii_gsoldwarning_tl}}
- }
- \fi
+ %stack of radio button group names the current ocg belongs to
+ \seq_clear_new:N\l_ocgxii_rbgrps_seq
}
\msg_set:nnn{ocgx2}{rerun}{Rerun~to~get~OCG~references~right!}
@@ -525,17 +525,17 @@
% dvipdfmx and xelatex workaround for ocg buttons within `tikzpicture' context
\cs_set:Nn\ocgxii_pdflink:nn{
\bool_if:nTF{
- \g_mix_dvipdfmx_bool && \cs_if_exist_p:N\pgfpictureid
+ \g_ocgxii_dvipdfmx_bool && \cs_if_exist_p:N\pgfpictureid
}{
\hbox_set:Nn\l_tmpa_box{#2}
- \mix_pdfannot:nnnn{
+ \pbs_pdfannot:nnnn{
\dim_use:N\box_wd:N\l_tmpa_box}{
\dim_use:N\box_ht:N\l_tmpa_box}{
\dim_use:N\box_dp:N\l_tmpa_box
}{#1}
\box_use_clear:N\l_tmpa_box
}{
- \mix_pdflink:nn{#1}{#2}
+ \pbs_pdflink:nn{#1}{#2}
}
}