添加 eps 对象作为 pgfornaments

添加 eps 对象作为 pgfornaments

我正在尝试将一组 eps(或 svg)文件转换为自定义 pgfornament 库,以从默认集 Vectorian 中添加一些元素。包装文档建议从 Inkscape -> 保存为 LaTex/Pstricks 开始,但是我无法按照下一步操作,将输出转换为 .pgf 文件 - 我完全不明白文档建议我做什么。

我尝试使用 epstopgf 单独将 eps 转换为 pgf,生成的文件可以作为装饰添加,但它不会调整大小或响应 pgfornaments 的大小和对称性指令,通过检查文件,我发现它的格式与软件包文档 3.5 中的示例不同。例如,pgf 的一行可能显示:

\pgfpathcurveto{\pgfqpoint{12.732cm}{18.229cm}}{\pgfqpoint{12.695cm}{18.209cm}}{\pgfqpoint{12.657cm}{18.19cm}} 

而包文档中的示例中的示例 pgf 文件内容如下:

\l 310.29 189.71

显然编码方式不同。谢谢您的建议!

编辑:根据要求,这里有一个示例 eps:https://pastebin.com/Bz9C8xA4 转换为 PStricks 文件后https://pastebin.com/3zSYkwNn。我不确定如何将其转换为合适的 pgf 文件。pgfornament 的 MWE 应该是这样的:

\documentclass{scrartcl} 
\usepackage[object=custom]{pgfornament} 
\begin{document} %
\begin{tikzpicture}[shorten >=1pt,->,draw=black, x = 1 cm, y = 1 cm]
\node  at (0,0) {\pgfornament{1}};%
\end{tikzpicture}
\end{document}

这将期望 pgf 文件保存为 custom1.pgf,并且还存在 pgflibrarycustom.code.tex,它提供一些默认大小,例如:

\makeatletter
\def\@pgfornamentDim#1{% 
\ifcase#1\relax%
\or\def\@pgfornamentX{136}\def\@pgfornamentY{107}% 1
\fi%
}%
\makeatother
\endinput

这是我从 PSvectorian 示例中复制而来的。

答案1

我不知道它应该是什么样子。我明白

输出

这看起来有点奇怪,但我不知道。

这是包含转换后文件的代码。

