Augusto,

Você deve crias os contrastes de Tukey. Não há função para isso. Você deve criar exatamente da maneira como você quer comparar, ou seja, pelas suas explicações, comparar níveis de B (pairwise) fixando níveis de A. Combinando as funções que o R possui (combn, apply, contrast, multcomp) a tarefa fica simples.

da <- expand.grid(A=gl(3,1), B=gl(4,4))
da$y <- rnorm(nrow(da))

require(nlme)

m0 <- gls(y~A*B, da)
anova(m0)

# comparar níveis (pairwise) de B fixando nível de A (contrastes de Tukey)
choose(nlevels(da$B), 2) # número de comparações
cpr <- combn(nlevels(da$B), 2); cpr  # as comparações

Blev <- levels(da$B)
Alev <- levels(da$A)
cpr.names <- paste("B", cpr[1,], "-", "B", cpr[2,], sep="")

require(contrast)

cpr.list <- lapply(cpr.list, t)
cpr.list # matriz de contrastes de Tukey entre B fixando A

c0 <- apply(cpr, 2,
            function(i){
              c1 <- contrast(m0, list(A=Alev[1], B=Blev[i[1]]),
                             list(A=Alev[1], B=Blev[i[2]]))
              c1$X
            })
colnames(c0) <- paste("A", Alev[1], "/", cpr.names, sep="")
c0

require(multcomp)
glht(m0, linfct=t(c0)) # repetir para os demais níveis de A

À disposição.
Walmes.

==========================================================================
Walmes Marques Zeviani
LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W)
Departamento de Estatística - Universidade Federal do Paraná
fone: (+55) 41 3361 3573
VoIP: (3361 3600) 1053 1173
e-mail: walmes@ufpr.br
twitter: @walmeszeviani
homepage: http://www.leg.ufpr.br/~walmes
linux user number: 531218
==========================================================================