各位大佬,我现有如下代码
\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}
我的问题是,虚线的末尾是空白的!虚线的每一小段长度不同的时候,末尾的空白也不同,如何能够让行尾也出现小线段,不让它空白,每一个小线段的间隔可以不同,小线段的长度也可以不同,但行首行尾一定要有小线段。请教各位大佬,如何修改代码?
你可以定义一个近似 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
。
\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}
感谢大佬!