如何完整地填充虚线

2020-04-26 22:21发布

想让虚线的实线部分都接触到左右边界,比如说画pattern为实线4mm,间隙4mm的虚线,尝试了3种leaders,最接近的效果是xleaders,但是由于它是把多余的空隙均匀的分布在所有box的中间...

 想让虚线的实线部分都接触到左右边界,比如说画pattern为实线4mm,间隙4mm的虚线,尝试了3种leaders,最接近的效果是xleaders,但是由于它是把多余的空隙均匀的分布在所有box的中间所以会造成本来完整的实线部分会多出来间隙

\documentclass{article}
\def\test{%
  \hbox{\rule{2mm}{0.8pt} \hspace*{4mm} \rule{2mm}{0.8pt}}
}
\begin{document}
\setlength\parindent{0pt}
abc\hrulefill abc

abc\leaders\test\hfill abc

abc\cleaders\test\hfill abc

abc\xleaders\test\hfill abc
\end{document}

有没有更好的方法(还是通过leaders)

Screenshot from 2020-04-26 22-14-11.png

1条回答

hskip 的长度不是 hbox 长度的整倍数,所以总会有间距。


这个间距要么出现在首尾,要么出现在中间。既不出现在首尾又不出现在中间,你让不吃草的马儿怎么跑?


这种情况,就只能让你的马儿自己「用爱发电」了。


\documentclass{article}

\def\test{%

\hbox{\rule{2mm}{0.8pt} \hskip 4mm plus 1mm minus 0.7mm \rule{2mm}{0.8pt}}

}

\begin{document}

\setlength\parindent{0pt}

abc\hrulefill abc


abc\leaders\test\hfill abc


abc\cleaders\test\hfill abc


abc\xleaders\test\hfill abc

\end{document}

image.png

作者追问:2020-04-27 09:45

我很好奇你的plus 1mm minus 0.8mm是怎么得出来的,我之前简单的使用plus 1fill是没有什么效果的,你的这个数值在我改变字体大小或者页边距使得填充的宽度变化时就不奏效了,这个数值有什么计算方法吗

回答: 2020-04-27 09:45

hbox 是一个受限水平模式的 box,它内部不会断行的。这种情况,你让 fill 这种无限弹簧怎么弹?——它没有着力点啊。


没怎么算。就是拍脑袋随便给了一个弹性限度。

作者追问:2020-04-27 09:45

嗯嗯,明白了,那我换个思路,就是给这个box确定的宽度是可以做到这个效果的,我需要在表格中使用(我知道arydshln包)这个技巧,但是因为是在写表格转换脚本没有很好的方法直接设置每列的宽度,而且和tabularx不兼容,没办法使用X列格式,这种情况下,在原生的表格中,有没有方法获得当前单元格的宽度

回答: 2020-04-27 09:45

我没详细看啊,也很久不怎么研究 LaTeX 了。但我印象里是拿不到的。


你这么想这个问题。假设 \hbox 的自然宽度是 a,那么外部要别引导符填充的 \hskip 除以 \hbox 自然宽度,余数小于 a。所以你要让 n 个 \hbox 内部的 \hskip 的总弹性容量大于等于 a 就能保证不管怎样的宽度,都能够填上缝隙。


更一般地,如果单个 \hbox 内部的 \hskip 的弹性容量大于等于 a,那就肯定能搞定了。

一周热门 更多>