\def 命令中的简单计算

\def 命令中的简单计算

我想定义命令进行一些简单的计算,如下所示:

\def\rectangle(#1,#2)(#3,#4)#5{
   \psframe(#1,#2)(#3,#4)
   \rput((#1+#3)/2,(#2+#4)/2){#5}
}
%
\rectangle(1,1)(49,49){X}

目标是画一个矩形,然后在矩形的中心写一些文字。

显然,我所做的并没有起到作用。

正确的做法是什么?

答案1

\newcommand下面是使用而不是 的示例\def。坐标计算在后记级别水平 ( \rput(! x y)),考虑逆波兰表示法

\documentclass{article}
\usepackage{pstricks}

\newcommand{\rectangle}[5]{
   \psframe(#1,#2)(#3,#4)
   \rput(!  #3 #1 add 2 div   #4 #2 add 2 div){#5}
}

% #3 #1 sub 2 div #1 add => (#3 - #1) / 2 + #1 => x
% #4 #2 sub 2 div #2 add => (#4 - #2) / 2 + #2 => y

\begin{document}

\begin{figure}
   \begin{pspicture}(4,4)
      \rectangle{1}{1}{4}{4}{center}
   \end{pspicture}
\end{figure}

\end{document}

在此处输入图片描述

如果你想保留语法

\rectangle(a,b)(c,d){text}

您可以这样做xparse

\documentclass{article}

\usepackage{xparse}
\usepackage{pstricks}

\NewDocumentCommand{\rectangle}{
  >{\SplitArgument{1}{,}} r() % argument of type (<x>,<y>), will be passed as {<x>}{<y>}
  >{\SplitArgument{1}{,}} r() % ditto
  m                           % argument in braces
}{%
  \dorectangle#1#2{#3}%
}

% same as before, just changed the name    
\NewDocumentCommand{\dorectangle}{ m m m m m }{% 
  \psframe(#1,#2)(#3,#4)%
  \rput(!  #3 #1 add 2 div   #4 #2 add 2 div){#5}%
}

\begin{document}

\begin{pspicture}(4,4)
\rectangle(1,1)(4,4){center}
\end{pspicture}

\end{document}

这是一个使用的解决方案\def

\documentclass{article}
\usepackage{pstricks}

\def\rectangle(#1,#2)(#3,#4)#5{
   \psframe(#1,#2)(#3,#4)
   \rput(!  #3 #1 add 2 div   #4 #2 add 2 div){#5}
}

\begin{document}

\begin{figure}
  \begin{pspicture}(4,4)
    \rectangle(1,1)(4,4){center}
  \end{pspicture}
\end{figure}

\end{document}

答案2

我不确定这是否是你想要的,但它确实实现了你的目标。

在 Plain TeX 中:

\long\def\Boxit#1#2{\vbox{\hrule\hbox{\vrule\vbox spread#1pt{\vfil
                     \hbox spread#1pt{\hfil#2\hfil}\vfil}\vrule}\hrule}}
\def\Boxedtext#1#2#3{\Boxit{0}{\vbox to #1{\hsize=#2\vfill\hbox to\hsize{\hfill#3\hfill}\vfill}}}                               

\Boxedtext{1in}{1.5in}{Hi there!}
\bye    

在此处输入图片描述

相关内容