我现有下列的代码,目前使用makebox实现了分散对齐,我的问题是能否再智能一点,让代码自动判断最长的文本,然后文本分散对齐?
\documentclass{ctexart}
\usepackage[usestackEOL]{stackengine}
\def\stacktype{L}
\strutlongstacks{T}
\begin{document}
{\Large
朋友!
\Centerstack{诸葛八卦村\\\makebox[5em][s]{地下长河}\\\makebox[5em][s]{芝堰水库}}
欢迎您去游览!
}
\end{document}
\ExplSyntaxOn
\cs_new_protected_nopar:Npn \autoCenterstack #1
{
\group_begin:
\dim_zero:N \l_tmpa_dim
\tl_clear:N \l_tmpa_tl
\seq_set_split:Nnn \l_tmpa_seq { \\ } { #1 }
\seq_pop_right:NN \l_tmpa_seq \l_tmpb_tl
\seq_map_inline:Nn \l_tmpa_seq
{
\hbox_set:Nn \l_tmpa_box {##1}
\dim_compare:nNnT { \box_wd:N \l_tmpa_box } > \l_tmpa_dim
{ \dim_set:Nn \l_tmpa_dim { \box_wd:N \l_tmpa_box } }
\tl_put_right:Nn \l_tmpa_tl { \makebox[\l_tmpa_dim][s]{##1} \\ }
}
\hbox_set:Nn \l_tmpa_box { \l_tmpb_tl }
\dim_compare:nNnT { \box_wd:N \l_tmpa_box } > \l_tmpa_dim
{ \dim_set:Nn \l_tmpa_dim { \box_wd:N \l_tmpa_box } }
\tl_put_right:Nx \l_tmpa_tl { \exp_not:N \makebox [\l_tmpa_dim] [s] { \exp_not:o \l_tmpb_tl } }
\exp_args:No \Centerstack { \l_tmpa_tl }
\group_end:
}
\ExplSyntaxOff
基本思路是按 \\
分割 tl,然后计算这些 tl 的构成的盒子的最大宽度,然后使用这个最大宽度。
如果要保留 \\
前后的空格,将 \seq_set_split:Nnn
换成 \seq_set_split_keep_spaces:Nnn
。
\documentclass{ctexart}
\usepackage[usestackEOL]{stackengine}
\def\stacktype{L}
\strutlongstacks{T}
\begin{document}
\ExplSyntaxOn
\cs_new_protected_nopar:Npn \autoCenterstack #1
{
\group_begin:
\dim_zero:N \l_tmpa_dim
\tl_clear:N \l_tmpa_tl
\seq_set_split:Nnn \l_tmpa_seq { \\ } { #1 }
\seq_pop_right:NN \l_tmpa_seq \l_tmpb_tl
\seq_map_inline:Nn \l_tmpa_seq
{
\hbox_set:Nn \l_tmpa_box {##1}
\dim_compare:nNnT { \box_wd:N \l_tmpa_box } > \l_tmpa_dim
{ \dim_set:Nn \l_tmpa_dim { \box_wd:N \l_tmpa_box } }
\tl_put_right:Nn \l_tmpa_tl { \makebox[\l_tmpa_dim][s]{##1} \\ }
}
\hbox_set:Nn \l_tmpa_box { \l_tmpb_tl }
\dim_compare:nNnT { \box_wd:N \l_tmpa_box } > \l_tmpa_dim
{ \dim_set:Nn \l_tmpa_dim { \box_wd:N \l_tmpa_box } }
\tl_put_right:Nx \l_tmpa_tl { \exp_not:N \makebox [\l_tmpa_dim] [s] { \exp_not:o \l_tmpb_tl } }
\exp_args:No \Centerstack { \l_tmpa_tl }
\group_end:
}
\ExplSyntaxOff
{\Large
朋友!%
\autoCenterstack{诸葛八卦村\\ 地下长河\\ 芝堰水库}%
欢迎您去游览!
}
{\Large
朋友!%
\Centerstack{诸葛八卦村\\\makebox[5em][s]{地下长河}\\\makebox[5em][s]{芝堰水库}}%
欢迎您去游览!
}
\end{document}
感谢大佬解答!