\usepackage{tasks}
\usepackage[framemethod=TikZ]{mdframed}
% \usepackage[tikz]{bclogo}
\usepackage{fontawesome5}
\usepackage{underscore}
\usepackage{booktabs}
\usepackage[l3]{csvsimple}

\usepackage{amssymb, amsfonts, amstext, amsmath, amsopn, amsthm}
\usepackage{booktabs}
\usepackage{hyperref}
\usepackage{fancyhdr}
\usepackage{enumitem}
\usepackage{totpages}
\usepackage{mylatex}
\usepackage{subfiles}

\title{《数据库系统原理与实践》作业}
\author{岳锦鹏}
\newcommand{\mysignature}{10213903403 岳锦鹏}
\date{2024年9月11日}
\setlist[1]{listparindent=\parindent}
\setlist[2]{label=\textbf{\alph{enumii}.},listparindent=\parindent}
\setlist[3]{label=\textbf{\alph{enumii}.},listparindent=\parindent}
\definecolor{shadecolor}{RGB}{204,232,207}
\definecolor{verificationColor}{RGB}{85,206,255} % 这颜色误差确实有点大啊，目前手动调的
\setitemize[1]{label=\textbullet}
\settasks{label=\Alph*.}
\newmdenv[%
    frametitle={%
    \tikz[]
    \node[anchor=east,rectangle,fill=verificationColor]
    { \faIcon{search}\  验证一下};}, %
    % frametitlerule=true, %
    % frametitlebelowskip=10pt, %
    roundcorner=5pt, %
    innertopmargin=10pt,linecolor=verificationColor,%
    linewidth=2pt,topline=true, %
    frametitleaboveskip=\dimexpr-\ht\strutbox\relax,
]{verification}

\setminted{breaklines=true}

% 将minted的外框修复为framed，修复换行的问题
\setlength{\FrameRule}{0pt}


\ExplSyntaxOn
% \debug_on:n {all}
\newcommand{\choice}[3][4]{
    \seq_clear:N \l_tmpa_seq
    \tl_clear:N \l_tmpa_tl
    % 这种情况还是re.split好用，search和findall都不好用
    \regex_split:nnNT {[\c{par}\ ]+[A-Z]\ } {#2} \l_tmpa_seq {
        \seq_pop_left:NN \l_tmpa_seq \l_tmpa_tl
        \tl_put_right:Nn \l_tmpa_tl {\begin{tasks}[](#1)}
            \seq_map_indexed_inline:Nn \l_tmpa_seq {
                \tl_if_eq:nnTF {##1}{#3} {
                    \tl_set:Nn \l_tmpb_tl {##2}
                    % \tl_show:N \l_tmpb_tl
                    \regex_replace_once:nnNTF {\c{mint}} {\c{mint}[frame=single]}\l_tmpb_tl {
                        \tl_put_right:Nn \l_tmpa_tl {\task}
                        \tl_put_right:No \l_tmpa_tl {\l_tmpb_tl}
                    }{
                        \tl_put_right:Nn \l_tmpa_tl {\task \fbox {##2}}
                    }
                } {
                    \tl_put_right:Nn \l_tmpa_tl {\task ##2}
                }
            }
            \tl_put_right:Nn \l_tmpa_tl {\end{tasks}}
        % 唉弄半天还是这种好用，token list就直接手动插入，这就完全不用考虑在环境中的扩展了
        \l_tmpa_tl
    }
}

% https://zhuanlan.zhihu.com/p/557120394
\tl_const:Nn \c_csv_blank_line { \par }

\cs_set:Npn \__csv_read:nV #1#2 {

    \ior_open:Nn \g_tmpa_ior {#1}
    \int_gzero:N \g_tmpa_int
    \tl_clear:N \g_tmpa_tl
    \tl_clear:N \l_tmpa_tl
    

    \bool_until_do:nn {\ior_if_eof_p:N \g_tmpa_ior}{
        \ior_get:NN \g_tmpa_ior \l_csv_line_tl
        \int_gincr:N \g_tmpa_int    % 行计数
        \tl_clear:N \g_tmpb_tl

        \tl_if_eq:NNF \l_csv_line_tl \c_csv_blank_line % 判断空行
        {
            \seq_set_split:NnV \l_tmpa_seq {,} \l_csv_line_tl
            \int_gzero:N \g_tmpb_int
            \tl_gset:Nn \rownum {\int_use:N \g_tmpa_int} %行号接口
            \seq_map_inline:Nn \l_tmpa_seq {
                \int_gincr:N \g_tmpb_int    % 列计数
                % 提供列接口
                % \tl_gset:cn {col \int_to_roman:n \g_tmpb_int}{##1}
                \int_compare:nNnTF \g_tmpb_int = 1 { % 判断首列
                    \tl_put_right:Nn \g_tmpb_tl {##1}
                }{
                    \tl_put_right:Nn \g_tmpb_tl {& ##1}
                }
            }
            \tl_put_right:Nn \g_tmpb_tl {\\} % 一行结束
            \int_compare:nNnT \g_tmpa_int = 1 { % 判断首行
                \tl_set:Nx \l_tmpa_tl {\prg_replicate:nn \g_tmpb_int c}
                \tl_show:N \l_tmpa_tl
                \tl_put_right:Nn \g_tmpa_tl {\begin{tabular}}
                \tl_put_right:Nx \g_tmpa_tl {{\tl_use:N \l_tmpa_tl}}
                \tl_put_right:Nn \g_tmpa_tl {\toprule}
            }
            \tl_show:N \g_tmpa_tl
            \tl_put_right:Nx \g_tmpa_tl {\tl_use:N \g_tmpb_tl}
            \int_compare:nNnT \g_tmpa_int = 1 {
                \tl_put_right:Nn \g_tmpa_tl {\midrule}
            }
        }
    }

    \tl_put_right:Nn \g_tmpa_tl {\bottomrule \end{tabular}}
    \tl_use:N \g_tmpa_tl

    \ior_close:N \g_tmpa_ior
}

\newcommand{\readcsv}[2]{        % L2命令
    \__csv_read:nV {#1}{#2}
}

% 用 \csvautotabular[#1]{rawfile.csv} 不行
% 用 \csvstyle{every csv}{#1} 也不行
% 在 csv环境外用\csvstyle{every csv}{separator=tab}就可以
\newenvironment{csv}{
    \VerbatimEnvironment
    \begin{VerbatimOut}[codes={\catcode`\^^I=12},firstline,lastline]{rawfile.csv}%
}{
    \end{VerbatimOut}%
    % \readcsv {rawfile.csv}{}
    \csvautotabular{rawfile.csv}
}

\ExplSyntaxOff