\ctexset设置空行以及\contentsname定义后Not Allow in LR mode的错误

发布于 2025-04-09 14:28:07

报错信息为:

Something's wrong--perhaps a missing \item.

在删去\ctexset的空行之后,报错变为:

Not allowed in LR mode.

以下是我的代码:

\documentclass[UTF8]{ctexbook}
\usepackage{zhlipsum}
\usepackage{titletoc}
\usepackage{titlesec}
\usepackage{geometry}
\usepackage{xcolor}
\usepackage{pagecolor} 
\usepackage{layout}
\usepackage{chemfig,subcaption,graphicx,float}
\usepackage{listings}
\usepackage{titletoc} % 必须加载宏包
\usepackage{fontspec}
\definecolor{background}{RGB}{215, 247, 250}
\definecolor{藏花红}{RGB}{236,45,122}
\definecolor{石绿}{RGB}{87,195,194}
\geometry{a4paper,centering,scale=0.9}
%自定义“目录名称”
\renewcommand{\contentsname}{%
  \begin{center}
    \normalfont\songti\bfseries 文章目录
  \end{center}
}

\newfontfamily\codefont{Times New Roman}


\setcounter{chapter}{-1} % 初始化为-1,使第一个章节显示

\ctexset{
    chapter = {
        name = {\S},   % 将"第X章"改为"§ X"
        number = \arabic{chapter},    % 阿拉伯数字编号
        format = \songti\large\bfseries\centering, % 标题格式
        beforeskip = 2.5ex,          % 标题前间距
        afterskip = 2.5ex,           % 标题后间距

      }
 }
%针对章(chapter)的目录格式
\titlecontents{chapter}[0pt]                     % 作用对象:章
    {\songti\bfseries}        % 全局格式:间距+右对齐+粗体
    {\thecontentslabel} % 带编号格式
    {}                                           % 无编号格式(空)
    {\titlerule*[8pt]{.}\contentspage}           % 页码引导符+页码



\titleformat{\section}[frame]
{\color{藏花红}}
{\centering
\footnotesize
\enspace 节 \thesection\enspace}
{8pt}
{\bfseries\filcenter\songti}
[\vspace{-10pt}]


