2009-11-18 5 views
5

Je suis en train de configurer un nouvel environnement pour mon document latex pour des tables cohérentes. Il ressemble à ceci:Nouvel environnement en latex utilisant d'autres environnements, le compilateur ne trouve pas le end

\newenvironment{defaultTable}[2] { 
    \begin{table}[h] 
    \noindent 
    \tabularx{\textwidth}{#1} 
    \specialrule{0.5pt}{10pt}{0pt} \rowcolor[gray]{.9} 
} { 
    \bottomrule 
    \endtabularx 
    \caption{#2} 
    \end{table} 
} 

Il ne semble pas trouver la fin de \ {table} si:

! Erreur LaTeX: \ begin {table} sur la ligne d'entrée 23 terminée par \ end {document}.

Y at-il un moyen d'éviter cela?

Répondre

3

Remplacer \begin{table} avec et remplacer \end{table} avec \[email protected]. Les \@float et \[email protected] sont des commandes internes de LaTeX pour démarrer et terminer l'environnement flottant.

Vous devrez également suivre les conseils d'Alexey sur le paramètre # 2. Stockez-le dans la première partie de votre environnement (\gdef\mycaption{#2}) et rappelez-le plus tard \caption{\mycaption} dans la deuxième partie. Mettez \def\mycaption{\relax} juste avant la ligne \begin{defaultTable}.

En outre, depuis \@float et \[email protected] ont @ signes en eux, si ce code est dans le préambule de votre fichier de document (au lieu de dire, un fichier .sty), vous aurez besoin de mettre \makeatletter avant votre \begin{defaultTable} et aussi \makeatother après \end{defaultTable}.

3

Vous ne pouvez pas utiliser #2 dans le dernier argument des macros \newenvironment. Vous devriez utiliser # 1 .. # 9 dans le second argument seulement.

Enregistrez votre #2 à \tempa (ou toute autre macros). Et utilisez \tempa dans la légende.

\newenvironment{defaultTable}[2]{ 
    \begin{table}[h] 
    \def\tempa{#2} 
    \noindent  
    \tabularx{\textwidth}{#1} \specialrule{0.5pt}{10pt}{0pt} \rowcolor[gray]{.9} 
}{  
\bottomrule  
\endtabularx  
\caption{\tempa} 
\end{table} 
} 
+0

Thx pour l'indice, il ne résout pas le problème si, je reçois toujours l'erreur que \ begin {table} est terminée par \ end {document} – arsenbonbon

+0

Rédigez la version complète de votre fichier avec préambule. –

4

Vous pouvez utiliser # 2 à la fin si vous utilisez le mécanisme de xparse:

\usepackage{xparse} 
\NewDocumentEnvironment{defaultTable}{+m+m}{% 
    \begin{table}[h] 
    \noindent 
    \tabularx{\textwidth}{#1} 
    \specialrule{0.5pt}{10pt}{0pt} \rowcolor[gray]{.9} 
} {% 
    \bottomrule 
    \endtabularx 
    \caption{#2} 
    \end{table} 
} 
2

J'ai le même problème, et c'est à cause du "\ end {tabularx}". La solution est:

\newenvironment{defaultTable}[3] {
\begin{table}[h]
\caption{#2}
\noindent
\begin{tabularx}{\textwidth}{#1}
\specialrule{0.5pt}{10pt}{0pt} \rowcolor[gray]{.9}
#3
\bottomrule
\end{tabularx}
} {
\end{table} }

Vous définissez ainsi les lignes en tant que paramètre.

Cordialement, Eric

Questions connexes