As shown in fig, if I use the keyval, then my MWE does not work well.
What's wrong with my MWE?
\documentclass{article}
\usepackage{keyval}
\usepackage{expl3}
\usepackage{xparse}
\makeatletter
\def\BUPTthesiscntitlepage#1{\setkeys{cntitle}{#1}}
\define@key{cntitle}{title}{\long\def\BUPT@value@title{#1}}
\makeatother
\makeatletter\ExplSyntaxOn
\seq_new:N \l_@@_title_seq
\NewDocumentCommand \settitle {m}
{ \seq_set_split:Nnn \l_@@_title_seq { \\ } {#1} }
\dim_new:N \l_@@_title_width_dim
\NewDocumentCommand \printtitle {}
{
\group_begin:
\@@_title_name_format:
\tl_use:N \c_@@_title_name_tl
\group_end:
\group_begin:
\@@_title_format:
\@@_get_max_width:NN \l_@@_title_width_dim \l_@@_title_seq
\dim_add:Nn \l_@@_title_width_dim { 10\p@ }
\dim_log:N \l_@@_title_width_dim
\parbox [t] { \l_@@_title_width_dim }
{
\seq_map_inline:Nn \l_@@_title_seq
{ \@@_underline:Nn \l_@@_title_width_dim {##1} \\ }
}
\group_end:
}
\cs_new_protected:Npn \@@_get_max_width:NN #1#2
{
\group_begin:
\dim_zero:N #1
\bool_until_do:nn { \seq_if_empty_p:N #2 }
{
\seq_pop:NN #2 \l_tmpa_tl
\exp_args:NNV \@@_get_width:Nn \l_tmpa_dim \l_tmpa_tl
\dim_gset:Nn #1 { \dim_max:nn { \dim_use:N #1 } { \l_tmpa_dim } }
}
\group_end:
}
\cs_new_protected:Npn \@@_get_width:Nn #1#2
{
\hbox_set:Nn \l_tmpa_box {#2}
\dim_set:Nn #1 { \box_wd:N \l_tmpa_box }
}
\cs_new_protected:Npn \@@_underline:Nn #1#2
{ \underline { \hbox_to_wd:nn { \dim_use:N #1 } { \hss #2 \hss } } }
\tl_const:Nn \c_@@_title_name_tl { Title: }
\cs_new:Npn \@@_title_name_format: { \Large \bfseries }
\cs_new:Npn \@@_title_format: { \Large \bfseries }
\ExplSyntaxOff\makeatother
\BUPTthesiscntitlepage{%
title = {AAAA \\ BBB\LaTeX B}}
\begin{document}
\settitle{AAAA \\ BBB\LaTeX BB}
\printtitle
\makeatletter
\long\def\BUPTtitletemp{\BUPT@value@title}
\makeatother
\settitle{\BUPTtitletemp}
\printtitle
\end{document}
@@
is not to be used as a prefix. – egreg Jun 2 '19 at 9:34