diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/litetable/litetable.cls')
-rw-r--r-- | Master/texmf-dist/tex/latex/litetable/litetable.cls | 196 |
1 files changed, 91 insertions, 105 deletions
diff --git a/Master/texmf-dist/tex/latex/litetable/litetable.cls b/Master/texmf-dist/tex/latex/litetable/litetable.cls index 10d6882ff49..f965a8a69c8 100644 --- a/Master/texmf-dist/tex/latex/litetable/litetable.cls +++ b/Master/texmf-dist/tex/latex/litetable/litetable.cls @@ -14,17 +14,13 @@ \NeedsTeXFormat{LaTeX2e} \PassOptionsToPackage{quiet}{xeCJK} \PassOptionsToPackage{no-math}{fontspec} -\ProvidesClass{litetable}[2024/02/24/ v2.4a LiteTable document class] +\ProvidesClass{litetable}[2024/02/24/ v2.4b LiteTable document class] % ---------- 全局选项 ---------- % \RequirePackage{kvoptions} \RequirePackage{etoolbox} \SetupKeyvalOptions{family=LITE, prefix=LITE@, setkeys=\kvsetkeys} -\DeclareStringOption[sharp]{style} -\DeclareVoidOption{round}{\kvsetkeys{LITE}{style=round}} -\DeclareVoidOption{sharp}{\kvsetkeys{LITE}{style=sharp}} - \DeclareStringOption[portiait]{direction} \DeclareVoidOption{portiait}{\kvsetkeys{LITE}{direction=portiait}} \DeclareVoidOption{landscape}{\kvsetkeys{LITE}{direction=landscape}} @@ -73,9 +69,7 @@ \definecolor{darkergray}{HTML}{F1F3F5} % 深色块 \definecolor{lightergray}{HTML}{FCFDFE} % 浅色块 \definecolor{blackgray}{HTML}{1A1D21} % 序号颜色 - \pagecolor{lightergray} - \definecolor{H1}{HTML}{74A7A2} % 深绿 \definecolor{H1*}{HTML}{E9EEED} \definecolor{H1**}{HTML}{009787} @@ -103,7 +97,6 @@ \definecolor{H9}{HTML}{D09966} % 棕色 \definecolor{H9*}{HTML}{F2E0D0} \definecolor{H9**}{HTML}{C96F1C} - \definecolor{W1}{HTML}{CCAD52} \definecolor{W2}{HTML}{8FCC52} \definecolor{W3}{HTML}{52CC70} @@ -125,6 +118,7 @@ \def\pageheight{-11 in} } }{\relax} + \ifdefstring{\LITE@direction}{landscape}{ \def\pagewidth{11 in} \def\pageheight{-8.5 in} @@ -138,96 +132,84 @@ } }{\relax} -\ifdefstring{\LITE@style}{round}{\def\corners{rounded corners}}{\relax} -\ifdefstring{\LITE@style}{sharp}{\def\corners{}}{\relax} - \ExplSyntaxOn % 数组 -\cs_set:Npn \timelist #1 { - \gdef\@timelist{#1} - \seq_set_split:Nnn \l_node_row_seq {;} {#1} - \int_step_inline:nn{\seq_count:N \l_node_row_seq} - { - \seq_if_exist:cF {l_node_row_##1_seq} - { - \seq_new:c {l_node_row_##1_seq} - } - \exp_args:Ncx\seq_set_from_clist:Nn {l_node_row_##1_seq} {\seq_item:Nn \l_node_row_seq{##1}} - } -} +% 1. Set up arrays +\def\definearray#1#2 + { + \seq_clear_new:c { l__litetable_array_#1_seq } + \seq_set_split:cnn { l__litetable_array_#1_seq } { ; } { #2 } + } -\cs_set:Npn \PrintTime [#1][#2] { - \tl_if_empty:nTF { #1 } - { - \tl_if_empty:nTF { #2 } - { - \seq_use:Nn \l_node_row_seq {,} - } - { - \int_step_inline:nn{\seq_count:N \l_node_row_seq} - { - \seq_put_right:Nn \l_node_tmp_seq {\seq_item:cn {l_node_row_##1_seq}{#2}} - } - \seq_use:Nn \l_node_tmp_seq {,} - } - } - { - \tl_if_empty:nTF {#2} - { - \seq_use:cn {l_node_row_#1_seq}{,} - } - { - \seq_item:cn {l_node_row_#1_seq}{#2} - } - } -} +\cs_generate_variant:Nn \seq_set_split:Nnn { c } -\cs_set:Npn \weeklist #1 { - \gdef\@weeklist{#1} - \gdef\@weeknum{\clist_count:n {#1}} % 计数模块 - \seq_set_split:Nnn \r_node_row_seq {;} {#1} - \int_step_inline:nn{\seq_count:N \r_node_row_seq} - { - \exp_args:Ncx\seq_set_from_clist:Nn {r_node_row_##1_seq} {\seq_item:Nn \r_node_row_seq{##1}} - } -} +% 2. Define commands to work with arrays +\NewExpandableDocumentCommand{\arraycount}{ o m } + { + \IfNoValueTF { #1 } + { + \litetable_array_count_full:n { #2 } + } + { + \litetable_array_count_item:nn { #2 } { #1 } + } + } + +\cs_new:Nn \litetable_array_count_item:nn + { + \clist_count:e { \seq_item:cn { l__litetable_array_#1_seq } { #2 } } + } + +\NewExpandableDocumentCommand{\arrayitem}{ m m m } + { + \clist_item:en { \seq_item:cn { l__litetable_array_#1_seq } { #2 } } { #3 } + } -\cs_set:Npn \PrintWeek [#1] { - \tl_if_empty:nTF {#1} - { - \seq_use:cn {r_node_row_1_seq}{,} - } - { - \seq_item:cn {r_node_row_1_seq}{#1} - } -} \ExplSyntaxOff -\def\classnum#1{\gdef\@classnum{#1}} -\ifcsname @classnum\endcsname % 判断`\@classnum'由`\timelist'计数赋值还是`\classnum'直接赋值 - \relax - \else - \ifcsname @timelist\endcsname - \gdef\@classnum{\int_div_round:nn {\clist_count:n {\@timelist}}{2}} % 计数模块 +\NewDocumentCommand{\timelist}{ o m } +{ + \gdef\@timelist{#2} + \definearray{timelist}{#2} + \IfNoValueTF{#1}{ + \ifnum \arraycount[2]{timelist}<\arraycount[1]{timelist} + \def\@classnum{\arraycount[1]{timelist}} \else - \def\@classnum{12} + \def\@classnum{\arraycount[2]{timelist}} \fi + }{\def\@classnum{#1}} +} +\ifcsname @timelist\endcsname + \relax + \else + \def\@classnum{12} \fi +\def\weeklist#1{ + \gdef\@weeklist{#1} + \definearray{weeklist}{#1} +} +\gdef\@weeknum{\arraycount[1]{weeklist}} \RequirePackage{fontawesome5} \newcounter{number} \def\sticker#1{\gdef\@sticker{#1}} +\def\corner#1{\gdef\@corner{#1}} \def\makeframe#1{ + \ifcsname @corner\endcsname + \tikzset{corner/.style={rounded corners=\@corner}} + \else + \tikzset{corner/.style={}} + \fi \draw [darkergray] (0,0) rectangle (\pagewidth,\pageheight); - \fill [fill=darkergray,\corners] (0,0) rectangle (\pagewidth,{1.5*\pageheight/(2*\@classnum+3.5)});% 顶部深灰色块 + \fill [fill=darkergray,corner] (0,0) rectangle (\pagewidth,{1.5*\pageheight/(2*\@classnum+3.5)});% 顶部深灰色块 \node at (.5*\pagewidth,{.75*\pageheight/(2*\@classnum+3.5)}) {\huge\bfseries\sffamily #1}; % 标题 \ifodd\@classnum \foreach \a in {2,4,...,\@classnum,\@classnum+2} - \fill [fill=darkergray,yshift=(2*\a-1.5)*\pageheight/(2*\@classnum+3.5),\corners] (0,0) rectangle (\pagewidth,{2*\pageheight/(2*\@classnum+3.5)}); % 中间深灰色块(循环) + \fill [fill=darkergray,yshift=(2*\a-1.5)*\pageheight/(2*\@classnum+3.5),corner] (0,0) rectangle (\pagewidth,{2*\pageheight/(2*\@classnum+3.5)}); % 中间深灰色块(循环) \else \foreach \a in {2,4,...,\@classnum} - \fill [fill=darkergray,yshift=(2*\a-1.5)*\pageheight/(2*\@classnum+3.5),\corners] (0,0) rectangle (\pagewidth,{2*\pageheight/(2*\@classnum+3.5)}); % 中间深灰色块(循环) - \fill [fill=darkergray,yshift=(2.5+2*\@classnum)*\pageheight/(2*\@classnum+3.5),\corners] (0,0) rectangle (\pagewidth,{\pageheight/(2*\@classnum+3.5)}); % 底部深灰色块 + \fill [fill=darkergray,yshift=(2*\a-1.5)*\pageheight/(2*\@classnum+3.5),corner] (0,0) rectangle (\pagewidth,{2*\pageheight/(2*\@classnum+3.5)}); % 中间深灰色块(循环) + \fill [fill=darkergray,yshift=(2.5+2*\@classnum)*\pageheight/(2*\@classnum+3.5),corner] (0,0) rectangle (\pagewidth,{\pageheight/(2*\@classnum+3.5)}); % 底部深灰色块 \fi \foreach \a in {0,1,2,...,\@classnum} @@ -235,27 +217,29 @@ % 时间标注 \setcounter{number}{0} - \ifcsname @timelist\endcsname % 若 `\@timelist == empty', 跳过该函数 - \foreach \x in {1,2,...,\@classnum} + \ifcsempty{@timelist}{ + \foreach \a in {1,2,...,\@classnum} + { + \node [yshift=(1.5+2*\a)*\pageheight/(2*\@classnum+3.5)] at(\pagewidth/32,0) + {\bfseries\large\color{blackgray}\texttt{\refstepcounter{number}\thenumber}}; + } + }{ + \foreach \x in {1,2,...,\@classnum} { \node [yshift=(2*\x+.9)*\pageheight/(2*\@classnum+3.5)] at (\pagewidth/32,0) {\bfseries\color{blackgray}\texttt{\refstepcounter{number}\thenumber}}; \node[yshift=(2*\x+1.55)*\pageheight/(2*\@classnum+3.5)] at (\pagewidth/32,0) - {\color{darkgray}\texttt{\PrintTime[1][\x]}}; + {\color{darkgray}\texttt{\arrayitem{timelist}{1}{\x}}}; \node[yshift=(2*\x+2.1)*\pageheight/(2*\@classnum+3.5)] at (\pagewidth/32,0) - {\color{darkgray}\texttt{\PrintTime[2][\x]}}; + {\color{darkgray}\texttt{\arrayitem{timelist}{2}{\x}}}; } - \else - \foreach \a in {1,2,...,\@classnum} - { - \node [yshift=(1.5+2*\a)*\pageheight/(2*\@classnum+3.5)] at(\pagewidth/32,0) - {\bfseries\large\color{blackgray}\texttt{\refstepcounter{number}\thenumber}}; } - \fi + % 星期标注 \foreach \a in {1,2,...,\@weeknum} - \node [xshift=3*\a*\pagewidth/16] at ({\pagewidth/16-\a*(15*\pagewidth/16*(1/5-1/\@weeknum))-7.5*\pagewidth/(16*\@weeknum)},{2*\pageheight/(2*\@classnum+3.5)}) - {\PrintWeek[\a]}; + \node [xshift=\pagewidth/16] at ({.5*(\arrayitem{weeklist}{2}{\a}+\arrayitem{weeklist}{2}{\a+1})*15*\pagewidth/16},{2*\pageheight/(2*\@classnum+3.5)}) + {\arrayitem{weeklist}{1}{\a}}; + \ifcsname @sticker\endcsname \node [opacity=.3,above left,yshift=(1.5+2*\@classnum)*\pageheight/(2*\@classnum+3.5),inner sep=0pt,outer sep=auto,scale=15] at (\pagewidth,{\pageheight/(2*\@classnum+3.5)}) {\includegraphics[width=\dimeval{\pagewidth/16/\@weeknum}]{\@sticker}};\fi } @@ -273,39 +257,41 @@ \NewDocumentCommand{\course}{O{H1} m m m m m O{\@weeks}} { - \fill [#1,\corners, + \fill [#1,corner, yshift=(2*(#2-1))*\pageheight/(2*\@classnum+3.5), - xshift=3*\theweekday*\pagewidth/16] - ({\pagewidth/16-\theweekday*(15*\pagewidth/16*(1/5-1/\@weeknum))},{2.5*\pageheight/(2*\@classnum+3.5)}) rectangle ++ - ({15*\pagewidth/(16*\@weeknum)},{(2+2*(#3-#2))*\pageheight/(2*\@classnum+3.5)}); % frame + xshift=\pagewidth/16] + ({\arrayitem{weeklist}{2}{\theweekday+1}*15*\pagewidth/16},{2.5*\pageheight/(2*\@classnum+3.5)}) rectangle ++ + ({(\arrayitem{weeklist}{2}{\theweekday+2}-\arrayitem{weeklist}{2}{\theweekday+1})*15*\pagewidth/16},{(2+2*(#3-#2))*\pageheight/(2*\@classnum+3.5)}); % frame - \fill [#1*,\corners, + \fill [#1*, yshift=(2*(#2-1)+.5)*\pageheight/(2*\@classnum+3.5), - xshift=3*\theweekday*\pagewidth/16] - ({\pagewidth/16-\theweekday*(15*\pagewidth/16*(1/5-1/\@weeknum))},{2.5*\pageheight/(2*\@classnum+3.5)}) rectangle ++ - ({15*\pagewidth/(16*\@weeknum)},{(1.5+2*(#3-#2))*\pageheight/(2*\@classnum+3.5)}); % content + xshift=\pagewidth/16] + ({\arrayitem{weeklist}{2}{\theweekday+1}*15*\pagewidth/16},{2.5*\pageheight/(2*\@classnum+3.5)}) --++ + ({(\arrayitem{weeklist}{2}{\theweekday+2}-\arrayitem{weeklist}{2}{\theweekday+1})*15*\pagewidth/16},0) + { [corner] --++ (0,{(1.5+2*(#3-#2))*\pageheight/(2*\@classnum+3.5)}) --++ + ({(-\arrayitem{weeklist}{2}{\theweekday+2}+\arrayitem{weeklist}{2}{\theweekday+1})*15*\pagewidth/16},0)} -- cycle; % content \node [#1**,yshift=(#2+#3-1.25)*\pageheight/(2*\@classnum+3.5), - xshift=3*\theweekday*\pagewidth/16] at - ({\pagewidth/16-\theweekday*(15*\pagewidth/16*(1/5-1/\@weeknum))+7.5*\pagewidth/(16*\@weeknum)},{2.5*\pageheight/(2*\@classnum+3.5)}) + xshift=\pagewidth/16] at + ({.5*(\arrayitem{weeklist}{2}{\theweekday+1}+\arrayitem{weeklist}{2}{\theweekday+2})*15*\pagewidth/16},{2.5*\pageheight/(2*\@classnum+3.5)}) {\heiti\large\bfseries #4}; % course \node [#1**,above, yshift=(#2+#3-.2)*\pageheight/(2*\@classnum+3.5), - xshift=3*\theweekday*\pagewidth/16] at - ({\pagewidth/16-\theweekday*(15*\pagewidth/16*(1/5-1/\@weeknum))+7.5*\pagewidth/(16*\@weeknum)},{2.5*\pageheight/(2*\@classnum+3.5)}) + xshift=\pagewidth/16] at + ({.5*(\arrayitem{weeklist}{2}{\theweekday+1}+\arrayitem{weeklist}{2}{\theweekday+2})*15*\pagewidth/16},{2.5*\pageheight/(2*\@classnum+3.5)}) {\heiti\bfseries\small #5}; % location \node [#1**,below, yshift=(#2+#3-.2)*\pageheight/(2*\@classnum+3.5), - xshift=3*\theweekday*\pagewidth/16] at - ({\pagewidth/16-\theweekday*(15*\pagewidth/16*(1/5-1/\@weeknum))+7.5*\pagewidth/(16*\@weeknum)},{2.5*\pageheight/(2*\@classnum+3.5)}) + xshift=\pagewidth/16] at + ({.5*(\arrayitem{weeklist}{2}{\theweekday+1}+\arrayitem{weeklist}{2}{\theweekday+2})*15*\pagewidth/16},{2.5*\pageheight/(2*\@classnum+3.5)}) {\heiti\bfseries\small #6}; % teacher \node [#1**,above left, yshift=2*#3*\pageheight/(2*\@classnum+3.5), - xshift=3*\theweekday*\pagewidth/16] at - ({\pagewidth/16-\theweekday*(15*\pagewidth/16*(1/5-1/\@weeknum))+15*\pagewidth/(16*\@weeknum)},{2.5*\pageheight/(2*\@classnum+3.5)}) + xshift=\pagewidth/16] at + ({\arrayitem{weeklist}{2}{\theweekday+2}*15*\pagewidth/16},{2.5*\pageheight/(2*\@classnum+3.5)}) {\heiti\footnotesize #7}; % weeks } |