2009-09-07 12 views
5

Ho un ambiente tabella personalizzato definito con \ newenvironment. Ho una didascalia in questo ambiente, ma voglio averlo alla fine.Come creare un ambiente tabella definito con la didascalia alla fine della tabella con LaTeX?

miei sguardi ambiente (un po 'semplificato) come questo:

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

voglio mettere la didascalia alla fine, in questo modo:

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

Ma che non funziona, perché Non posso usare i parametri alla fine dell'ambiente. Come posso risolvere questo problema?

risposta

4

Si desidera memorizzare i parametri di didascalia ed etichetta e utilizzarli in un secondo momento. (Inoltre, il \ etichetta deve apparire dopo il \ caption.)

Qualcosa del genere dovrebbe funzionare:

\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}% 
} 

utilizzare l'ambiente come questo:

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

non ho ancora testato questo codice.

+0

Grazie mille. Ma è risultato che \ gdef non ha funzionato. Invece ho usato \ renewcommand e tutto funziona come voglio. Grazie. – Mnementh

+0

Ah, l'ho incasinato. Le parentesi attorno al comando gdef non dovrebbero essere lì: \ gdef \ templabel {# 1} \ gdef \ tempcaption {# 2} Siamo spiacenti. Questo è quello che ottengo per non testare prima il mio codice. – godbyk

+0

Usa '\ centering' invece dell'ambiente centrale. Quest'ultimo aggiunge uno spazio verticale extra non necessario. –

-2

utilizzare taglia e incolla invece di un nuovo ambiente? sono fata certa di \ newenv. non è pensato per essere usato in quel modo. qual è il punto di questo? non scrivere tutto fuori ogni volta?

+2

Per non digitare tutto il tempo. Per cambiare l'aspetto dei tavoli sull'intero libro in una sola volta. Per avere lo stesso stile su tutti i tavoli. I motivi tipici di DRY. Potresti chiedere che senso ha definire ambienti o nuovi comandi. – Mnementh

+0

beh, il punto di definire un nuovo ambiente è che avrebbe i suoi contatori, invece di essere contato come tabella o figura ... ma questo sembra abbastanza inutile. – Mica

Problemi correlati