导入语法包后出现莫名其妙的错误

导入语法包后出现莫名其妙的错误

我正在使用LaTeX-KOMA 模板(顾名思义,基于 KOMA 脚本)由 Karl Voit 提供,用于撰写论文。我可以完美地编译 main.tex,直到我导入包syntax。即使我“按原样”编译模板,而不导入任何其他包,也会发生这种情况。我收到以下错误,我简直无法理解:

! 缺少插入的 \endcsname。\protect l.232 \input{template/declaration_TU_Graz} %% 法定声明 标记的控制序列不应出现在 \csname 和 \endcsname 之间。

!Extra \endcsname.\InputIfFileExists ...\csname #1-@alias\endcsname \relax \expandafter \@seco... l.232 \input{template/declaration_TU_Graz} %% 法定声明 我忽略了这一点,因为我没有做 \csname。

!TeX 容量超出,抱歉 [输入堆栈大小=5000]。\@inmathwarn ...latex@warning {命令 \protect #1 在数学模式下无效}\fi l.232 \input{template/declaration_TU_Graz} %% 法定声明如果您确实需要更多容量,可以请向导来扩大我。

仅通过导入包怎么会发生这种情况syntax

如何重现:

  1. 下载LaTeX-KOMA 模板并提取它
  2. 排版 main.tex -> 它按预期工作
  3. 插入到main.tex的\usepackage{syntax}指定区域MISC usepackages
  4. 再次排版main.tex -> 出现错误。

系统:在 MacTex-2015(TeX Live 2015)上运行 texmaker 4.4.1,无需任何包更新,即可在 OS X Yosemite 10.10.3 上运行。

如果您需要任何其他信息,请告诉我!

答案1

语法包重新定义了下划线字符,因此当您在文件名中使用它时,它不会被按原样读取,而是被解释为宏并展开。 简单的解决方案:避免在文件名中使用下划线。

不太理想的解决方案:在包改变其含义之前(在开始文档时),在宏中捕获原始下划线字符syntax,然后使用宏代替下划线:

\documentclass{article}
\usepackage{syntax}
\let\UnderScore_
\begin{document}
\input{bla\UnderScore bla}
\end{document}

更通用的解决方案_:恢复(可能在本地)使用的含义

\catcode`\_=11

这将使_角色恢复正常。你可以重新激活syntax的重新定义,方法是:

\catcode`\_=\active

您可以将这两个放在两个宏中\makeunderscoreletter\makeunderscoreactive在本地使用:

\documentclass{article}
\usepackage{syntax}

\newcommand{\makeunderscoreletter}{\catcode`\_=11}
\newcommand{\makeunderscoreactive}{\catcode`\_=\active}

\begin{document}
\makeunderscoreletter
\input{bla_bla} % interprets _ as letter
\makeunderscoreactive

my_variable % uses syntax redefinition

\end{document}

答案2

为了扩展已接受的答案,该syntax包还有一个可选参数nounderscore,专门用于修复此问题。使用加载包可以\usepackage[nounderscore]{syntax}解决您的问题。

相关内容