在整个线宽上扩展 pgfornament 的矢量线

在整个线宽上扩展 pgfornament 的矢量线

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

相关内容