summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/litetable/tex/litetable.cls
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/litetable/tex/litetable.cls')
-rw-r--r--macros/latex/contrib/litetable/tex/litetable.cls759
1 files changed, 384 insertions, 375 deletions
diff --git a/macros/latex/contrib/litetable/tex/litetable.cls b/macros/latex/contrib/litetable/tex/litetable.cls
index 556b766c28..864eaec8f8 100644
--- a/macros/latex/contrib/litetable/tex/litetable.cls
+++ b/macros/latex/contrib/litetable/tex/litetable.cls
@@ -1,24 +1,23 @@
-%% ***********************************************************
-%% Copyright 2024 by M.Y. XIA <xiamyphys@gmail.com> *
-%% *
-%% This work may be distributed and/or modified under *
-%% the conditions of the LaTeX Project Public License *
-%% *
-%% http://www.latex-project.org/lppl.txt *
-%% *
-%% either version 1.3c of this license or any later *
-%% version. *
-%% *
-%% This work has the LPPL maintenance status `maintained'. *
-%% *
-% The Current Maintainers of this work are M.Y. XIA & L.J. Guo
-%% *
-%% This work consists of the files litetable.cls, *
-%% and README.md. *
-%% available at https://github.com/xiamyphys/litetable *
-%% ***********************************************************
+%% *********************************************************************
+%% Copyright 2024 by M.Y. XIA <xiamyphys@gmail.com> *
+%% *
+%% This work may be distributed and/or modified under the *
+%% conditions of the LaTeX Project Public License *
+%% *
+%% http://www.latex-project.org/lppl.txt *
+%% *
+%% either version 1.3c of this license or any later version. *
+%% *
+%% This work has the LPPL maintenance status `maintained'. *
+%% *
+%% The Current Maintainers of this work are M.Y. XIA & L.J. Guo *
+%% *
+%% This work consists of the files litetable.cls, *
+%% and README.md. *
+%% available at https://github.com/xiamyphys/litetable *
+%% *********************************************************************
\RequirePackage{xparse}% For TeX Live 2019 - 2020 Compatibility
-\ProvidesExplClass{litetable}{2024/10/01}{3.1B}{Course Schedule}
+\ProvidesExplClass {litetable} {2024/10/09} {3.1C} {Course Schedule}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions\relax
@@ -29,422 +28,432 @@
% Module for texlive 2021 and later (by @ljguo)
\cs_if_exist:NF \clist_put_right:Ne
-{ \cs_generate_variant:Nn \clist_put_right:Nn { Ne } }
+ { \cs_generate_variant:Nn \clist_put_right:Nn { Ne } }
\cs_if_exist:NF \clist_set:Ne
-{ \cs_generate_variant:Nn \clist_set:Nn { Ne } }
+ { \cs_generate_variant:Nn \clist_set:Nn { Ne } }
\cs_if_exist:NT \clist_count:e
-{ \cs_generate_variant:Nn \clist_count:n { e } }
+ { \cs_generate_variant:Nn \clist_count:n { e } }
\cs_if_exist:NF \exp_args:NNNe
-{
- \cs_new:Npn \exp_args:NNNe #1#2#3#4
{
- \exp_after:wN #1
- \exp_after:wN #2
- \exp_after:wN #3
- \tex_expanded:D { {#4} }
+ \cs_new:Npn \exp_args:NNNe #1#2#3#4
+ {
+ \exp_after:wN #1
+ \exp_after:wN #2
+ \exp_after:wN #3
+ \tex_expanded:D { {#4} }
+ }
}
-}
% Module for left -> right data structure (by @ljguo)
\cs_new_protected_nopar:Npn \__litetable_get_left:nN #1#2
-{
- \group_begin:
- \seq_set_split:Nnn \l__litetable_tmpa_seq { -> } { #1 }
- \exp_args:NNNe \group_end: \tl_set:Nn #2
- { \seq_item:Nn \l__litetable_tmpa_seq { 1 } }
-}
+ {
+ \group_begin:
+ \seq_set_split:Nnn \l__litetable_tmpa_seq { -> } {#1}
+ \exp_args:NNNe \group_end: \tl_set:Nn #2
+ { \seq_item:Nn \l__litetable_tmpa_seq { 1 } }
+ }
\cs_new_protected_nopar:Npn \__litetable_get_right:nN #1#2
-{
- \group_begin:
- \seq_set_split:Nnn \l__litetable_tmpa_seq { -> } { #1 }
- \exp_args:NNNe \group_end: \tl_set:Nn #2
- { \seq_item:Nn \l__litetable_tmpa_seq { 2 } }
-}
+ {
+ \group_begin:
+ \seq_set_split:Nnn \l__litetable_tmpa_seq { -> } {#1}
+ \exp_args:NNNe \group_end: \tl_set:Nn #2
+ { \seq_item:Nn \l__litetable_tmpa_seq { 2 } }
+ }
\cs_generate_variant:Nn \__litetable_get_left:nN { e }
\cs_generate_variant:Nn \__litetable_get_right:nN { e }
\int_new:N \l__time_num_int
\dim_new:N \l__time_vunit_dim
\cs_new_protected:Npn \litetable_msg_new:nn #1#2
-{ \msg_new:nnn { litetable} { #1 } { #2 } }
+ { \msg_new:nnn { litetable } {#1} {#2} }
\cs_new_protected:Npn \litetable_msg_warning:n #1
-{ \msg_warning:nn { litetable } { #1 } }
+ { \msg_warning:nn { litetable } {#1} }
\litetable_msg_new:nn { timelist }
-{ \exp_not:N \timelist~extra~time~group(s)~were~ignored }
+ { \exp_not:N \timelist~extra~time~group(s)~were~ignored }
\cs_new_protected_nopar:Npn \litetable_timelist:nn #1#2
-{
- \clist_set:Nn \l__litetable_timelist_clist { #2 }
- \tl_if_empty:nTF { #1 }
- {
- \int_set:Nn \l__time_num_int
- {
- \clist_count:N \l__litetable_timelist_clist
- }
- }
{
- \int_set:Nn \l__time_num_int { #1 }
- \int_compare:nNnTF { #1 } <
- { \clist_count:N \l__litetable_timelist_clist }
- {
- \int_set:Nn \l__time_num_int
+ \clist_set:Nn \l__litetable_timelist_clist {#2}
+ \tl_if_empty:nTF {#1}
{
- \clist_count:N \l__litetable_timelist_clist
+ \int_set:Nn \l__time_num_int
+ { \clist_count:N \l__litetable_timelist_clist }
}
- \litetable_msg_warning:n { timelist }
- } { \int_set:Nn \l__time_num_int { #1 } }
- }
- \dim_set:Nn \l__time_vunit_dim
- {
- \fp_eval:n {1/(2\l__time_num_int+3.5)}\paperheight
+ {
+ \int_set:Nn \l__time_num_int {#1}
+ \int_compare:nNnTF {#1} <
+ { \clist_count:N \l__litetable_timelist_clist }
+ {
+ \int_set:Nn \l__time_num_int
+ { \clist_count:N \l__litetable_timelist_clist }
+ \litetable_msg_warning:n { timelist }
+ }
+ { \int_set:Nn \l__time_num_int {#1} }
+ }
+ \dim_set:Nn \l__time_vunit_dim
+ { \fp_eval:n { 1/( 2\l__time_num_int + 3.5 ) } \paperheight }
}
-}
\NewDocumentCommand \timelist { O{} m O{} }
-{ \litetable_timelist:nn { #1#3 } { #2 } }
+ { \litetable_timelist:nn { #1 #3 } {#2} }
\clist_new:N \l__week_ratio_clist
\clist_new:N \l__week_accum_clist
\int_new:N \l__week_num_int
\dim_new:N \l__week_hunit_dim
\cs_new_protected_nopar:Npn \litetable_weeklist:nn #1#2
-{
- \tl_set:Nn \l__default_weeks_tl { #1 }
- \clist_set:Nn \l__litetable_weeklist_clist { #2 }
- \int_step_inline:nn
- {
- \clist_count:N \l__litetable_weeklist_clist
- }
- {
- \__litetable_get_right:eN
- {
- \clist_item:Nn \l__litetable_weeklist_clist {##1}
- } \l__litetable_tmpb_tl
- \clist_put_right:Ne \l__week_ratio_clist
- {
- \l__litetable_tmpb_tl
- }
- }
- \int_step_inline:nn
{
- \clist_count:N \l__litetable_weeklist_clist
- }
- {
- \clist_clear:N \l__week_accumtmp_clist
- \int_step_inline:nn { ##1 }
- {
- \clist_put_right:Ne \l__week_accumtmp_clist
+ \tl_set:Nn \l__default_weeks_tl {#1}
+ \clist_set:Nn \l__litetable_weeklist_clist {#2}
+ \int_step_inline:nn
+ { \clist_count:N \l__litetable_weeklist_clist }
{
- \clist_item:Nn \l__week_ratio_clist { ####1 }
+ \__litetable_get_right:eN
+ {
+ \clist_item:Nn \l__litetable_weeklist_clist {##1}
+ } \l__litetable_tmpb_tl
+ \clist_put_right:Ne \l__week_ratio_clist
+ { \l__litetable_tmpb_tl }
}
- }
- \clist_put_right:Ne \l__week_accum_clist
- {
- \int_eval:n { \clist_use:Nn \l__week_accumtmp_clist { + } }
- }
- }
- \int_set:Nn \l__week_num_int
- {
- \clist_item:Nn \l__week_accum_clist
- {
- \clist_count:N \l__litetable_weeklist_clist
- }
- }
- \dim_set:Nn \l__week_hunit_dim
- {
- \fp_eval:n {1/\l__week_num_int*14/15}\paperwidth
+ \int_step_inline:nn
+ { \clist_count:N \l__litetable_weeklist_clist }
+ {
+ \clist_clear:N \l__week_accumtmp_clist
+ \int_step_inline:nn {##1}
+ {
+ \clist_put_right:Ne \l__week_accumtmp_clist
+ { \clist_item:Nn \l__week_ratio_clist {####1} }
+ }
+ \clist_put_right:Ne \l__week_accum_clist
+ { \int_eval:n { \clist_use:Nn \l__week_accumtmp_clist { + } } }
+ }
+ \int_set:Nn \l__week_num_int
+ {
+ \clist_item:Nn \l__week_accum_clist
+ { \clist_count:N \l__litetable_weeklist_clist }
+ }
+ \dim_set:Nn \l__week_hunit_dim
+ { \fp_eval:n { 1/\l__week_num_int * 14/15 } \paperwidth }
}
-}
\NewDocumentCommand \weeklist { O{} m O{} }
-{ \litetable_weeklist:nn { #1#3 } { #2 } }
+ { \litetable_weeklist:nn { #1 #3 } {#2} }
\NewDocumentCommand \more { m }
-{ \tl_set:Nn \l__litetable_comment_tl { #1 } }
+ { \tl_set:Nn \l__litetable_comment_tl {#1} }
\int_new:N \l__litetable_week_day_int
-\int_set:Nn \l__litetable_week_day_int {1}
-\NewDocumentCommand \newday { O {1} }
-{ \int_add:Nn \l__litetable_week_day_int { #1 } }
+\int_set:Nn \l__litetable_week_day_int { 1 }
+\NewDocumentCommand \newday { O{1} }
+ { \int_add:Nn \l__litetable_week_day_int {#1} }
\keys_define:nn { litetable / frame }
-{
- sem.tl_set:N = \l__bg_sem_tl,
- color.tl_set:N = \l__bg_color_tl,
- color.initial:n = gray,
-}
-\cs_new_protected_nopar:Npn \litetable_maketable:nn #1
-{
- % Darker Block at top
- \fill [ \l__bg_color_tl!5 ] (current~page.north~west)
- rectangle + (\paperwidth,-1.5\l__time_vunit_dim)
- node [ midway, black, font = \huge\bfseries ] {#1};
- \tl_if_empty:NF { \l__bg_sem_tl }% Semester
- {
- \node [ shift = {(-.02\paperwidth,-.75\l__time_vunit_dim)},
- left, rectangle, fill = DarkBlue!10,
- text = DarkBlue!60, inner~sep = 2ex,
- rounded~corners = 8pt, font = \large
- ] at (current~page.north~east)
- {\ensuremath\rightleftharpoons\ \l__bg_sem_tl};
- }
- % Darker Blocks
- \int_step_inline:nnnn {0} {2} {\l__time_num_int}
- {
- \filldraw [ fill = \l__bg_color_tl!5, draw = gray,
- thick, densely~dashed, line~cap = round
- ]
- ([shift = {(-.4pt,\fp_eval:n {-2*##1-2.5}\l__time_vunit_dim)}]
- current~page.north~west) rectangle +
- ({\paperwidth+.8pt},-2\l__time_vunit_dim);
- }
- % Classes numbering
- \clist_if_empty:NTF {\l__litetable_timelist_clist}
{
- \int_step_inline:nn {\l__time_num_int}
- {
- \node [ shift = {(\paperwidth/30,{\fp_eval:n {
- -2*##1-1.5}\l__time_vunit_dim})
- }, darkgray!80, font = \large\ttfamily\bfseries
- ] at (current~page.north~west) {##1};
- }
+ sem.tl_set:N = \l__bg_sem_tl,
+ color.tl_set:N = \l__bg_color_tl,
+ color.initial:n = gray
}
+\cs_new_protected_nopar:Npn \litetable_maketable:nn #1
{
- \int_step_inline:nn {\l__time_num_int}
- {
- \node [ shift = {(\paperwidth/30,\fp_eval:n {
- -2*##1-1}\l__time_vunit_dim)
- }, darkgray!80, font = \large\ttfamily\bfseries
- ] at (current~page.north~west) {##1};
- }
- % Classes time
- \int_step_inline:nn
- {
- \clist_count:N \l__litetable_timelist_clist
- }
- {
- \__litetable_get_left:eN
+ \fill [ \l__bg_color_tl!5 ]
+ (current~page.north~west) rectangle +
+ (\paperwidth, -1.5\l__time_vunit_dim)
+ node [ midway, black, font = \huge\bfseries ] {#1};
+ \tl_if_empty:NF { \l__bg_sem_tl }
{
- \clist_item:Nn \l__litetable_timelist_clist {##1}
- } \l__litetable_tmpa_tl
- \__litetable_get_right:eN
+ \node [ shift = {(-.02\paperwidth, -.75\l__time_vunit_dim)},
+ left, rectangle, fill = DarkBlue!10, text = DarkBlue!60,
+ inner~sep = 2ex, rounded~corners = 8pt, font = \large
+ ] at (current~page.north~east)
+ { \ensuremath\rightleftharpoons\ \l__bg_sem_tl };
+ }
+ % Darker Blocks
+ \int_step_inline:nnnn { 0 } { 2 } { \l__time_num_int }
{
- \clist_item:Nn \l__litetable_timelist_clist {##1}
- } \l__litetable_tmpb_tl
- \node [ shift = {(\paperwidth/30,\fp_eval:n {
- -1.9-2*##1}\l__time_vunit_dim)
- }, gray, font = \ttfamily ,align = center
- ] at (current~page.north~west)
- {\l__litetable_tmpa_tl\\\l__litetable_tmpb_tl};
- }
- }
- % Weekdays
- \int_step_inline:nn
- {
- \clist_count:N \l__litetable_weeklist_clist
- }
- {
- \__litetable_get_left:eN
- {
- \clist_item:Nn \l__litetable_weeklist_clist {##1}
- } \l__litetable_tmpa_tl
- \node [ font = \large\bfseries,
- shift = {(\fp_eval:n {
- (\clist_item:Nn \l__week_accum_clist {##1}
- -\clist_item:Nn \l__week_ratio_clist {##1}/2)/
- \l__week_num_int*14/15+1/15}\paperwidth,
- -2\l__time_vunit_dim)}
- ] at (current~page.north~west) { \l__litetable_tmpa_tl };
+ \filldraw
+ [ fill = \l__bg_color_tl!5, draw = gray,
+ thick, densely~dashed, line~cap = round
+ ]
+ ([shift = {(-.4pt, \fp_eval:n { - 2 * ##1 - 2.5 } \l__time_vunit_dim)}]
+ current~page.north~west
+ ) rectangle + ({\paperwidth + .8pt}, -2\l__time_vunit_dim);
+ }
+ % Classes numbering
+ \clist_if_empty:NTF { \l__litetable_timelist_clist }
+ {
+ \int_step_inline:nn { \l__time_num_int }
+ {
+ \node
+ [ shift =
+ {(
+ \paperwidth/30,
+ \fp_eval:n { - 2 * ##1 - 1.5 } \l__time_vunit_dim
+ )}, darkgray!80, font = \large\ttfamily\bfseries
+ ] at (current~page.north~west) {##1};
+ }
+ }
+ {
+ \int_step_inline:nn { \l__time_num_int }
+ {
+ \node
+ [ shift =
+ {(
+ \paperwidth/30,
+ \fp_eval:n { - 2 * ##1 - 1 } \l__time_vunit_dim
+ )}, darkgray!80, font = \large\ttfamily\bfseries
+ ] at (current~page.north~west) {##1};
+ }
+ % Classes time
+ \int_step_inline:nn
+ { \clist_count:N \l__litetable_timelist_clist }
+ {
+ \__litetable_get_left:eN
+ {
+ \clist_item:Nn \l__litetable_timelist_clist {##1}
+ } \l__litetable_tmpa_tl
+ \__litetable_get_right:eN
+ {
+ \clist_item:Nn \l__litetable_timelist_clist {##1}
+ } \l__litetable_tmpb_tl
+ \node
+ [ shift =
+ {(
+ \paperwidth/30,
+ \fp_eval:n { -1.9 - 2 * ##1 } \l__time_vunit_dim
+ )}, gray, font = \ttfamily, align = center
+ ] at (current~page.north~west)
+ { \l__litetable_tmpa_tl\\\l__litetable_tmpb_tl };
+ }
+ }
+ % Weekdays
+ \int_step_inline:nn
+ { \clist_count:N \l__litetable_weeklist_clist }
+ {
+ \__litetable_get_left:eN
+ {
+ \clist_item:Nn \l__litetable_weeklist_clist {##1}
+ } \l__litetable_tmpa_tl
+ \node
+ [ shift =
+ {(\fp_eval:n
+ {(
+ \clist_item:Nn \l__week_accum_clist {##1} -
+ \clist_item:Nn \l__week_ratio_clist {##1}/2
+ )/\l__week_num_int * 14/15 + 1/15
+ } \paperwidth, -2\l__time_vunit_dim
+ )},
+ font = \large\bfseries
+ ] at (current~page.north~west) { \l__litetable_tmpa_tl };
+ }
+ % Comment
+ \tl_if_empty:NF \l__litetable_comment_tl
+ {
+ \node [ yshift = .5\l__time_vunit_dim, left = 1ex,
+ darkgray, font = \small\bfseries
+ ] at (current~page.south~east)
+ { \l__litetable_comment_tl };
+ }
+ \tl_gclear:N \l__litetable_comment_tl
}
- % Comment
- \tl_if_empty:NF \l__litetable_comment_tl
+\NewDocumentCommand \maketable { O{} m O{} }
{
- \node [ yshift = .5\l__time_vunit_dim,
- left = 1ex, darkgray, font = \small\bfseries
- ] at (current~page.south~east)
- { \l__litetable_comment_tl };
+ \group_begin:
+ \keys_set:nn { litetable / frame } { #1 #3 }
+ \litetable_maketable:nn {#2}
+ \group_end:
}
- \tl_gclear:N \l__litetable_comment_tl
-}
-\NewDocumentCommand \maketable { O{} m O{} }
-{
- \group_begin:
- \keys_set:nn { litetable / frame } { #1#3 }
- \litetable_maketable:nn { #2 }
- \group_end:
-}
\keys_define:nn { litetable / course }
-{
- color.tl_set:N = \l__course_color_tl,
- color.initial:n = teal,
- subject.tl_set:N = \l__course_subject_tl,
- teacher.tl_set:N = \l__course_teacher_tl,
- location.tl_set:N = \l__course_location_tl,
- weeks.tl_set:N = \l__default_weeks_tl,
- weeks.initial:n = \l__default_weeks_tl,
-}
+ {
+ color.tl_set:N = \l__course_color_tl,
+ color.initial:n = teal,
+ subject.tl_set:N = \l__course_subject_tl,
+ teacher.tl_set:N = \l__course_teacher_tl,
+ location.tl_set:N = \l__course_location_tl,
+ weeks.tl_set:N = \l__default_weeks_tl,
+ weeks.initial:n = \l__default_weeks_tl,
+ }
\dim_new:N \l__course_infoshift_dim
\cs_new_protected_nopar:Npn \__litetable_course_box_aux:nn #1#2
-{
- % Course box fg
- \begin{scope}
- \clip [ preaction = {draw, ultra~thick, \l__course_color_tl!60},
- preaction = {fill, \l__course_color_tl!10},
- rounded~corners = 8pt ]
- ([shift = {(
- \fp_eval:n
- {
- \clist_item:Nn \l__week_accum_clist
- {\l__litetable_week_day_int}-
- \clist_item:Nn \l__week_ratio_clist
- {\l__litetable_week_day_int}
- }\l__week_hunit_dim+\paperwidth/15+1.2pt,
- \fp_eval:n {-.5-2*#1}\l__time_vunit_dim-1.2pt)
- }]current~page.north~west) rectangle + (
- \clist_item:Nn \l__week_ratio_clist {\l__litetable_week_day_int}
- \l__week_hunit_dim-2.4pt,
- \fp_eval:n {2*(#1-#2-1)}\l__time_vunit_dim+2.4pt);
- % Course box bg
- \fill [ \l__course_color_tl!60 ]
- ([shift = {(
- \fp_eval:n {
- \clist_item:Nn \l__week_accum_clist
- {\l__litetable_week_day_int}-
- \clist_item:Nn \l__week_ratio_clist
- {\l__litetable_week_day_int}
- }\l__week_hunit_dim+\paperwidth/15,
- \fp_eval:n {-.5-2*#1}\l__time_vunit_dim)
- }]current~page.north~west) rectangle + (
- \clist_item:Nn \l__week_ratio_clist{\l__litetable_week_day_int}
- \l__week_hunit_dim,-.5\l__time_vunit_dim);
- \end{scope}
- % Course info
- \tl_if_eq:NNTF {#1} {#2}% Single-unit height course box
{
- \bool_if:nTF
- {
- \tl_if_empty_p:N \l__course_location_tl &&
- \tl_if_empty_p:N \l__course_teacher_tl
- }
- {\tl_set:Nn \l_shortcourse_anchor_tl { }}
- {\tl_set:Nn \l_shortcourse_anchor_tl { above }}
- \cs_if_exist:NT {\l__course_subject_tl }
- {
- \node [ shift = {(\fp_eval:n {
- \clist_item:Nn \l__week_accum_clist
- {\l__litetable_week_day_int}-
+ % Course box fg
+ \begin{scope}
+ \clip [ preaction = { draw, ultra~thick, \l__course_color_tl!60 },
+ preaction = { fill, \l__course_color_tl!10 },
+ rounded~corners = 8pt
+ ] ([shift =
+ {(
+ \fp_eval:n
+ {
+ \clist_item:Nn \l__week_accum_clist
+ { \l__litetable_week_day_int } -
+ \clist_item:Nn \l__week_ratio_clist
+ { \l__litetable_week_day_int }
+ } \l__week_hunit_dim + \paperwidth/15 + 1.2pt,
+ \fp_eval:n { - .5 - 2 * #1 } \l__time_vunit_dim - 1.2pt
+ )}
+ ]current~page.north~west) rectangle +
+ (
\clist_item:Nn \l__week_ratio_clist
- {\l__litetable_week_day_int}/2
- }\l__week_hunit_dim+\paperwidth/15,
- \fp_eval:n {-1.75-#1-#2}\l__time_vunit_dim)},
- \l_shortcourse_anchor_tl, \l__course_color_tl!60,
- align = center, font = \large\bfseries
- ] at (current~page.north~west)
- { \l__course_subject_tl };
- }
- \bool_if:nTF
- {
- !\tl_if_empty_p:N \l__course_location_tl &&
- !\tl_if_empty_p:N \l__course_teacher_tl
- }
- {\tl_set:Nn \l_shortcourse_sep_tl { ,~ }}
- {\tl_set:Nn \l_shortcourse_sep_tl { }}
- \node [ shift = {(\fp_eval:n {
- \clist_item:Nn \l__week_accum_clist
- {\l__litetable_week_day_int}-
+ { \l__litetable_week_day_int } \l__week_hunit_dim - 2.4pt,
+ \fp_eval:n { 2 * ( #1 - #2 - 1 ) } \l__time_vunit_dim + 2.4pt
+ );
+ % Course box bg
+ \fill [ \l__course_color_tl!60 ]
+ ([shift =
+ {(
+ \fp_eval:n
+ {
+ \clist_item:Nn \l__week_accum_clist
+ { \l__litetable_week_day_int } -
+ \clist_item:Nn \l__week_ratio_clist
+ { \l__litetable_week_day_int }
+ } \l__week_hunit_dim + \paperwidth/15,
+ \fp_eval:n { - .5 - 2 * #1 } \l__time_vunit_dim
+ )}
+ ]current~page.north~west) rectangle +
+ (
\clist_item:Nn \l__week_ratio_clist
- {\l__litetable_week_day_int}/2
- }\l__week_hunit_dim+\paperwidth/15,
- \fp_eval:n {-1.75-#1-#2}\l__time_vunit_dim)},
- below, \l__course_color_tl!60, align = center
+ { \l__litetable_week_day_int } \l__week_hunit_dim,
+ - .5\l__time_vunit_dim
+ );
+ \end{scope}
+ % Course info
+ \tl_if_eq:NNTF {#1} {#2}% Single-unit height course box
+ {
+ \bool_if:nTF
+ {
+ \tl_if_empty_p:N \l__course_location_tl &&
+ \tl_if_empty_p:N \l__course_teacher_tl
+ }
+ { \tl_set:Nn \l_shortcourse_anchor_tl { } }
+ { \tl_set:Nn \l_shortcourse_anchor_tl { above } }
+ \cs_if_exist:NT { \l__course_subject_tl }
+ {
+ \node
+ [ shift =
+ {(
+ \fp_eval:n
+ {
+ \clist_item:Nn \l__week_accum_clist
+ { \l__litetable_week_day_int } -
+ \clist_item:Nn \l__week_ratio_clist
+ { \l__litetable_week_day_int }/2
+ } \l__week_hunit_dim + \paperwidth/15,
+ \fp_eval:n { -1.75 - #1 - #2 } \l__time_vunit_dim
+ )}, align = center, font = \large\bfseries,
+ \l_shortcourse_anchor_tl, \l__course_color_tl!60
+ ] at (current~page.north~west) { \l__course_subject_tl };
+ }
+ \bool_if:nTF
+ {
+ !\tl_if_empty_p:N \l__course_location_tl &&
+ !\tl_if_empty_p:N \l__course_teacher_tl
+ }
+ { \tl_set:Nn \l_shortcourse_sep_tl { ,~ } }
+ { \tl_set:Nn \l_shortcourse_sep_tl { } }
+ \node
+ [ shift =
+ {(
+ \fp_eval:n
+ {
+ \clist_item:Nn \l__week_accum_clist
+ { \l__litetable_week_day_int } -
+ \clist_item:Nn \l__week_ratio_clist
+ { \l__litetable_week_day_int }/2
+ } \l__week_hunit_dim + \paperwidth/15,
+ \fp_eval:n { - 1.75 - #1 - #2 } \l__time_vunit_dim
+ )}, below, \l__course_color_tl!60, align = center
] at (current~page.north~west)
- {
- \tl_if_exist:NT { \l__course_location_tl }
- { \l__course_location_tl }
- \l_shortcourse_sep_tl
- \tl_if_exist:NT { \l__course_teacher_tl }
- { \l__course_teacher_tl }
- };
- }
- {
- \bool_if:nTF% Multiply-unit height course box
- {
- \tl_if_empty_p:N \l__course_location_tl &&
- \tl_if_empty_p:N \l__course_teacher_tl
- }
- {
- \tl_set:Nn \l_course_anchor_tl {}
- \dim_set:Nn \l__course_infoshift_dim { 0pt }
- }
- {
- \tl_set:Nn \l_course_anchor_tl { above }
- \dim_set:Nn \l__course_infoshift_dim { \l__time_vunit_dim/8 }
- }
- \cs_if_exist:NT { \l__course_subject_tl }
- {
- \node [ font = \large\bfseries, \l_course_anchor_tl,
- shift = {(\fp_eval:n {
- \clist_item:Nn \l__week_accum_clist
- {\l__litetable_week_day_int}-
- \clist_item:Nn \l__week_ratio_clist
- {\l__litetable_week_day_int }/2
- }\l__week_hunit_dim+\paperwidth/15,
- \fp_eval:n {-1.5-#1-#2}\l__time_vunit_dim)},
- yshift = \l__course_infoshift_dim,
- \l__course_color_tl!60, align = center,
- ] at (current~page.north~west)
- { \l__course_subject_tl };
- }
- \bool_if:nTF
- {
- !\tl_if_empty_p:N \l__course_location_tl &&
- !\tl_if_empty_p:N \l__course_teacher_tl
- }
- {
- \tl_set:Nn \l_courseinfo_sep_tl { \\ }
- }
- {
- \tl_set:Nn \l_courseinfo_sep_tl { }
- }
- \node [ below, \l__course_color_tl!60, align = center,
- shift = {(\fp_eval:n {
- \clist_item:Nn \l__week_accum_clist
- {\l__litetable_week_day_int}-
- \clist_item:Nn \l__week_ratio_clist
- {\l__litetable_week_day_int}/2
- }\l__week_hunit_dim+\paperwidth/15,
- \fp_eval:n {-1.625-#1-#2}\l__time_vunit_dim
- )}] at (current~page.north~west)
- {
- \tl_if_exist:NT { \l__course_location_tl }
- { \l__course_location_tl }
- \l_courseinfo_sep_tl
- \tl_if_exist:NT { \l__course_teacher_tl }
- { \l__course_teacher_tl }
- };
- \node [ above~left, \l__course_color_tl!60, outer~sep = .5ex,
- shift = {(
- \clist_item:Nn \l__week_accum_clist
- {\l__litetable_week_day_int}
- \l__week_hunit_dim+\paperwidth/15,
- \fp_eval:n {-2.5-2*#2}\l__time_vunit_dim
- )}] at (current~page.north~west) { \l__default_weeks_tl };
+ {
+ \tl_if_exist:NT { \l__course_location_tl }
+ { \l__course_location_tl }
+ \l_shortcourse_sep_tl
+ \tl_if_exist:NT { \l__course_teacher_tl }
+ { \l__course_teacher_tl }
+ };
+ }
+ {
+ \bool_if:nTF% Multiply-unit height course box
+ {
+ \tl_if_empty_p:N \l__course_location_tl &&
+ \tl_if_empty_p:N \l__course_teacher_tl
+ }
+ {
+ \tl_set:Nn \l_course_anchor_tl { }
+ \dim_set:Nn \l__course_infoshift_dim { 0pt }
+ }
+ {
+ \tl_set:Nn \l_course_anchor_tl { above }
+ \dim_set:Nn \l__course_infoshift_dim { \l__time_vunit_dim/8 }
+ }
+ \cs_if_exist:NT { \l__course_subject_tl }
+ {
+ \node
+ [ shift =
+ {(
+ \fp_eval:n
+ {
+ \clist_item:Nn \l__week_accum_clist
+ { \l__litetable_week_day_int } -
+ \clist_item:Nn \l__week_ratio_clist
+ { \l__litetable_week_day_int }/2
+ } \l__week_hunit_dim + \paperwidth/15,
+ \fp_eval:n { - 1.5 - #1 - #2 } \l__time_vunit_dim+
+ \l__course_infoshift_dim
+ )}, font = \large\bfseries, \l_course_anchor_tl,
+ \l__course_color_tl!60, align = center
+ ] at (current~page.north~west) { \l__course_subject_tl };
+ }
+ \bool_if:nTF
+ {
+ !\tl_if_empty_p:N \l__course_location_tl &&
+ !\tl_if_empty_p:N \l__course_teacher_tl
+ }
+ { \tl_set:Nn \l_courseinfo_sep_tl { \\ } }
+ { \tl_set:Nn \l_courseinfo_sep_tl { } }
+ \node
+ [ shift =
+ {(
+ \fp_eval:n
+ {
+ \clist_item:Nn \l__week_accum_clist
+ { \l__litetable_week_day_int } -
+ \clist_item:Nn \l__week_ratio_clist
+ { \l__litetable_week_day_int }/2
+ } \l__week_hunit_dim + \paperwidth/15,
+ \fp_eval:n { - 1.625 - #1 - #2 } \l__time_vunit_dim
+ )}, below, \l__course_color_tl!60, align = center
+ ] at (current~page.north~west)
+ {
+ \tl_if_exist:NT { \l__course_location_tl }
+ { \l__course_location_tl }
+ \l_courseinfo_sep_tl
+ \tl_if_exist:NT { \l__course_teacher_tl }
+ { \l__course_teacher_tl }
+ };
+ \node
+ [ shift =
+ {(\clist_item:Nn \l__week_accum_clist
+ { \l__litetable_week_day_int }
+ \l__week_hunit_dim + \paperwidth/15,
+ \fp_eval:n { - 2.5 - 2 * #2 } \l__time_vunit_dim
+ )}, above~left, \l__course_color_tl!60, outer~sep = .5ex
+ ] at (current~page.north~west) { \l__default_weeks_tl };
+ }
}
-}
\litetable_msg_new:nn { course }
-{ \exp_not:N \course~box(s)~exceed~workdays~were~ignored }
+ { \exp_not:N \course~box(s)~exceed~workdays~were~ignored }
\NewDocumentCommand \course { O{} m O{} m O{} }
-{
- \group_begin:
- \int_compare:nNnTF {\l__litetable_week_day_int-1} <
- {\clist_count:N \l__litetable_weeklist_clist}
{
- \keys_set:nn { litetable / course } { #1#3#5 }
- \__litetable_course_box_aux:nn { #2 } { #4 }
- }{
- \litetable_msg_warning:n { course }
+ \group_begin:
+ \int_compare:nNnTF { \l__litetable_week_day_int - 1 } <
+ { \clist_count:N \l__litetable_weeklist_clist }
+ {
+ \keys_set:nn { litetable / course } { #1 #3 #5 }
+ \__litetable_course_box_aux:nn {#2} {#4}
+ }
+ { \litetable_msg_warning:n { course } }
+ \group_end:
}
- \group_end:
-}
\endinput
-% End of file litetable.cls \ No newline at end of file
+% End of file litetable.cls