我今天开始在 Windows 机器上使用 TexStudio(与 TexLive 一起)。我上传了一个我之前在 Overleaf 上工作的项目。它使用了 ClassicThesis 包。
\usepackage[greek, english]{babel}
我尝试在其中添加希腊语文字,ClassicThesis.tex
但结果出现了Option clash for babel
错误。
所以我删除了我添加的 babel 行。从那一刻起,它不再编译 pdf,并说
! Missing \endcsname inserted.
<to be read again>
\global
l.3 ...1\EnsureStandardFontEncoding {ii}}{\mph@nr}
我检查了 .aux
之前生成的文件(我已将其保存在 github 上),其他相同的行有所不同。它是\mph@setcol{ii:i}{\mph@nr}
,而在新.aux
文件上它是\mph@setcol{ii:\global \let \T1\EnsureStandardFontEncoding \T1\EnsureStandardFontEncoding {ii}}{\mph@nr}
。
编辑:classicthesis_config.tex
文件中有以下代码:
\PassOptionsToPackage{greek,american}{babel} % change this to your language(s)
\usepackage{babel}
我现在添加了希腊语选项,并删除了\usepackage{babel}
我错误添加的。
问题仍然存在。即使我删除该.aux
文件,它也会以相同的方式重写它。
编辑 nr2:这里有一个最小的例子。涉及三个文件。
主要.tex
文件:
\RequirePackage{fix-cm} % fix some latex issues see: http://texdoc.net/texmf-dist/doc/latex/base/fixltx2e.pdf
\documentclass[ oneside,openright,titlepage,numbers=noenddot,headinclude,%1headlines,% letterpaper a4paper
footinclude=true,cleardoublepage=empty,abstractoff, % <--- obsolete, remove (todo)
BCOR=5mm,paper=a4,fontsize=11pt,%11pt,a4paper,%
greek,american, %
]{scrreprt}
\input{classicthesis-config}
\usepackage{xcolor}
\newcommand\corrections[1]{\textcolor{red}{#1}}
\usepackage{tipa}
\usepackage{setspace}
\setstretch{1.5}
\usepackage{array}
\usepackage[left=3cm,right=3cm,top=3.5cm,bottom=3.5cm]{geometry}
\begin{document}
\frenchspacing
\raggedbottom
\selectlanguage{american}
\pagenumbering{roman}
\pagestyle{plain}
\include{DirtyTitlepage}
\end{document}
以下是配置文件中的代码:
\PassOptionsToPackage{utf8}{inputenc}
\usepackage{inputenc}
\newcommand{\myTitle}{MyTitle\xspace}
\PassOptionsToPackage{greek,american}{babel}
\usepackage{babel}
\usepackage{csquotes}
\PassOptionsToPackage{%
backend=bibtex8,bibencoding=ascii,%
language=auto,%
style=numeric-comp,%
sorting=nyt, % name, year, title
maxbibnames=10, % default: 3, et al.
%backref=true,%
natbib=true % natbib compatibility mode (\citep and \citet still work)
}{biblatex}
\usepackage{biblatex}
\PassOptionsToPackage{T1}{fontenc} % T2A for cyrillics
\usepackage{fontenc}
\usepackage{textcomp} % fix warning with missing font shapes
\usepackage{scrhack} % fix warnings when using KOMA with listings package
\usepackage{xspace} % to get the spacing after macros right
\usepackage{mparhack} % get marginpar right
\usepackage{fixltx2e}
\PassOptionsToPackage{printonlyused,smaller}{acronym}
\usepackage{acronym} % nice macros for handling all acronyms in the thesis
\renewcommand*{\aclabelfont}[1]{\acsfont{#1}}
\makeatletter
\@ifpackageloaded{babel}%
{%
\addto\extrasamerican{%
\renewcommand*{\figureautorefname}{Figure}%
\renewcommand*{\tableautorefname}{Table}%
\renewcommand*{\partautorefname}{Part}%
\renewcommand*{\chapterautorefname}{Chapter}%
\renewcommand*{\sectionautorefname}{Section}%
\renewcommand*{\subsectionautorefname}{Section}%
\renewcommand*{\subsubsectionautorefname}{Section}%
}%
\addto\extrasngerman{%
\renewcommand*{\paragraphautorefname}{Absatz}%
\renewcommand*{\subparagraphautorefname}{Unterabsatz}%
\renewcommand*{\footnoteautorefname}{Fu\"snote}%
\renewcommand*{\FancyVerbLineautorefname}{Zeile}%
\renewcommand*{\theoremautorefname}{Theorem}%
\renewcommand*{\appendixautorefname}{Anhang}%
\renewcommand*{\equationautorefname}{Gleichung}%
\renewcommand*{\itemautorefname}{Punkt}%
}%
\providecommand{\subfigureautorefname}{\figureautorefname}%
}{\relax}
\makeatother
\usepackage{classicthesis}
最后,DirtyTitlePage 代码:
%*******************************************************
% Little Dirty Titlepage
%*******************************************************
\thispagestyle{empty}
%\pdfbookmark[1]{Titel}{title}
%*******************************************************
\begin{center}
\spacedlowsmallcaps{\myTitle} \\ \medskip
\begingroup
\color{Blue}\spacedallcaps{\myTitle}
\endgroup
\end{center}
有人能帮助我吗?
答案1
小心加载数百个你可能不会需要的包(有些包fixltx2e
根本不需要做任何事情)
某些东西的定义\@roman
方式不再扩展为罗马数字,这可能会破坏很多东西,但在这里它破坏了mparhack
。
您可以\@roman
使用以下方法恢复
\let\tmp\@roman
\input{classicthesis-config}
\let\@roman\tmp
答案2
重现该问题的最小文档是
\documentclass[%
greek,%
american,%
]{report}
\usepackage{babel}
\usepackage{mparhack}
\begin{document}
\pagenumbering{roman}
\thispagestyle{empty}
\begin{center}
a
\end{center}
\end{document}
这失败了
! Missing \endcsname inserted.
<to be read again>
\global
l.6 ...T1\EnsureStandardFontEncoding {i}}{\mph@nr}
? x
正如 David 所说,问题在于某些东西重新定义\@roman
的方式会造成破坏。当与 (pdf)TeX 一起使用时mparhack
,其中greek.ldf
包含希腊语的语言定义。babel
我建议使用babel-greek
推荐的方法之一来更改此行为,而不是简单地覆盖它所做的更改。有两种选择:完全关闭包所做的更改或在 Greek 未激活时本地关闭它们。
如果您的文档使用希腊语作为主要语言,您可能希望全局关闭它们,但如果如您的序言所暗示的那样,英语是主要语言,则在本地关闭它们应该就足够了。特别是,如果英语是前言和后记的主要语言,那么以这种方式在本地禁用更改应该就足够了。
\documentclass[% ateb: https://tex.stackexchange.com/a/701031/
greek,%
american,%
]{report}
\usepackage[greek.local-LGR-fixes,american]{babel}
\usepackage{mparhack}
\begin{document}
\pagenumbering{roman}
\thispagestyle{empty}
\begin{center}
a
\end{center}
\end{document}
如果这还不够,请替换greek.local-LGR-fixes
为greek.no-LGR-fixes
。
请注意,99% 的时间里,回答这个问题都需要提供一个最小的示例来重现错误,这是您下次可以而且应该自己做的事情。