出席名单

出席名单

在我的最后一个问题中,阅读学生班级名单,我问如何读取学生名单并创建班级名单。一切正常,因为@egreg 的回答很棒。我现在正在尝试创建一个学期出勤表,导入学生姓名,其中有一些keys可以是用户输入的,例如University NameCourse Name等。

我想要实现的另一个关键目标是,假设您有一门课程仅在周一和周三或周二和周四或周一、周三和周四(取决于您教授课程的日子)开设,我希望能够在列标题上打印日期和日期,例如从 2019 年 8 月 19 日至 2019 年 12 月 6 日的学期(如下所示)。当然,对于这个新学期来说,它将从 2020 年 1 月 6 日到 2020 年 5 月 8 日。

我一直以来的做法是查看日历,只对我教授课程的两三天进行排序,手动确定每一天的日期,然后将其输入文件并打印。请注意,表格无法容纳在一页中,因此需要重新开始/继续下一页,并保留前 3 列。

在此处输入图片描述


我注意到我的 MWE 中存在一些问题,下图中的单词没有通常应该有的空格。


更新~在单词之间添加空格可以解决此问题。


在此处输入图片描述

这是我的 MWE:

\documentclass[10pt]{article}
\usepackage[margin=1cm,landscape]{geometry} % make room
\usepackage{xparse,array,graphicx}

\newsavebox\TBox
\newif\ifrotate\rotatefalse
\newcolumntype{C}{%
  >{\begin{lrbox}{\TBox}\arraybackslash} 
  c 
  <{\end{lrbox}\ifrotate\rotatebox{90}{\usebox\TBox}\else\usebox\TBox\fi}}

\newcommand{\rotateon}{\global\rotatetrue}% rotate switch ON
\newcommand{\rotateoff}{\global\rotatefalse}% rotate switch OFF

\ExplSyntaxOn

\NewDocumentCommand{\studentlist}{m}
 {% #1 = file name
  \azetina_studentlist:n { #1 }
 }

\ior_new:N \g_azetina_studentlist_stream
\seq_new:N \l_azetina_studentlist_seq
\seq_new:N \l__azetina_studentlist_temp_seq
\tl_new:N \l__azetina_studentlist_header_tl

\cs_new_protected:Nn \azetina_studentlist:n
 {
  \seq_clear:N \l_azetina_studentlist_seq
  \ior_open:Nn \g_azetina_studentlist_stream { #1 }
  \int_zero:N \l_tmpa_int
  % populate the sequence
  \ior_map_inline:Nn \g_azetina_studentlist_stream
   {
    \int_incr:N \l_tmpa_int
    \seq_put_right:Nx \l_azetina_studentlist_seq
     {
      \int_to_arabic:n { \l_tmpa_int } & \exp_not:n { ##1 } & & & &
     }
   }
  % build the header
  \tl_set:Nn \l__azetina_studentlist_header_tl
   {
    \# & \textbf{Student~Name} & \textbf{Ab/T} & & &
   }
  % make the table
  \par\noindent
  \begin{tabular}{|r|l|c|*{3}{C|}}
  \cline{4-6}%
    \multicolumn{3}{l|}{%
        %\makecell[l]{%
        \parbox[b]{16em}{%
        University Name\\ %
        Course Name (Course Code)\\ %
        Lecturer Name\\ %
        \null\\
        \today\\
        \null%
        %}
        }%
    }&
    \rotateon %
        \parbox{10em}{Monday\par August 19, 2019}   &%
        \parbox{10em}{Wednesday\par August 21, 2019}&%
        \parbox{10em}{Monday\par August 26, 2019}\\ % These dates are manually entered. Can they be calculated and printed in columns?
    \hline%
    \rotateoff %
  \tl_use:N \l__azetina_studentlist_header_tl \\ \hline
  \seq_map_function:NN \l_azetina_studentlist_seq \__azetina_studentlist_row:n
  \end{tabular}
 }

\cs_new_protected:Nn \__azetina_studentlist_row:n
 {
  #1 \\ \hline
 }

\ExplSyntaxOff

\begin{document}

\studentlist{MATH1004CL}


\end{document}

因此,如何在教授课程时打印各列并使其可以传播到多页?

我正在寻找一些用户输入,例如:

\semester{8/19/2019}{12/06/2019}
\schoolweek{M}{W} % where M =  Monday and W = Wednesday are the days printed from the two dates set above in \semester

相关内容