地址簿表单

地址簿表单

我想创建一个用于输入地址的环境(或任何其他命令)。例如,我想要这样的东西:

\newaddress
\home
\name{John Doe}
\phone{123-456-7890}
\address{100 1st Street, New York, NY}
\makeaddress

然后它按照特定的格式打印,例如:

\usepackage{wasysym} % Just for \XBox and \Square

\begin{description}
\item[Address Type:] \XBox Home, \Square Work
\item[Name:] John Doe
\item[Phone:] 123-456-7890
\item[Address:] 100 1st Street, New York, NY
\end{description}

我该怎么做?我对任何形式的环境、命令或其他任何东西都持开放态度。

答案1

以下是使用xkeyval只是为了说明使用此方法可以做什么:

在此处输入图片描述

\documentclass{article}
\usepackage{wasysym,xkeyval}% http://ctan.org/pkg/{wasysym,xkeyval}
\makeatletter
\define@cmdkey{address}{type}{}
\define@cmdkey{address}{name}{}
\define@cmdkey{address}{phone}{}
\define@cmdkey{address}{address}{}
\newcommand{\makeaddress}[1][]{%
  {\setkeys{address}{type=,name=,phone={555-555-5555},address=,#1}%
  \begin{description}
    \item[Address Type:] %\cmdKV@address@type
      \def\addresschoice@type{home}\ifx\addresschoice@type\cmdKV@address@type\relax\XBox Home%
      \else\def\addresschoice@type{work}\ifx\addresschoice@type\cmdKV@address@type\relax\Square Work
      \else None\fi\fi
    \item[Name:] \cmdKV@address@name
    \item[Phone:] \cmdKV@address@phone
    \item[Address:] \cmdKV@address@address
  \end{description}
}}
\makeatother
\begin{document}
\makeaddress[name={John Doe},address={100 1st Street, New York, NY},phone={123-456-7890},type=home]
\bigskip
\makeaddress[name={Jane Doe},address={Unknown}]
\end{document}

主要优点是,您可以指定键的默认值(如果未提供),将某些输入限制为特定值,并按您喜欢的顺序混合它们。您必须仔细阅读xkeyval文档查看所有可能性。我不认为我的代码是最优的,也不认为利用了所有的优点xkeyval,但至少它展示了一个应该适合您用例的概念证明。

答案2

您可以使用该directory包(参见随附的示例CTAN 的包裹Christophe Geuzaine 的主页):

\documentclass[12pt]{article}
\usepackage[break,longdates]{directory} 
\directorystyle{address}
\begin{document}
\nodir{*}
\directory{family,business} 
\end{document}

该软件包还允许将地址簿中的信息引入文档,例如生成信头。

相关内容