我想创建一个用于输入地址的环境(或任何其他命令)。例如,我想要这样的东西:
\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}
该软件包还允许将地址簿中的信息引入文档,例如生成信头。