pgfornament 中有好看的水平线装饰(请参阅本文档第 20 页)。
但是,有些装饰物的左右直线部分的长度相当短。看看装饰物 88,我理想中想要的是这样的:
也就是说,让这个装饰物水平居中,装饰物的左右直线部分被拉伸以填充线条的剩余部分。
我使用以下命令来获得此结果,使用xhfill
包:
\documentclass{article}
\usepackage[object=vectorian]{pgfornament}
\usepackage{xhfill}
\usepackage{lipsum}
\newcommand{\separator}{%
{
\noindent\xhrulefill{black}{1.39pt}
\hspace{-13pt}
\raisebox{-2.95pt}{\resizebox{0.4\linewidth}{2ex}
{{
{\begin{tikzpicture}
\node (C) at (0,0) {};
\node (D) at (6,0) {};
\path (C) to [ornament=88] (D);
\end{tikzpicture}}}}}}%
\hspace{-13pt}
\xhrulefill{black}{1.39pt}
}
\begin{document}
\separator
\lipsum[1]
\end{document}
如您所见,这可以正常工作,但是存在一些问题:
线条叠加在装饰物上,这会导致在 pdf 查看器中查看 PDF 时出现图形错误,具体取决于缩放级别(常见问题)。
的宽度
xhrulefill
并不完全正确;在页面上打印时,我可以看到非常细微的差异。无论我多么接近“正确”的宽度,我似乎都无法让它消失。(这个命令的代码很丑陋,但这只是一个小问题)
有一个更好的方法吗?
答案1
最好在室内完成所有绘图tikz
。您可以从中获得所需的总宽度\textwidth
。
\documentclass{article}
\usepackage[object=vectorian]{pgfornament}
\usetikzlibrary{calc}
\usepackage{lipsum}
\newcommand{\separator}{%
{\par\noindent
\begin{tikzpicture}\def\mylen{3cm}
\coordinate (A) at (0,0);
\coordinate (C) at (\mylen,0);
\coordinate (B) at (\textwidth,0);
\coordinate (D) at ($(\textwidth,0)-(\mylen,0)$);
\draw[line width=1.15pt,line cap=rect] ($(A)+.5*(1.15pt,0)$) -- (C) (D) -- ($(B)-.5*(1.15pt,0)$);
\path (C) to[ornament=88, options/.append style={yshift=.52pt}] (D);
\end{tikzpicture}}
}
\begin{document}
\separator
\lipsum[1]
\end{document}
在此比例下,线条的宽度接近 ,1pt
但不在轴上居中,因此yshift
需要进行一些调整。您必须根据 和 的值调整1.15pt
线条粗细和y 偏移的值,以使它们匹配。.52pt
\mylen
\textwidth