How to determine if a package is a meta-package from the command line?

There is no formal definition of a metapackage. The informal definition is that a metapackage is one that is only intended to be installed for its dependencies and contains no useful file of its own.

You can define a metapackage as a package that contains no file. There is no way to determine this from the package database. You can use the file database and check that the package contains only directories (many such packages contain a few directories). In fact, most metapackages contain a few files in /usr/share/doc/<package name>: a copyright file, a changelog, sometimes a few more. Here's an approximation that defines a metapackage as containing only files in /usr/share/doc/<some directory> (not in subdirectories of that) and the leading directories:

if ! apt-file -F list $package | grep -qvE '^/(usr(/share(/doc(/[^/]*(/[^/]*)?)?)?)?)?$'; then
  echo "$package looks like a metapackage"
fi

Another approach is to look for a package tag with debtags. There are several tags that are commonly used on metapackages.

debtags tag ls $package | grep -x -e 'role::metapackage' -e 'role::dummy' -e 'special::meta'

Another approach is to look for packages with a small size. Each directory counts as 4 kB, so plan accordingly when picking a threshold (again, this is an approximation).

aptitude -F '%I %p' search "~n^$package\$"

Upon reflection, I wonder if you mean virtual packages rather than metapackages. Virtual packages are actually not packages but package names used in Provides: fields. You can list them with aptitude search '~v'. Running apt-cache show on one displays “Can't select versions from package 'zcav' as it is purely virtual”. Running aptitude show lists the packages that provide it. A convenient way to show virtual packages is with apt-cache: this prints one line for a non-virtual package and potentially multiple lines (one for each provider) for a virtual package — you can tell if the package is virtual even if there is a single provider because the name of the provider is different.

apt-cache -n search "^$package\$"

You could try entering

apt-cache search 'metapackage | meta-package'

which will give you a long list, and then use grep to, say show all science related metapackages with

apt-cache search 'metapackage | meta-package' | grep -i science

This will return a long list (I have shortened it here)

science-astronomy - Debian Science Astronomy packages
science-astronomy-dev - Debian Science Astronomy-dev packages
science-biology - Debian Science Biology packages
science-chemistry - Debian Science Chemistry packages
science-dataacquisition - Debian Science data acquisition packages
science-dataacquisition-dev - Debian Science data acquisition development packages
science-distributedcomputing - Debian Science Distributed Computing packages
science-electronics - Debian Science Electronics packages
science-electrophysiology - Debian Science packages for Electrophysiology
science-engineering - Debian Science Engineering packages
science-engineering-dev - Debian Science Engineering-dev packages
science-geography - Debian Science Geography packages
science-highenergy-physics - Debian Science High Energy Physics packages

You can use any number of alternatives for science, such as KDE to find all the KDE metapackages.

This is probably about the best you can do with apt-cache, but it should quickly locate most of the metapackages you want to find. If it doesn't find exactly everything you were looking for, the simplest thing is to look in the metapackage section in Synaptic.