2009-09-07 8 views
5

J'ai un environnement de table personnalisé défini avec \ newenvironment. J'ai une légende dans cet environnement, mais je veux l'avoir à la fin.Comment créer un environnement de table autodéfini avec la légende à la fin de la table avec LaTeX?

Mes regards sur l'environnement (un peu simplifié) comme celui-ci:

\newenvironment{mytable}[2]{\begin{table}[hbtp]\caption{#1}\label{#1}\begin{center}\begin{tabular}{#2}}{\end{tabular}\end{center}\end{table}} 

Je veux mettre la légende à la fin, comme ceci:

\newenvironment{mytable}[2]{\begin{table}[hbtp]\label{#1}\begin{center}\begin{tabular}{#2}}{\caption{#1}\end{tabular}\end{center}\end{table}} 

Mais cela ne fonctionne pas, parce que Je ne peux pas utiliser les paramètres à la fin de l'environnement. Comment puis-je résoudre ce problème?

Répondre

4

Vous devez stocker les paramètres de légende et d'étiquette et les utiliser ultérieurement. (En outre, l'étiquette \ doit apparaître après la légende \.)

Quelque chose comme cela devrait fonctionner:

\newcommand{\templabel}{}% stores the label 
\newcommand{\tempcaption}{}% stores the caption 

\newenvironment{mytable}[3]{% 
    \gdef\templabel{#1}% store the label so we can use it later 
    \gdef\tempcaption{#2}% store the caption so we can use it later 
    \begin{table}[hbtp]% 
    \begin{center}% 
     \begin{tabular}{#3}% 
}{% 
     \caption{\tempcaption}% use the stored caption 
     \label{\templabel}% use the stored label (*after* the caption) 
     \end{tabular}% 
    \end{center}% 
    \end{table}% 
} 

Utilisez l'environnement comme celui-ci:

\begin{mytable}{tab:example}{This is the caption for my example table.}{cc} 
    Row 1 & First \\ 
    Row 2 & Second \\ 
    Row 3 & Third \\ 
\end{mytable} 

Je n'ai pas testé code.

+0

Merci beaucoup. Mais il s'est avéré que \ gdef n'a pas fonctionné. Au lieu de cela, j'ai utilisé \ renewcommand et tout fonctionne comme je le veux. Je vous remercie. – Mnementh

+0

Ah, j'ai foiré ça. Les accolades autour de la commande gdef ne doivent pas être présentes: \ gdef \ templabel {# 1} \ gdef \ tempcaption {# 2} Désolé. C'est ce que je reçois pour ne pas tester mon code en premier. – godbyk

+0

Utilisez '\ centering' à la place de l'environnement central. Ce dernier ajoute de l'espace vertical supplémentaire inutile. –

-2

utiliser couper et coller au lieu d'un nouvel environnement? Je suis féer certain que le \ newenv. n'est pas destiné à être utilisé de cette manière. quel est le but de ceci? de ne pas tout taper à chaque fois?

+2

Pour ne pas taper tout le temps. Pour changer l'apparence des tableaux sur l'ensemble du livre en une seule fois. Avoir clairement le même style sur toutes les tables. Les raisons typiques pour DRY. Vous pourriez demander quel est le point dans la définition des environnements ou des nouvelles commandes. – Mnementh

+0

Eh bien, le point de définir un nouvel environnement est de sorte qu'il aurait ses propres compteurs, au lieu d'être compté comme une table ou une figure ... mais cela semble plutôt inutile. – Mica

Questions connexes