newcolumntype 导致 afterpage 出现错误

newcolumntype 导致 afterpage 出现错误

当我在 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以某种方式进行定义,以避免需要加倍#(通过令牌寄存器循环令牌),但我认为没有人会使用该包,更不用说在其参数中需要宏参数令牌了:- )

相关内容