我最近必须为时空分组码绘制多个网格(最早出现在这张纸;开放获取版本是这里)。我想在这里与大家分享代码,这样就不必重复做这项工作了。
如您所见,我创建了一个用于绘制网格的新命令,您可以在其中添加状态数、PSK 顺序以及点之间的 x 和 y 距离作为参数:
\documentclass[a4paper]{文章} \usepackage{pst-plot,pst-sigsys} \usepackage[nomessages]{fp} \newcommand{\trellis}[4]{ \def \状态 {#1} \def \PSK {#2} \def \XDISTANCE {#3} \def \YDISTANCE {#4} \FPupn\NGROUPS{\STATES{} \PSK{} div 0 trunc} \multido{\ryA=0+-\YDISTANCE,\nA=1+1}{\STATES}{% \dotnode(0,\ryA){dotA\nA} \dotnode(\XDISTANCE,\ryA){dotB\nA} } \multido{\nG=1+1,\nOffset=1+\PSK}{\NGROUPS}{% \multido{\nStart=\nG+\NGROUPS}{\PSK}{% \multido{\n箭头=\n偏移+1}{\PSK}{% \ncline{dotA\n开始}{dotB\n箭头} } } } } \开始{文档} \begin{pspicture}[showgrid=true](0,0)(12,-20) \rput(0,0){\trellis{4}{4}{1.}{1}} \rput(3,0){\trellis{16}{4}{1.5}{1}} \rput(6,0){\trellis{8}{8}{2.25}{2.25}} \结束{pspicture} \结束{文档}
答案1
您有很多尾随空格,它们会将图像移到右侧。如果您不确定%
在行尾放置空格的位置,请对每一行都执行此操作:
\newcommand{\trellis}[4]{%
\def \STATES {#1}%
\def \PSK {#2}%
\def \XDISTANCE {#3}%
\def \YDISTANCE {#4}%
\FPupn\NGROUPS{\STATES{} \PSK{} div 0 trunc}%
\multido{\ryA=0+-\YDISTANCE,\nA=1+1}{\STATES}{%
\dotnode(0,\ryA){dotA\nA}
\dotnode(\XDISTANCE,\ryA){dotB\nA}
}%
\multido{\nG=1+1,\nOffset=1+\PSK}{\NGROUPS}{%
\multido{\nStart=\nG+\NGROUPS}{\PSK}{%
\multido{\nArrows=\nOffset+1}{\PSK}{%
\ncline{dotA\nStart}{dotB\nArrows}
}%
}%
}%
}
%
PSTricks 宏本身会消除所有粘合,因此不需要最后三个。但这并没有什么坏处...
并且我认为你不需要这个fp
包。尝试一下\numexpr
\multido{\nG=1+1,\nOffset=1+\PSK}{\numexpr\STATES/\PSK}{%
\multido{\nStart=\nG+\numexpr\STATES/\PSK}{\PSK}{%