! ClassicThesis 中缺少 \endcsname 插入

! ClassicThesis 中缺少 \endcsname 插入

我今天开始在 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-fixesgreek.no-LGR-fixes

请注意,99% 的时间里,回答这个问题都需要提供一个最小的示例来重现错误,这是您下次可以而且应该自己做的事情。

相关内容