\begin{filecontents}{\jobname1.pgf}
\begingroup
\def\i{\pgfusepath{clip}}%
\def\k{\pgfusepath{stroke}}%
\let\o\pgfpathclose
\let\s\pgfusepathqfillstroke
\def\p #1#2{\pgfqpoint{#1bp}{#2bp}}%
\def\m #1 #2 {\pgfpathmoveto{\p{#1}{#2}}}%
\def\r #1 #2 #3 #4 {\pgfpathrectangle{\p{#1}{#2}}{%
\p{#3}{#4}}}%
\def\l #1 #2 {\pgfpathlineto{\p{#1}{#2}}}%
\def\c #1 #2 #3 #4 #5 #6 {%
\pgfpathcurveto{\p{#1}{#2}}{\p{#3}{#4}}{\p{#5}{#6}}}%
\begin{tikzpicture}
\pgftransformscale{.4}
\m 181.82745361 904.71787184
\c 181.82745361 885.26139442 166.50712224 869.48880308 147.60853577 869.48880308 
\c 128.70994929 869.48880308 113.38961792 885.26139442 113.38961792 904.71787184 
\c 113.38961792 924.17434926 128.70994929 939.94694059 147.60853577 939.94694059 
\c 166.50712224 939.94694059 181.82745361 924.17434926 181.82745361 904.71787184 
\k

\m 181.82745361 904.71787184 
\c 181.82745361 885.26139442 166.50712224 869.48880308 147.60853577 869.48880308 
\c 128.70994929 869.48880308 113.38961792 885.26139442 113.38961792 904.71787184 
\c 113.38961792 924.17434926 128.70994929 939.94694059 147.60853577 939.94694059 
\c 166.50712224 939.94694059 181.82745361 924.17434926 181.82745361 904.71787184 
\k


\m 250.13902283 904.08653944 
\c 250.13902283 884.63006202 234.81869146 868.85747069 215.92010498 868.85747069 
\c 197.02151851 868.85747069 181.70118713 884.63006202 181.70118713 904.08653944 
\c 181.70118713 923.54301686 197.02151851 939.3156082 215.92010498 939.3156082 
\c 234.81869146 939.3156082 250.13902283 923.54301686 250.13902283 904.08653944 
\s

\m 250.13902283 904.08653944 
\c 250.13902283 884.63006202 234.81869146 868.85747069 215.92010498 868.85747069 
\c 197.02151851 868.85747069 181.70118713 884.63006202 181.70118713 904.08653944 
\c 181.70118713 923.54301686 197.02151851 939.3156082 215.92010498 939.3156082 
\c 234.81869146 939.3156082 250.13902283 923.54301686 250.13902283 904.08653944 
\k

\m 180.62789917 834.19660109 
\c 180.62789917 814.74012367 165.3075678 798.96753233 146.40898132 798.96753233 
\c 127.51039485 798.96753233 112.19006348 814.74012367 112.19006348 834.19660109 
\c 112.19006348 853.6530785 127.51039485 869.42566984 146.40898132 869.42566984 
\c 165.3075678 869.42566984 180.62789917 853.6530785 180.62789917 834.19660109 
\s

\m 180.62789917 834.19660109 
\c 180.62789917 814.74012367 165.3075678 798.96753233 146.40898132 798.96753233 
\c 127.51039485 798.96753233 112.19006348 814.74012367 112.19006348 834.19660109 
\c 112.19006348 853.6530785 127.51039485 869.42566984 146.40898132 869.42566984 
\c 165.3075678 869.42566984 180.62789917 853.6530785 180.62789917 834.19660109 
\k



\m 248.93946838 833.56526869 
\c 248.93946838 814.10879127 233.61913701 798.33619993 214.72055054 798.33619993 
\c 195.82196406 798.33619993 180.50163269 814.10879127 180.50163269 833.56526869 
\c 180.50163269 853.02174611 195.82196406 868.79433745 214.72055054 868.79433745 
\c 233.61913701 868.79433745 248.93946838 853.02174611 248.93946838 833.56526869 
\s

\m 248.93946838 833.56526869 
\c 248.93946838 814.10879127 233.61913701 798.33619993 214.72055054 798.33619993 
\c 195.82196406 798.33619993 180.50163269 814.10879127 180.50163269 833.56526869 
\c 180.50163269 853.02174611 195.82196406 868.79433745 214.72055054 868.79433745 
\c 233.61913701 868.79433745 248.93946838 853.02174611 248.93946838 833.56526869 
\k

\end{tikzpicture}
\endgroup
\end{filecontents}

\documentclass[border=10pt]{standalone}
\usepackage{pgfornament}
\makeatletter
\newcommand{\callornament}[1]{%
  \begingroup
  \def\i{\pgfusepath{clip}}%
  \let\o\pgfpathclose
  \let\s\pgfusepathqfillstroke
  \def\p ##1##2{\pgfqpoint{##1bp}{##2bp}}%
  \def\m ##1 ##2 {\pgfpathmoveto{\p{##1}{##2}}}%
  \def\l ##1 ##2 {\pgfpathlineto{\p{##1}{##2}}}%
  \def\r ##1 ##2 ##3 ##4 {\pgfpathrectangle{\p{##1}{##2}}{%
      \p{##3}{##4}}}%
  \def\c ##1 ##2 ##3 ##4 ##5 ##6 {%
    \pgfpathcurveto{\p{##1}{##2}}{\p{##3}{##4}}{\p{##5}{##6}}}%
  \@@input #1\relax
  \m 0 0 \l 400 0 \o\s
  \endgroup
}
\makeatother

\usepackage{tikz}



\begin{document}
\tikz \callornament{\jobname1.pgf};
\end{document}

正如手册所解释的那样,使用代码的方式有很多种。我只是选择了最简单的方式,但显然,您可以使用库包装器或其他东西来实现这一点。此外,尽管手册没有这样做,但在我看来,如果您的包装器宏提供了此功能,您可以删除每张图片开头和结尾处的重复代码。也就是说,您不需要\def每个.pgf.

希望这能有所帮助。我想我只是以一种相当简单的方式遵循了手册,因为我根本不熟悉这个过程。毫无疑问,你可以很好地掌握它。

相关内容