\usepackage[margin=1in]{geometry}
\usepackage{environ} % 加了这个再\def\myitem就不报错了
\usepackage{extarrows}
\usepackage{enumerate}
\usepackage{enumitem}
\usepackage{amssymb, amsfonts, amstext, amsmath, amsopn, amsthm}
\usepackage{extarrows}
\usepackage{booktabs}
\usepackage{tabularx}
\usepackage{array}
\usepackage{ragged2e}
\usepackage[outputdir=./latex-output]{minted}
\usepackage{color}
\usepackage{hyperref}
\usepackage{mylatex}
\usepackage{subfiles}

\setlist[1]{label=P\arabic{enumi}.,listparindent=\parindent}
\setlist[2]{label=\alph{enumii}.,listparindent=\parindent}
\definecolor{shadecolor}{RGB}{204,232,207}

% 有\EnumitemId了
% 百分号要记得在判断语句的外面也用上
\def\getenum{%
    \ifnum\EnumitemId=1%
        enumi%
    \else
        \ifnum\EnumitemId=2%
            enumii%
        \else
            \ifnum\EnumitemId=3%
                enumiii%
            \else%
                enumiv%
            \fi
        \fi
    \fi%
}
    % \ifx\theenumiv\empty
    %     \ifx\theenumiii{}
    %         \ifx\theenumii{}
    %             1
    %         \else
    %             2
    %         \fi
    %     \else
    %         3
    %     \fi
    % \else
    %     4
    % \fi

% 可选参数合并到主.sty文件中了
% \def\myitemArg#1#2{
%     \item \textbf{#1}
%     \begin{enumerate}
%         #2
%     \end{enumerate}
% }

% \def\myitemOptArg[#1]#2#3{
%     \setcounter{\getenum}{#1-1}
%     \item \textbf{#2}
%     \begin{enumerate}
%         #3
%     \end{enumerate}
% }

% \def\myitem{\futurelet\next\myitemAux}
% \def\myitemAux{\ifx\next[%
%   \expandafter\myitemOptArg
% \else
%   \expandafter\myitemArg
% \fi}

% \def\originitem{\csname\item \endcsname}

% \edef\item[#1]{
%     \csname a\expandafter \endcsname \item
%     % {\setcounter{\getenum}{#1-1}}
%     % {\item}
% }

% \edef\item{\item}

% \edef\item{\originitem}

\newcommand{\cnitem}[1][]{
    \IfBlankF{#1}{
        \setcounter{\getenum}{#1-1}
    }
    \item 
}


% 好像直接\AddEnumerateCounter就行

\newcommand{\questionandanswer}[3][]{%
    \begin{shaded}%
        \ifstrequal{#1}{-}{}{\cnitem[#1]} #2%
    \end{shaded}%
    \begin{zhongwen}%
        #3%
    \end{zhongwen}%
}

\ExplSyntaxOn
\cs_set:Nn \rawquestionandanswer:Nnnn {%
    \begin{shaded}%
        \ifstrequal{#2}{-}{}{\format_item:Nn #1{#2}} #3%
    \end{shaded}%
    \begin{zhongwen}%
        #4%
    \end{zhongwen}%
}
\cs_set:Nn \format_item:Nn {
    \IfBlankTF{#2}{
        \stepcounter{\getenum}
        \item[#1{\csname the\getenum\endcsname}]
        % 完美结合了LaTeX2e和LaTeX3！
    }{
        \item[#1{#2}]
    }
}
\cs_set:Nn \Rformat:n {R#1.}
\cs_set:Nn \Pformat:n {P#1.}
\newcommand{\Rquestionandanswer}[3][]{%
    \rawquestionandanswer:Nnnn \Rformat:n {#1}{#2}{#3}
}
\newcommand{\Pquestionandanswer}[3][]{%
    \rawquestionandanswer:Nnnn \Pformat:n {#1}{#2}{#3}
}
\ExplSyntaxOff
% 成功实现了，而且下划线也没问题！！！似乎是函数式程序设计，或者装饰器模式？


% 该命令用于控制 p{} 的情况
\newcolumntype{P}[1]{>{\RaggedRight\hspace{0pt}}p{#1}} % 使用过程中，将p{4cm}换成P{4cm}，小写改成大写即可！
% 该命令用于控制 X 的情况
\newcolumntype{Z}{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}X} % 使用过程中，将Z 换成 X，即可！
 
% 可利用 RaggedLeft Centering替换RaggedRight，实现靠右和居中 [代码对大小写敏感！！！！！！！！！！！！！！！！！！！！！！！！！！！！]

% 原文链接：https://blog.csdn.net/wanjiac/article/details/107494424