% 代码排版配置
% 自定义VBA语法高亮
\lstdefinelanguage{VBA}{
    morekeywords={Sub, End, Dim, As, Set, Range, Worksheet, MsgBox, 
        If, Then, Else, For, Next, Do, While, Loop, Integer, String},
    sensitive=true,
    morecomment=[l]{'},       % 单行注释
    morestring=[b]{"},        % 字符串定义
    keywordstyle=\codefont\color{blue},
    stringstyle=\codefont\color{red},
    basicstyle=\codefont\small,
    keepspaces=true,
    numbers=left,
    % 边距控制
    xleftmargin=2em,                     % 左边界距
    xrightmargin=2em,                     % 右边界距
    framexleftmargin=1em,                % 框线左间距
    framexrightmargin=1em,               % 框线右间距
    columns=fullflexible
}
\lstset{
    language=VBA,
    backgroundcolor=\color{gray!10},
    escapeinside=``,           % 中文注释处理
}

\begin{document}
\title{XVBA教程}
\author{吕旋延}
\date{\today}
\maketitle

\tableofcontents

\chapter{哈哈哈}
\section{初步}
\begin{lstlisting}[caption={生成斐波那契数列},label={code:fib}]
'`斐波那契数列生成函数`
Sub GenerateFibonacci()
    Dim n As Integer
    Dim i As Integer
    Dim fib() As Long
    
    n = InputBox("请输入数列项数:", "输入", 10)
    ReDim fib(n)
    
    fib(0) = 0
    fib(1) = 1
    
    For i = 2 To n - 1
        fib(i) = fib(i - 1) + fib(i - 2)
    Next i
    
    '`输出结果`
    MsgBox "前" & n & "项斐波那契数列:" & vbCrLf & Join(fib, ", ")
End Sub
    
\end{lstlisting}
\end{document}

查看更多

关注者
0
被浏览
264
2 个回答
Sagittarius Rover
Sagittarius Rover 2025-04-09
我要成为Typst糕手/(ㄒoㄒ)/~~

你的代码这么长(足足有116行),你觉得他是最小工作示例吗?

  • 如果你注释你的代码块的内容,问题仍然存在,这说明代码块内容可以简化为Hello, World!,缩短20行
  • 这说明与lisitngs宏包无关,同时再把你有关\lstset设置全删了,缩短50行
  • 删到最终你会发现,连下面的例子都报错:
\documentclass{ctexbook}
\usepackage{geometry}
\ctexset{
    chapter = {
        name = {\S},   % 将"第X章"改为"§ X"
        number = \arabic{chapter},    % 阿拉伯数字编号
        format = \songti\large\bfseries\centering, % 标题格式
        beforeskip = 2.5ex,          % 标题前间距
        afterskip = 2.5ex,           % 标题后间距

      }
 }

\begin{document}

\chapter{哈哈哈}
\section{初步}
Hello, World!

\end{document}

为什么要不负责任地把大段的代码贴上来增加别人的阅读量

答案你也知道了... 第一个问题是\ctexset内不能有空行...

LaTeX不是python,不能想空行就空行,每一个空格,每一个~甚至注释符号%都有其作用,必须每一步都谨小慎微。

希望下次不要再看到100+行的最大工作示例。

删去空行之后,第二个问题是

\chapter{哈哈哈}
Not allowed in LR mode.

从原来的代码再次删,不难发现,这段代码一加就报错:

\renewcommand{\contentsname}{%
  \begin{center}
    \normalfont\songti\bfseries 文章目录
  \end{center}
}

这又是为什么呢?原因就是Not allowed in LR mode.....

附第二份MWE:

\documentclass{ctexbook}
\usepackage{zhlipsum}
\usepackage{titletoc}
\usepackage{titlesec}
\usepackage{geometry}
\usepackage{fontspec}
\geometry{a4paper,centering,scale=0.9}
\renewcommand{\contentsname}{%
  \begin{center}
    \normalfont\songti\bfseries 文章目录
  \end{center}
}

\begin{document}

\tableofcontents

\chapter{哈哈哈}

\section{初步}

\end{document}

理论上提取MWE的操作不需要任何LaTeX技能,甚至来个小学生不断二分编译都能提取出来....只是因为大家的代码太长....都懒....

这些都是哪里学的....请使用@u79794 老师提供的方法....

你显然应该每加一个设置就编译,如果报错找问题,没报错再进行下一个配置。你一开始面临的代码存在多处问题,这些问题互相影响,让你的代码很难debug....

Skyrmion
Skyrmion 2025-04-09
Looking forward to my Ph.D. offer...

在给你保留原汁原味的情况下,给你通过编译了,下次提供 MWE 不要搞这么长

\documentclass[fontset = fandol]{ctexbook}
\usepackage{zhlipsum}
\usepackage{titletoc}
\usepackage{titlesec}
\usepackage{geometry}
\usepackage{xcolor}
\usepackage{pagecolor} 
\usepackage{layout}
\usepackage{chemfig,subcaption,graphicx,float}
\usepackage{listings}
\definecolor{background}{RGB}{215, 247, 250}
\definecolor{藏花红}{RGB}{236,45,122}
\definecolor{石绿}{RGB}{87,195,194}
\geometry{a4paper,centering,scale=0.9}
%自定义“目录名称”
\renewcommand{\contentsname}{\hfill\songti\bfseries\LARGE 文章目录 \hfill
}

\newfontfamily\codefont{Times New Roman}


\setcounter{chapter}{-1} % 初始化为-1,使第一个章节显示

\ctexset{
  chapter = {
    name = {\S},   % 将"第X章"改为"§ X"
    number = \arabic{chapter},    % 阿拉伯数字编号
    format = \songti\large\bfseries\centering, % 标题格式
    beforeskip = 2.5ex,          % 标题前间距
    afterskip = 2.5ex,           % 标题后间距
  }
}
%  针对章(chapter)的目录格式
\titlecontents{chapter}[0pt]                     % 作用对象:章
    {\songti\bfseries}        % 全局格式:间距+右对齐+粗体
    {\thecontentslabel} % 带编号格式
    {}                                           % 无编号格式(空)
    {\titlerule*[8pt]{.}\contentspage}           % 页码引导符+页码

\titleformat{\section}[frame]
{\color{藏花红}}
{\centering
\footnotesize
\enspace 节 \thesection\enspace}
{8pt}
{\bfseries\filcenter\songti}
[\vspace{-10pt}]


% 代码排版配置
% 自定义VBA语法高亮
\lstdefinelanguage{VBA}{
    morekeywords={Sub, End, Dim, As, Set, Range, Worksheet, MsgBox, 
        If, Then, Else, For, Next, Do, While, Loop, Integer, String},
    sensitive=true,
    morecomment=[l]{'},       % 单行注释
    morestring=[b]{"},        % 字符串定义
    keywordstyle=\codefont\color{blue},
    stringstyle=\codefont\color{red},
    basicstyle=\codefont\small,
    keepspaces=true,
    numbers=left,
    % 边距控制
    xleftmargin=2em,                     % 左边界距
    xrightmargin=2em,                     % 右边界距
    framexleftmargin=1em,                % 框线左间距
    framexrightmargin=1em,               % 框线右间距
    columns=fullflexible
}
\lstset{
    language=VBA,
    backgroundcolor=\color{gray!10},
    escapeinside=``,           % 中文注释处理
}

\begin{document}
\title{XVBA教程}
\author{吕旋延}
\date{\today}
\maketitle

\tableofcontents

\chapter{哈哈哈}

\section{初步}
\begin{lstlisting}[caption={生成斐波那契数列},label={code:fib}]
'`斐波那契数列生成函数`
Sub GenerateFibonacci()
    Dim n As Integer
    Dim i As Integer
    Dim fib() As Long
    
    n = InputBox("请输入数列项数:", "输入", 10)
    ReDim fib(n)
    
    fib(0) = 0
    fib(1) = 1
    
    For i = 2 To n - 1
        fib(i) = fib(i - 1) + fib(i - 2)
    Next i
    
    '`输出结果`
    MsgBox "前" & n & "项斐波那契数列:" & vbCrLf & Join(fib, ", ")
End Sub
    
\end{lstlisting}
\end{document}

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览