Latex中的新环境使用其他环境,编译器找不到\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}
}
但似乎没有找到 \end{table} :
! LaTeX 错误:输入第 23 行上的 \begin{table} 以 \end{document} 结尾。
有办法避免这种情况吗?
I'm setting up a new environment for my latex document for consistent tables. It looks like this:
\newenvironment{defaultTable}[2] {
\begin{table}[h]
\noindent
\tabularx{\textwidth}{#1}
\specialrule{0.5pt}{10pt}{0pt} \rowcolor[gray]{.9}
} {
\bottomrule
\endtabularx
\caption{#2}
\end{table}
}
It doesn't seem to find the \end{table} though:
! LaTeX Error: \begin{table} on input line 23 ended by \end{document}.
Is there a way to avoid this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
将
\begin{table}
替换为\@float{table}
并将\end{table}
替换为\end@float< /代码>。
\@float
和\end@float
是 LaTeX 用于启动和结束浮动环境的内部命令。您还需要遵循 Alexey 关于 #2 参数的建议。将其存储在环境的第一部分 (
\gdef\mycaption{#2}
) 中,然后在第二部分\caption{\mycaption}
中调用它。将\def\mycaption{\relax}
放在\begin{defaultTable}
行之前。另外,由于
\@float
和\end@float
中有@
符号,如果此代码位于文档文件的序言中(而不是.sty
文件),您需要将\makeatletter
放在\begin{defaultTable}
和之前
。\end{defaultTable}
之后的 >\makeatotherReplace
\begin{table}
with\@float{table}
and replace\end{table}
with\end@float
.The
\@float
and\end@float
are LaTeX's internal commands for starting and ending the float environment.You'll also want to follow Alexey's advice on the #2 parameter. Store it in the first part of your environment (
\gdef\mycaption{#2}
) and then recall it later\caption{\mycaption}
in the second part. Put\def\mycaption{\relax}
just before the\begin{defaultTable}
line.Also, since
\@float
and\end@float
have@
signs in them, if this code is in the preamble of your document file (instead of say, a.sty
file), you'll need to put\makeatletter
before your\begin{defaultTable}
and also\makeatother
after\end{defaultTable}
.如果使用xparse机制,最后可以使用#2:
You can use #2 in the end if you use the xparse mechanism:
您不能在
\newenvironment
宏的最后一个参数中使用#2
。您应该仅在第二个参数中使用 #1..#9。将
#2
保存到\tempa
(或任何宏)。并在标题中使用\tempa
。You can not use
#2
in the last argument of the\newenvironment
macros. You should use #1..#9 in the second argument only.Save your
#2
to\tempa
(or any macros). And use\tempa
in the caption.我也有同样的问题,这是因为“\end{tabularx}”。解决办法是:
因此,您将行定义为参数。
问候,
埃里克
I've has the same problem, and it is because of the "\end{tabularx}". The solution is:
So you define the rows as a parameter.
Regards,
Eric
您也可以只使用类似于 Eric 的解决方案的
\newcommand
。这将避免您的问题(缺少
\end{table}
以及在关闭代码的环境中引用参数时的错误),而不会产生太多麻烦。事实上,我也喜欢将表设计与表数据分开的想法。特别是当您创建多个需要看起来相等的表时。
You could also just use a
\newcommand
similar to Eric's solution.This will avoid both your problems (the missing
\end{table}
and the error when referencing arguments in the environments closing code) without much hassle.In fact I also like the idea of separating the table design from the table data. Especially if you create multiple tables that need to look equal.