我使用一个制作抽认卡的软件包,其格式为\card{#1}{#2}
,其中#1
和#2
代表正面和反面。这个软件包很好用。
我喜欢遮挡文本,因此我创建了新命令\frontcard
,它使用突出显示或下划线遮挡文本并使文本变白,以及\backcard
,这本质上是一个替代 frontcard 的虚拟命令。例如,我必须写\card{The chancellor of Germany is \frontcard{Angela Merkel}}{The chancellor of Germany is \backcard{Angela Merkel}}
。
\documentclass[frontgrid]{flacards}
\usepackage{color}
\newcommand{\frontcard}[1]{\textcolor{yellow}{\colorbox{yellow}{$#1$}}}
\newcommand{\backcard}[1]{#1}
\begin{document}
\pagesetup{2}{4}
\card{The chancellor of \frontcard{Germany} is \frontcard{Angela Merkel}. }{The chancellor of \backcard{Germany} is \backcard{Angela Merkel}. }
\end{document}
我想将 2 个新命令减少为 1 个命令,因为编写 2 个命令有点多余。
不过,我想不出一个简单的方法来做到这一点,因为空白字段的数量是任意的(2 个或更多)。所以像这样:
\newcard{The chancellor of \blank{Germany} is \blank{Angela Merkel}}
我在想如何实现这一点;也许使用ifthen
包或etoolbox
包?所以,如果我在,#1
就执行这个命令,如果我在,#2
就执行另一个命令。但是我不知道如何具体实现这一点。有什么建议吗?
答案1
像这样:
\documentclass[frontgrid]{flacards}
\usepackage{color}
\newcommand{\frontcard}[1]{\textcolor{yellow}{\colorbox{yellow}{$#1$}}}
\newcommand{\backcard}[1]{#1}
% new:
\newcommand{\Card}[1]{% create new command for cards with blanks
\card{% call the original \card command with twice the same argument (#1)
\let\blank\frontcard% but let \blank behave like \frontcard the first time
#1
}{%
\let\blank\backcard% and like \backcard the second time
#1
}%
}
\begin{document}
\pagesetup{2}{4}
\card{The chancellor of \frontcard{Germany} is \frontcard{Angela Merkel}. }{The chancellor of \backcard{Germany} is \backcard{Angela Merkel}. }
\Card{The ``Altkanzler'' of \blank{Germany} is \blank{Helmut Kohl}. }
\end{document}
请注意,我在定义中使用\frontcard
了\backcard
\Card
也有方法可以通过\if
构造甚至ifthen
包来实现这一点,但我认为这有点矫枉过正。以上是我能想到的最简单的解决方案,除了可以将\frontcard
和的定义放在\backcard
定义中\Card