(该问题的这个版本是根据建议高度编辑的)
昨晚我想快速创建一份传真封面,在快速创建的过程中,我遇到了一个我无法解决的问题,所以我想四处打听一下。首先,结构:我有 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
,则不必担心行间空格。