我想用不同的单位进行矢量加法,如下所示,
(1+2pt,3+4pt) % of course this point format will not work for the current PSTricks
我的解决方案是用 PostScript 符号来写点。但是出现了一个问题:我需要一个新的运算符来转换pt
为活动单位。
我想在 PostScript 中执行的操作如下,
(!1 2 Pt2AU add 3 4 Pt2AU add)
又如何定义Pt2AU
?
注意,PSTricks 中默认的活动单位是 1 厘米。但我们可以更改它。
您可以使用的 MWE 如下,
\documentclass[pstricks,border=12pt]{standalone}
\SpecialCoor
\pstVerb{/Pt2AU {72.27 div 2.54 mul} bind def}% needs correction to accommodate all possible active unit
\psset{unit=1cm}
\begin{document}
\begin{pspicture}[showgrid](4,4)
\psline(1,3)(!1 2 Pt2AU add 3 4 Pt2AU add)
\end{pspicture}
\end{document}
答案1
尝试这样的事情:(我认为这个版本有效)。
\documentclass{article}
\usepackage{pstricks,pst-node,pst-eucl}
\pagestyle{empty}
\makeatletter
\pstVerb{ /aceGetXcoor {GetNode 0 mul add} bind def
/aceGetYcoor {GetNode exch 0 mul add} bind def
}
\newcommand{\mynewnode}[4]{%
%% #1 = old node
%% #2 = addition to x-value
%% #3 = addition to y-value
%% #4 = new node name
\pnode( ! tx@EcldDict begin
/N@#1 aceGetYcoor \expandafter\pst@number\dimexpr #3\relax\space add
/N@#1 aceGetXcoor \expandafter\pst@number\dimexpr #2\relax\space add
\pst@number\psxunit div exch
\pst@number\psyunit div
end
){#4}}
\makeatother
\begin{document}
\psset{xunit=2cm,yunit=20pt}
\begin{pspicture}[showgrid=true](0,0)(5,5)
\pnode(2,3){A}
\mynewnode{A}{2cm}{1cm}{B}
\mynewnode{B}{-1in}{10pt}{C}
\mynewnode{C}{2em-2ex}{-20ex}{D}
\psline(A)(B)(C)(D)
\end{pspicture}
\end{document}
此示例使用 中的 PostScript 库pst-eucl
。看起来,如果您以这种方式处理(因为 LaTeX 将所有单位转换为 pts),您可以通过参数传递任何您喜欢的单位#2
,#3
并将点放置在您想要的位置。
答案2
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-node}
\psset{yunit=10pt}
\begin{document}
\begin{pspicture}[showgrid](4,4)
\pcline[YnodesepB=-3pt,offsetB=10pt](1,3)(1,3)
\end{pspicture}
\end{document}
或者
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pstricks-add}
\psset{yunit=10pt}
\def\myLine(#1)(#2){\rput(#1){\psline(#2)}}
\begin{document}
\begin{pspicture}[showgrid](4,4)
\myLine(1,3)(3pt,10pt)
\end{pspicture}
\end{document}
答案3
窃取 A.Ellett 答案的重要部分。
\documentclass[pstricks,border=12pt]{standalone}
\SpecialCoor
\psset{xunit=1cm,yunit=10pt}% must be declare before \pstVerb!
\makeatletter
\pstVerb
{
/pt2xu {\pst@number\psxunit div} bind def
/pt2yu {\pst@number\psyunit div} bind def
}
\makeatother
\begin{document}
\begin{pspicture}[showgrid](4,4)
\psline(1,3)(!1 3 pt2xu add 3 10 pt2yu add)
\end{pspicture}
\end{document}