关于dashrule宏包画虚线的一个问题

发布于 2022-04-15 19:11:24

各位大佬,我现有如下代码

\documentclass{article}
\usepackage{dashrule}
\setlength{\parindent}{0mm}
\begin{document}
\rule[0mm]{\linewidth}{1mm}
\hdashrule[0.5ex]{\linewidth}{0.5pt}{5mm}%

\hdashrule[0.5ex]{\linewidth}{0.5pt}{3mm}%

\hdashrule[0.5ex]{\linewidth}{0.5pt}{2mm}%

\hdashrule[0.5ex]{\linewidth}{0.5pt}{1mm}%
\end{document}

7f0b2d9f44228b7b3f0bcd1bb1ed781.jpg
我的问题是,虚线的末尾是空白的!虚线的每一小段长度不同的时候,末尾的空白也不同,如何能够让行尾也出现小线段,不让它空白,每一个小线段的间隔可以不同,小线段的长度也可以不同,但行首行尾一定要有小线段。请教各位大佬,如何修改代码?

查看更多

关注者
0
被浏览
422
雾月
雾月 2022-04-16

你可以定义一个近似 dash 命令,

\ExplSyntaxOn
\NewDocumentCommand \approxhdashrule { O{0pt} m m m }
  {
    \hbox_to_wd:nn {#2}
      {
        \int_set:Nn \l_tmpa_int 
          { 
            2 * \int_div_round:nn { \int_value:w \tex_dimexpr:D #2 } 
                                  { 2 * \int_value:w \tex_dimexpr:D #4 } + 1 
          }
        \dim_set:Nn \l_tmpa_dim { \dim_eval:n {#2} / \l_tmpa_int }
        \hdashrule [#1] {#2} {#3} { \l_tmpa_dim }
        \hbox_overlap_left:n { \rule [#1] { \l_tmpa_dim } {#3} }
      }
  }
\ExplSyntaxOff

在尾部附加了一个 \rule。不过只能使用单个长度,不能使用不等长的(比如 1mm 2mm 1mm)。
由于在盒子中,自带了一个组,所以无需显式使用 \begingroup ... \endgroup

image.png

\documentclass{article}
\usepackage{dashrule}
\setlength{\parindent}{0mm}
\begin{document}
\rule[0mm]{\linewidth}{1mm}
\hdashrule[0.5ex]{\linewidth}{0.5pt}{5mm}%

\hdashrule[0.5ex]{\linewidth}{0.5pt}{3mm}%

\hdashrule[0.5ex]{\linewidth}{0.5pt}{2mm}%

\hdashrule[0.5ex]{\linewidth}{0.5pt}{1mm}%

approximate:

\ExplSyntaxOn
\NewDocumentCommand \approxhdashrule { O{0pt} m m m }
  {
    \hbox_to_wd:nn {#2}
      {
        \int_set:Nn \l_tmpa_int 
          { 
            2 * \int_div_round:nn { \int_value:w \tex_dimexpr:D #2 } 
                                  { 2 * \int_value:w \tex_dimexpr:D #4 } + 1 
          }
        \dim_set:Nn \l_tmpa_dim { \dim_eval:n {#2} / \l_tmpa_int }
        \hdashrule [#1] {#2} {#3} { \l_tmpa_dim }
        \hbox_overlap_left:n { \rule [#1] { \l_tmpa_dim } {#3} }
      }
  }
\ExplSyntaxOff

\rule[0mm]{\linewidth}{1mm}

\approxhdashrule[0.5ex]{\linewidth}{0.5pt}{5mm}%

\approxhdashrule[0.5ex]{\linewidth}{0.5pt}{3mm}%

\approxhdashrule[0.5ex]{\linewidth}{0.5pt}{2mm}%

\approxhdashrule[0.5ex]{\linewidth}{0.5pt}{1mm}%

\end{document}
1 个回答

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览