参考关于多行文字分散对齐的CJKfilltwosides环境的提问中的回答,这个也可以用LaTeX3结合coffin利用拼接实现:
\documentclass{ctexart}
\usepackage{expl3}
\usepackage{xparse}
\ExplSyntaxOn
% 获取文本长度函数,#1用于保存长度,#2是被检测的文字
\cs_new:Npn \l_get_text_width:Nn #1#2
{
% 将文字内容存入变量
\hbox_set:Nn \l_tmpa_box {\l_font_tl #2}
% 用\box_wd:N函数获取盒子宽度,并存入长度变量
\dim_set:Nn #1 { \box_wd:N \l_tmpa_box }
}
% 文本长度函数变体
\cs_generate_variant:Nn \l_get_text_width:Nn { NV }
\dim_new:N \l_h_sep_dim
\dim_new:N \l_v_sep_dim
\dim_new:N \l_hang_wd_dim
\dim_new:N \l_text_wd_dim
\coffin_new:N \l_output_coffin
% \coffin_new:N \l_content_text_coffin
\tl_new:N \l_font_tl
\keys_define:nn { hangindent }
{
hsep .dim_set:N = \l_h_sep_dim,
hsep .initial:n = 0pt,
vsep .dim_set:N = \l_v_sep_dim,
vsep .initial:n = 0pt,
font .tl_set:N = \l_font_tl,
font .initial:n = \normalsize,
unknown .code:n = { \__hangindent_error:n { unknown-option } }
}
\msg_new:nnn { hangindent } { unknown-option }
{ package~ option~ "\l_keys_key_tl"~ is~ unknown. }
\NewDocumentCommand \hangset { m }
{ \keys_set:nn { hangindent } {#1} }
% 居中对齐盒子函数
\cs_new_protected:Npn \__hang_indent:nn #1#2
{
% 计算悬挂文字宽度
\l_get_text_width:Nn \l_hang_wd_dim { #1 }
% 计算文本剩余宽度
\dim_set:Nn \l_text_wd_dim { \textwidth - \l_hang_wd_dim - \parindent - \l_h_sep_dim }
% 设置悬挂容器
\hcoffin_set:Nn \l_output_coffin {\l_font_tl #1}
% 设置文本容器
\vcoffin_set:Nnn \l_tmpa_coffin {\l_text_wd_dim} {\noindent #2 }
% 将文本容器拼接到输出结果容器
\coffin_join:NnnNnnnn \l_output_coffin { r } { t }
\l_tmpa_coffin { l } { t } { \l_h_sep_dim } { \l_v_sep_dim }
% 输出结果容器
\coffin_typeset:Nnnnn \l_output_coffin { l } { t } { 0pt } { 0pt }
}
% 定义用户接口
\NewDocumentCommand{\hang}{O{} m m}
{
\group_begin:
\keys_set:nn { hangindent } {#1}
\__hang_indent:nn {#2}{#3}
\group_end:
}
\ExplSyntaxOff
\begin{document}
第一段文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字
文字文字文字
% 默认参数
\hang{第二段}{文字字文字文字文字文字文字文字文字文字文字文字文字文字文字文
字文字文字文字文字文字字文字文字文字文字文字文字文字文字文字
文字文字文字文字文字文字文字文字文字文字}
\bigskip
% 可以用hsep指定悬挂文字与内容间的的水平距离
% 可以用vsep指定悬挂文字与内容间的的垂直偏移距离
\hang[hsep=5pt, vsep=15pt]{第二段}{文字字文字文字文字文字文字文字文字文字文
字文字文字文字文字文字文字文字文字文字文字字文字文字文字文字文
字文字文字文字文字文字文字文字文字文字文字文字文字文字文字}
\bigskip
% 也可以用font设置悬挂文字的字体参数
\hang[font=\Large\heiti\bfseries]{第二段}{文字字文字文字文字文字文字文字文字
文字文字文字文字文字文字文字文字文字文字文字文字字文字文字文字文
字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字}
\bigskip
\begin{minipage}{0.5\textwidth}
% 也可以用font设置悬挂文字的字体参数
\hang[font=\Large\heiti\bfseries]{第二段}{文字字文字文字文字文字文字文字文字
文字文字文字文字文字文字文字文字文字文字文字文字字文字文字文字文
字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字}
\end{minipage}
\end{document}
问 如何更好地实现悬挂缩进