Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- \documentclass{ctexart}
- \usepackage{tabularray}
- \ExplSyntaxOn
- \NewDocumentCommand \ljhNewTblrDashStyle { m m }
- {
- % 分割输入参数(如 "on 2pt off 1pt on 3pt off 2pt")
- \seq_set_split:Nnn \l_tmpa_seq { ~ } {#2}
- % 提取前 8 个参数(如果存在)
- \tl_set:Ne \l__tblr_a_tl { \seq_item:Nn \l_tmpa_seq {1} } % "on" 或 "off"
- \tl_set:Ne \l__tblr_b_tl { \seq_item:Nn \l_tmpa_seq {2} } % 第一段长度(如 "2pt")
- \tl_set:Ne \l__tblr_c_tl { \seq_item:Nn \l_tmpa_seq {3} } % "on" 或 "off"
- \tl_set:Ne \l__tblr_d_tl { \seq_item:Nn \l_tmpa_seq {4} } % 第二段长度(如 "1pt")
- \tl_set:Ne \l__tblr_e_tl { \seq_item:Nn \l_tmpa_seq {5} } % "on" 或 "off"
- \tl_set:Ne \l__tblr_f_tl { \seq_item:Nn \l_tmpa_seq {6} } % 第三段长度(如 "3pt")
- \tl_set:Ne \l__tblr_g_tl { \seq_item:Nn \l_tmpa_seq {7} } % "on" 或 "off"
- \tl_set:Ne \l__tblr_h_tl { \seq_item:Nn \l_tmpa_seq {8} } % 第四段长度(如 "2pt")
- % 检查是否满足 "on X off Y on Z off W" 格式
- \tl_if_eq:NnT \l__tblr_a_tl { on }
- {
- \tl_if_eq:NnT \l__tblr_c_tl { off }
- {
- \tl_if_eq:NnT \l__tblr_e_tl { on }
- {
- \tl_if_eq:NnT \l__tblr_g_tl { off }
- {
- % 调用 \__tblr_dash_style_make_boxes:nnnnn
- \__tblr_dash_style_make_boxes:neeee {#1}
- { \dim_eval:n {\l__tblr_b_tl} } % 第一段虚线长度
- { \dim_eval:n {\l__tblr_d_tl} } % 第一段间隔长度
- { \dim_eval:n {\l__tblr_f_tl} } % 第二段虚线长度
- { \dim_eval:n {\l__tblr_h_tl} } % 第二段间隔长度
- }
- }
- }
- }
- }
- \cs_new_protected:Npn \__tblr_dash_style_make_boxes:nnnnn #1 #2 #3 #4 #5
- {
- \dim_set:Nn \l_tmpa_dim { #2 + #3 + #4 + #5 }
- % --- 水平虚线样式 ---
- \tl_set:Nn \l__tblr_h_tl { \hbox_to_wd:nn }
- \tl_put_right:Ne \l__tblr_h_tl { { \dim_use:N \l_tmpa_dim } }
- \tl_put_right:Nn \l__tblr_h_tl
- {
- {
- \hss
- \vbox:n
- {
- % 第一段虚线
- \hbox_to_wd:nn {#2} {} \hrule height \lTblrDefaultHruleWidthDim
- }
- \hss
- \vbox:n
- {
- % 第一段空白
- \hbox_to_wd:nn {#3} {}
- }
- \hss
- \vbox:n
- {
- % 第二段虚线
- \hbox_to_wd:nn {#4} {} \hrule height \lTblrDefaultHruleWidthDim
- }
- \hss
- \vbox:n
- {
- % 第二段空白
- \hbox_to_wd:nn {#5} {}
- }
- \hss
- }
- }
- \prop_gput:NnV \g__tblr_defined_hdash_styles_prop {#1} \l__tblr_h_tl
- % --- 垂直虚线样式 ---
- \tl_set:Nn \l__tblr_v_tl { \vbox_to_ht:nn }
- \tl_put_right:Ne \l__tblr_v_tl { { \dim_use:N \l_tmpa_dim } }
- \tl_put_right:Nn \l__tblr_v_tl
- {
- {
- \vss
- \hbox:n
- {
- % 第一段虚线
- \vbox_to_ht:nn {#2} {} \vrule width \lTblrDefaultVruleWidthDim
- }
- \vss
- \hbox:n
- {
- % 第一段间隔
- \vbox_to_ht:nn {#3} {}
- }
- \vss
- \hbox:n
- {
- % 第二段虚线
- \vbox_to_ht:nn {#4} {} \vrule width \lTblrDefaultVruleWidthDim
- }
- \vss%%这里叠盒子有点问题...知识盲区了...
- \hbox:n
- {
- % 第二段间隔
- \vbox_to_ht:nn {#5} {}
- }
- \vss
- }
- }
- \prop_gput:NnV \g__tblr_defined_vdash_styles_prop {#1} \l__tblr_v_tl
- }
- \cs_generate_variant:Nn \__tblr_dash_style_make_boxes:nnnnn { neeee }
- \ljhNewTblrDashStyle{dotdash}{on ~ .5pt ~ off ~ 1pt ~ on ~ 2pt ~ off ~ 1pt}
- \ExplSyntaxOff
- \begin{document}
- \begin{table}[ht]
- \centering
- \caption{\textbf{????}}
- \begin{tblr}{colspec = {c|c|[dotdash]c|c}}
- \hline
- \textbf{???} & \SetCell[c=2]{c}\textbf{???} && \textbf{??}\\
- \hline
- ?? & ?? & ?? & ??\\
- \hline
- \SetCell[r=3]{c}?? & ?? & ?? & \SetCell[r=3]{c}?? \\
- \hline
- & ?? & ?? & \\
- \hline
- & ?? & ?? & \\
- \hline
- \end{tblr}
- \end{table}
- \end{document}
Advertisement
Add Comment
Please, Sign In to add comment