当我在 afterpage 环境中定义新的列类型时,LaTeX 失败并出现错误:
Latex Error: ./chapters/chapter3.tex:149 Illegal parameter number in definition of \AP@.
当删除 nowcolumntype 声明并将“C”替换为“p”时,它可以工作,因此这似乎是 afterpage 的问题。
我正在使用 pdflscape 包
\afterpage{
\begin{landscape}
\begin{table}
\newcolumntype{C}[1]{>{\centering\arraybackslash}m{#1}}
\begin{center}
\begin{tabular}{|C{2.0cm}|C{2.0cm}}
\hline
1 1 & 1 2\\
2 1 & 2 2\\
\hline
\end{tabular}
\end{center}
\end{table}
\end{landscape}
}
答案1
作为一般原则,\newcolumntype
声明不应在文档序言之外使用。(事实上,在序言之外使用声明不会导致崩溃(当不与环境结合使用时),afterpage
这一事实并不与这一点相矛盾……)
以下基于您的代码的 MWE 编译时没有错误。请注意,我已将\begin{center}
...\end{center}
指令替换为简单\centering
指令,并已加载rotating
包以利用其sidewaystable
环境。
\documentclass{article}
\usepackage{afterpage,array,rotating}
\newcolumntype{C}[1]{>{\centering\arraybackslash}m{#1}}
\begin{document}
\afterpage{%
\begin{sidewaystable}
\centering
\begin{tabular}{|C{2.0cm}|C{2.0cm}|}
\hline
1 1 & 1 2\\
2 1 & 2 2\\
\hline
\end{tabular}
\end{sidewaystable}
}
\end{document}
答案2
Afterpage 令牌通过\def
(临时宏,其名称显示在错误消息中)所以像往常一样,使用 def 你必须加倍#
:
\documentclass{article}
\usepackage{afterpage,array,rotating}
\begin{document}
\afterpage{%
\newcolumntype{C}[1]{>{\centering\arraybackslash}m{##1}}
\begin{sidewaystable}
\centering
\begin{tabular}{|C{2.0cm}|C{2.0cm}|}
\hline
1 1 & 1 2\\
2 1 & 2 2\\
\hline
\end{tabular}
\end{sidewaystable}
}
\end{document}
有可能afterpage
以某种方式进行定义,以避免需要加倍#
(通过令牌寄存器循环令牌),但我认为没有人会使用该包,更不用说在其参数中需要宏参数令牌了:- )