使用下面的 MWE,我遇到了一些问题。如图所示,MWE 编译正常。如果我从 book 更改为 beamer,我会收到“TeX 容量超出”错误。如果我注释掉 nag 或 babel,它会再次编译正常。这是怎么回事?
%\documentclass{beamer}
\documentclass{book}
\RequirePackage[l2tabu, orthodox]{nag} % Require syntax analyzis
%\usepackage[T1]{fontenc}
%\usepackage[utf8]{inputenc}
\usepackage{xkeyval} % Allow to use key-value pairs in arguments of macros
\usepackage{listingsutf8} % Use program listings
\usepackage[english,magyar]{babel}
\makeatletter
\define@key{MEMacros}{language}{\def\ME@language{#1}}
\define@key{MEMacros}{options}{\def\ME@options{#1}}
%%%Usage \MESourceFile[keys]{source file}{caption}{label}
\newcommand\MESourceFileNew[4][]{
\setkeys{MEMacros}{language={[ANSI]C},options={}, ,#1}%
\begingroup\edef\x{\endgroup\noexpand
\lstinputlisting[language={\ME@language},\ME@options,label=#4, name=#4]{#2}}
\x
}
\makeatother
\begin{document}
\MESourceFileNew[language={[ANSI]C}, options={numbers=left}
]{HelloWorld.c}{caption}{lst:HelloWorld.c}
\end{document}
#include <stdio.h>
int main()
{
printf("hello, world\n");
}
答案1
问题在于与选项的交互:如果我添加到示例文件中,magyar
这就是我得到的结果\errorcontextlines=100
\nag@@warning@xliii ->\nag@captioncheck
\nag@haslabeltrue
\@@magyar@orig@label ->\nag@@warning@xliii
\nag@@label@xliii
\@@magyar@labelb #1->\@@magyar@orig@label
{#1}\begingroup \c@page \@m \edef ...
\@@magyar@labelb #1->\@@magyar@orig@label {#1}
\begingroup \c@page \@m \edef ...
\@@magyar@labelb #1->\@@magyar@orig@label {#1}
\begingroup \c@page \@m \edef ...
因此,问题在于在 的情况下如何检查标签,以及在与和对 进行listings
的重新定义的交互中如何检查标签。magyar.ldf
beamer
\label
我认为没有合理的方法来解决这个冲突;遵循所执行的所有杂耍magyar.ldf
非常复杂。
最好的办法是忘记nag
。