\ExplSyntaxOn %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Class / Package options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Provides class / package option processing of l3keys in LaTeX2e \RequirePackage {l3keys2e} % deprecate warning used in options and throughout the collection \msg_new:nnn {rpg} {deprecated} { #1 ~ is ~ deprecated ~ and ~ will ~ be ~ removed ~ in ~ version ~ #2. ~ #3 } \cs_new_protected:Npn { \__rpg_deprecated:nnn } #1#2#3 { \msg_warning:nnnnn { rpg } { deprecated } {#1} {#2} {#3} } \cs_new_protected:Npn { \__rpg_deprecated:nn } #1#2 { \msg_warning:nnnnn { rpg } { deprecated } {#1} {#2} {} } % Messages for unknown options \msg_new:nnn {rpg} { options / unknown_class } { Unknown ~ option ~ " #1 " ~ passed ~ to ~ book ~ class. } \msg_new:nnn {rpg} { options / unknown_package } { Unknown ~ option ~ " #1 ". } % These booleans are not set directly by an option (i.e. instead set by .code) \bool_new:N \l__rpg_show_background_bool \bool_new:N \l__rpg_show_footer_scroll_bool \bool_new:N \l__rpg_justified_bool \bool_new:N \l__rpg_multitoc_bool \bool_new:N \l__rpg_layout_bool \bool_new:N \l__rpg_no_deprecated_code_bool \bool_set_true:N \l__rpg_multitoc_bool \bool_set_eq:NN \l__rpg_layout_bool \c__rpg_isclass_bool % BEGIN section to remove in version 1.0.0 \bool_set_true:N \l__rpg_layout_bool \bool_new:N \l__rpg_layout_set_bool % END section to remove in version 1.0.0 \keys_define:nn { rpg / options } { % Large-scale styling choice bg .choice:, bg / full .code:n = { \bool_set_true:N \l__rpg_show_background_bool \bool_set_true:N \l__rpg_show_footer_scroll_bool }, bg / print .code:n = { \bool_set_false:N \l__rpg_show_background_bool \bool_set_true:N \l__rpg_show_footer_scroll_bool }, bg / none .code:n = { \bool_set_false:N \l__rpg_show_background_bool \bool_set_false:N \l__rpg_show_footer_scroll_bool }, bg .initial:n = full, % Justified text justified .code:n = { \bool_set_true:N \l__rpg_justified_bool }, justified .value_forbidden:n = true, % Suppress deprecated code nodeprecatedcode .code:n = { \bool_set_true:N \l__rpg_no_deprecated_code_bool }, nodeprecatedcode .value_forbidden:n = true, % Avoid multi-column toc nomultitoc .code:n = { \bool_set_false:N \l__rpg_multitoc_bool }, nomultitoc .value_forbidden:n = true, % Apply layout formatting %layout .bool_set:N = \l__rpg_layout_bool, layout .code:n = { \tl_if_eq:nnTF {true} {#1} { \bool_set_true:N \l__rpg_layout_bool } { \bool_set_false:N \l__rpg_layout_bool } \bool_set_true:N \l__rpg_layout_set_bool }, % Remove and replace with .bool_set:N in 1.0.0 layout .value_required:n = true, % Unknown option handling unknown .code:n = { \bool_if:NTF \c__rpg_isclass_bool { \msg_info:nnx { rpg } { options / unknown_class } {\l_keys_key_tl} \PassOptionsToClass { \l_keys_key_tl } { book } } { \msg_error:nnx { rpg } { options / unknown_package } {\l_keys_key_tl} } }, % Deprecated options bg-full .code:n = { \__rpg_deprecated:nnn { Option ~ "bg-full" } {1.0} { Use ~ "bg = full" ~ instead. } \bool_set_true:N \l__rpg_show_background_bool \bool_set_true:N \l__rpg_show_footer_scroll_bool }, bg-full .value_forbidden:n = true, bg-none .code:n = { \__rpg_deprecated:nnn { Option ~ "bg-none" } {1.0} { Use ~ "bg = none" ~ instead. } }, bg-none .value_forbidden:n = true, bg-print .code:n = { \__rpg_deprecated:nnn { Option ~ "bg-print" } {1.0} { Use ~ "bg = print" ~ instead. } \bool_set_true:N \l__rpg_show_footer_scroll_bool }, bg-print .value_forbidden:n = true, } \ProcessKeysOptions { rpg / options } % BEGIN section to remove in version 1.0.0 \bool_if:NF \c__rpg_isclass_bool { \bool_if:NF \l__rpg_layout_set_bool { \msg_new:nnn {rpg} { options / layout_false } { Package ~ option ~ "layout" ~ will ~ default ~ to ~ false ~ in ~ 1.0.0. } \msg_warning:nn {rpg} { options / layout_false } } } % END section to remove in version 1.0.0