在图片环境中扩展变量

在图片环境中扩展变量

(该问题的这个版本是根据建议高度编辑的)

昨晚我想快速创建一份传真封面,在快速创建的过程中,我遇到了一个我无法解决的问题,所以我想四处打听一下。首先,结构:我有 2 个文件:一个是样式文件,另一个是包含特定传真信息的文件。在样式文件中,我创建了一些变量来保存信息文件中指定的数据。这是样式文件:

\newcommand{\myfaxdate}[1]{\newcommand{\@myfaxdate}{#1}}
\newcommand\myfaxto[1]{\newcommand{\@myfaxto}{#1}}
\newcommand\myfaxfrom[1]{\newcommand{\@myfaxfrom}{#1}}
\newcommand\myfaxre[1]{\newcommand{\@myfaxre}{#1}}
\newcommand\myfaxnumpages[1]{\newcommand{\@myfaxnumpages}{#1}}
\newcommand\myfaxtelnum[1]{\newcommand{\@myfaxtelnum}{#1}}
\newcommand\myfaxnum[1]{\newcommand{\@myfaxnum}{#1}}
\newcommand\myfaxcomments[1]{\newcommand{\@myfaxcomments}{#1}}

\newsavebox{\faxcover}
\savebox{\faxcover}{%
 \put(0,7){\makebox{\bfseries Date:} \@myfaxdate} 
  \put(0,6){\makebox{\bfseries To:} \@myfaxto}
  \put(0,5){\makebox{\bfseries From:} \@myfaxfrom}
  \put(0,4){\makebox{\bfseries Re:} \@myfaxre}
  \put(0,3){\makebox{\bfseries Comments:} \@myfaxnumpages}
  \put(0,2){\makebox{\bfseries From:} \@myfaxtelnum}
  \put(0,1){\makebox{\bfseries Re:} \@myfaxnum}
  \put(0,0){\makebox{\bfseries Comments:} \@myfaxcomments}
} 

\newcommand{\makefax}{%
 \begin{picture}(10,10)
   \put (0,0){\usebox\faxcover}
 \end{picture}
}

这是另一个文件(顶级文件)

\documentclass[10pt]{report}
\usepackage{./myfax}
\begin{document}

\myfaxdate{09-28-2011}
\myfaxto{Ozymandius, King of Kings}
\myfaxfrom{Bev}
\myfaxre{Two vast and trunkless legs of stone}
\myfaxnumpages{3 counting the cover sheet}
\myfaxtelnum{(516) 676-4099}
\myfaxnum{(800) 123-4567}
\myfaxcomments{blah not blee}

\makefax

\end{document}

当我编译时,我收到一个错误,告诉我这\@myfaxdate是一个未定义的控制序列。我应该补充一点,分成两个文件的目的是因为我想创建自己的传真样式,我可能希望我的组织中的其他人使用它(也许)。这将简化它,所以他们所要知道的只是在主文件中填写一些空白。

答案1

尝试这个:

\documentclass{article}
\begin{document}
\newcommand{\myfaxdate}[1]{#1}
  \begin{picture}(5,5)
    \put(30,30){Date: \myfaxdate{9-12-2011}}
  \end{picture}
\end{document}

答案2

\savebox是在“保存”时构建的,而不是在“使用”时构建的。到那时命令尚未定义。

尝试根本不\savebox使用\usebox

\newcommand{\makefax}{%
  \begin{picture}(10,10)
    \put(0,7){\makebox{\bfseries Date:} \@myfaxdate} 
    \put(0,6){\makebox{\bfseries To:} \@myfaxto}
    \put(0,5){\makebox{\bfseries From:} \@myfaxfrom}
    \put(0,4){\makebox{\bfseries Re:} \@myfaxre}
    \put(0,3){\makebox{\bfseries Comments:} \@myfaxnumpages}
    \put(0,2){\makebox{\bfseries From:} \@myfaxtelnum}
    \put(0,1){\makebox{\bfseries Re:} \@myfaxnum}
    \put(0,0){\makebox{\bfseries Comments:} \@myfaxcomments}
 \end{picture}%
}

还有几点建议:

  • 使用\newcommand{\@someinfo}{}\newcommand{\someinfo}[1]{\renewcommand{\@someinfo}{#1}}。这将允许您调用\someinfo任意次数。
  • 似乎\makebox只需用 即可替代\textbf
  • 如果使用tabular\parbox(或者什么都不用)代替picture,则不必担心行间空格。

相关内容