Guest User

Untitled

a guest
May 19th, 2025
38
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.85 KB | None | 0 0
  1. \documentclass{ctexart}
  2. \usepackage{tabularray}
  3.  
  4. \ExplSyntaxOn
  5.  
  6. \NewDocumentCommand \ljhNewTblrDashStyle { m m }
  7. {
  8. % 分割输入参数(如 "on 2pt off 1pt on 3pt off 2pt")
  9. \seq_set_split:Nnn \l_tmpa_seq { ~ } {#2}
  10.  
  11. % 提取前 8 个参数(如果存在)
  12. \tl_set:Ne \l__tblr_a_tl { \seq_item:Nn \l_tmpa_seq {1} } % "on" 或 "off"
  13. \tl_set:Ne \l__tblr_b_tl { \seq_item:Nn \l_tmpa_seq {2} } % 第一段长度(如 "2pt")
  14. \tl_set:Ne \l__tblr_c_tl { \seq_item:Nn \l_tmpa_seq {3} } % "on" 或 "off"
  15. \tl_set:Ne \l__tblr_d_tl { \seq_item:Nn \l_tmpa_seq {4} } % 第二段长度(如 "1pt")
  16. \tl_set:Ne \l__tblr_e_tl { \seq_item:Nn \l_tmpa_seq {5} } % "on" 或 "off"
  17. \tl_set:Ne \l__tblr_f_tl { \seq_item:Nn \l_tmpa_seq {6} } % 第三段长度(如 "3pt")
  18. \tl_set:Ne \l__tblr_g_tl { \seq_item:Nn \l_tmpa_seq {7} } % "on" 或 "off"
  19. \tl_set:Ne \l__tblr_h_tl { \seq_item:Nn \l_tmpa_seq {8} } % 第四段长度(如 "2pt")
  20.  
  21. % 检查是否满足 "on X off Y on Z off W" 格式
  22. \tl_if_eq:NnT \l__tblr_a_tl { on }
  23. {
  24. \tl_if_eq:NnT \l__tblr_c_tl { off }
  25. {
  26. \tl_if_eq:NnT \l__tblr_e_tl { on }
  27. {
  28. \tl_if_eq:NnT \l__tblr_g_tl { off }
  29. {
  30. % 调用 \__tblr_dash_style_make_boxes:nnnnn
  31. \__tblr_dash_style_make_boxes:neeee {#1}
  32. { \dim_eval:n {\l__tblr_b_tl} } % 第一段虚线长度
  33. { \dim_eval:n {\l__tblr_d_tl} } % 第一段间隔长度
  34. { \dim_eval:n {\l__tblr_f_tl} } % 第二段虚线长度
  35. { \dim_eval:n {\l__tblr_h_tl} } % 第二段间隔长度
  36. }
  37. }
  38. }
  39. }
  40. }
  41.  
  42. \cs_new_protected:Npn \__tblr_dash_style_make_boxes:nnnnn #1 #2 #3 #4 #5
  43. {
  44. \dim_set:Nn \l_tmpa_dim { #2 + #3 + #4 + #5 }
  45.  
  46. % --- 水平虚线样式 ---
  47. \tl_set:Nn \l__tblr_h_tl { \hbox_to_wd:nn }
  48. \tl_put_right:Ne \l__tblr_h_tl { { \dim_use:N \l_tmpa_dim } }
  49. \tl_put_right:Nn \l__tblr_h_tl
  50. {
  51. {
  52. \hss
  53. \vbox:n
  54. {
  55. % 第一段虚线
  56. \hbox_to_wd:nn {#2} {} \hrule height \lTblrDefaultHruleWidthDim
  57. }
  58. \hss
  59. \vbox:n
  60. {
  61. % 第一段空白
  62. \hbox_to_wd:nn {#3} {}
  63. }
  64. \hss
  65. \vbox:n
  66. {
  67. % 第二段虚线
  68. \hbox_to_wd:nn {#4} {} \hrule height \lTblrDefaultHruleWidthDim
  69. }
  70. \hss
  71. \vbox:n
  72. {
  73. % 第二段空白
  74. \hbox_to_wd:nn {#5} {}
  75. }
  76. \hss
  77. }
  78. }
  79. \prop_gput:NnV \g__tblr_defined_hdash_styles_prop {#1} \l__tblr_h_tl
  80.  
  81. % --- 垂直虚线样式 ---
  82. \tl_set:Nn \l__tblr_v_tl { \vbox_to_ht:nn }
  83. \tl_put_right:Ne \l__tblr_v_tl { { \dim_use:N \l_tmpa_dim } }
  84. \tl_put_right:Nn \l__tblr_v_tl
  85. {
  86. {
  87. \vss
  88. \hbox:n
  89. {
  90. % 第一段虚线
  91. \vbox_to_ht:nn {#2} {} \vrule width \lTblrDefaultVruleWidthDim
  92. }
  93. \vss
  94. \hbox:n
  95. {
  96. % 第一段间隔
  97. \vbox_to_ht:nn {#3} {}
  98. }
  99. \vss
  100. \hbox:n
  101. {
  102. % 第二段虚线
  103. \vbox_to_ht:nn {#4} {} \vrule width \lTblrDefaultVruleWidthDim
  104. }
  105. \vss%%这里叠盒子有点问题...知识盲区了...
  106. \hbox:n
  107. {
  108. % 第二段间隔
  109. \vbox_to_ht:nn {#5} {}
  110. }
  111. \vss
  112. }
  113. }
  114. \prop_gput:NnV \g__tblr_defined_vdash_styles_prop {#1} \l__tblr_v_tl
  115. }
  116. \cs_generate_variant:Nn \__tblr_dash_style_make_boxes:nnnnn { neeee }
  117.  
  118. \ljhNewTblrDashStyle{dotdash}{on ~ .5pt ~ off ~ 1pt ~ on ~ 2pt ~ off ~ 1pt}
  119.  
  120. \ExplSyntaxOff
  121.  
  122.  
  123. \begin{document}
  124.  
  125. \begin{table}[ht]
  126. \centering
  127. \caption{\textbf{????}}
  128. \begin{tblr}{colspec = {c|c|[dotdash]c|c}}
  129. \hline
  130. \textbf{???} & \SetCell[c=2]{c}\textbf{???} && \textbf{??}\\
  131. \hline
  132. ?? & ?? & ?? & ??\\
  133. \hline
  134. \SetCell[r=3]{c}?? & ?? & ?? & \SetCell[r=3]{c}?? \\
  135. \hline
  136. & ?? & ?? & \\
  137. \hline
  138. & ?? & ?? & \\
  139. \hline
  140. \end{tblr}
  141. \end{table}
  142. \end{document}
Advertisement
Add Comment
Please, Sign In to add comment