这是节标题的自定义
\titleformat{\section}[frame]
{\color{藏花红}}
{\centering\footnotesize\enspace 节 \thesection\enspace}
{8pt}
{\bfseries\filcenter\songti}
[\vspace{-10pt}]
这是对lstlisting
环境的控制
% 代码排版配置
% 自定义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[HTML]{0184bc},
stringstyle=\codefont\color[HTML]{41a977},
basicstyle=\codefont\small,
keepspaces=true,
numbers=left,
% 边距控制
xleftmargin=2em, % 左边界距
xrightmargin=2em, % 右边界距
framexleftmargin=1em, % 框线左间距
framexrightmargin=1em, % 框线右间距
framextopmargin=1em, % 上边距(边框到代码)
framexbottommargin=1em, % 下边距(边框到代码)
columns=fullflexible %非等宽
}
% 调整代码框的左右边距和宽度
\lstset{
language=VBA,
frame=single,
linewidth=\dimexpr\textwidth + 2em, % 总宽度减去左右边框间距
xleftmargin=2em, % 左内容边距
xrightmargin=2em, % 右内容边距
framexleftmargin=1em, % 左边框到内容的间距
framexrightmargin=1em, % 右边框到内容的间距
numbersep=-1.5em, % 行号位置调整
escapeinside=`` % 中文注释处理
最小工作示例
\documentclass[UTF8]{ctexbook}
\usepackage{zhlipsum}
\usepackage{geometry}
\usepackage{xcolor}
\usepackage{pagecolor}
\usepackage{layout}
\usepackage{chemfig,subcaption,graphicx,float}
\usepackage{listings}
\usepackage{titletoc}
\usepackage{titlesec}
\usepackage{fontspec}
\definecolor{藏花红}{RGB}{236,45,122}
\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=\color[HTML]{0184bc},
stringstyle=\color[HTML]{41a977},
basicstyle=\small,
keepspaces=true,
numbers=left,
% 边距控制
xleftmargin=2em, % 左边界距
xrightmargin=2em, % 右边界距
framexleftmargin=1em, % 框线左间距
framexrightmargin=1em, % 框线右间距
framextopmargin=1em, % 上边距(边框到代码)
framexbottommargin=1em, % 下边距(边框到代码)
columns=fullflexible %非等宽
}
% 调整代码框的左右边距和宽度
\lstset{
language=VBA,
frame=single,
linewidth=\dimexpr\textwidth + 2em, % 总宽度减去左右边框间距
xleftmargin=2em, % 左内容边距
xrightmargin=2em, % 右内容边距
framexleftmargin=1em, % 左边框到内容的间距
framexrightmargin=1em, % 右边框到内容的间距
numbersep=-1.5em, % 行号位置调整
escapeinside=`` % 中文注释处理
}
\begin{document}
\section{初步}
\begin{lstlisting}[caption={生成斐波那契数列},label={code:fib}]
'斐波那契数列生成函数
Sub GenerateFibonacci()
\end{lstlisting}
\end{document}
可以试试这组参数
xleftmargin=.35em,%
xrightmargin=.35em,%
geometry
宏包不修改左右页面相对距离以及指定文档类的oneside
选项的前提下的(如果修改了,这组参数也要做相应修改):\documentclass[oneside]{ctexbook}
\usepackage{zhlipsum}
\usepackage[showframe]{geometry}
\usepackage{xcolor}
\usepackage{listings}
\usepackage{titlesec}
\titleformat*{\section}{\makebox[\textwidth][c]}
\titleformat{\section}[frame]
{\color{magenta}}
{\centering\footnotesize\enspace 节 \thesection\enspace}
{8pt}
{\bfseries\filcenter\songti}
[\vspace{-10pt}]
\usepackage{listings}
\usepackage{xcolor}
\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=\color[HTML]{0184bc},
stringstyle=\color[HTML]{41a977},
basicstyle=\small\ttfamily,
keepspaces=true,
numbers=left,
columns=fullflexible,
xleftmargin=.35em,%
xrightmargin=.35em,%
}
\lstset{
language=VBA,
frame=single,
linewidth=\dimexpr\textwidth\relax,
escapeinside=``
}
\begin{document}
\section{初步}
\begin{lstlisting}[caption={生成斐波那契数列},label={code:fib}]
'To generate the Fib Sequence
Sub GenerateFibonacci()
\end{lstlisting}
\end{document}
\documentclass[UTF8,oneside]{ctexbook}
\usepackage{zhlipsum}
\usepackage{geometry}
\usepackage{xcolor}
\usepackage{pagecolor}
\usepackage{layout}
\usepackage{chemfig,subcaption,graphicx,float}
\usepackage{listings}
\usepackage{titletoc}
\usepackage{titlesec}
\usepackage{fontspec}
\definecolor{藏花红}{RGB}{236,45,122}
% 强制框架宽度为 \textwidth
\titleformat*{\section}{\makebox[\textwidth][c]}
\titleformat{\section}[frame]
{\color{藏花红}}
{\centering\footnotesize\enspace 节 \thesection\enspace}
{8pt}
{\bfseries\filcenter\songti}
[\vspace{-10pt}]
% 代码排版配置
% 自定义VBA语法高亮
\usepackage{listings}
\usepackage{xcolor}
% 定义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=\color[HTML]{0184bc},
stringstyle=\color[HTML]{41a977},
basicstyle=\small\ttfamily, % 等宽字体
keepspaces=true,
numbers=left,
%framexleftmargin=1em, % 左边框到代码内容的距离
% framexrightmargin=1.5em, % 右边框到代码内容的距离
% xleftmargin=2em, % 代码内容左缩进(边框内侧)
%xrightmargin=2em, % 代码内容右缩进(边框内侧)
columns=fullflexible % 非等宽对齐
}
% 全局设置:代码框总宽度 = \textwidth
\lstset{
language=VBA,
frame=single,
linewidth=\dimexpr\textwidth \relax, % 内容宽度 = 总宽度 - (左+右)边框间距
escapeinside=`` % 中文注释处理
}
\begin{document}
\section{初步}
\begin{lstlisting}[caption={生成斐波那契数列},label={code:fib}]
'斐波那契数列生成函数
Sub GenerateFibonacci()
\end{lstlisting}
\end{document}
linewidth指文本宽度,默认值\linewidth
那么\linewidth 是什么呢
在LaTeX中,\linewidth 是一个动态的长度参数,表示当前环境下的可用行宽度。它的值会根据所在的环境自动调整,使得内容能够自适应不同的布局。以下是关键点总结:
动态特性:
\linewidth 的值在进入不同环境(如minipage、itemize、multicol等)时会自动更新,退出环境后恢复原值。
例如,在 minipage{0.5\textwidth} 内部,\linewidth 会变为 0.5\textwidth,方便内容自动适应容器宽度。
对比其他宽度参数:
\textwidth:整个页面的文本区域宽度(固定值,由文档类和页边距决定)。
\columnwidth:在多栏布局中单栏的宽度(与\linewidth在单栏中通常相等)。
\hsize:底层TeX参数,一般不建议直接修改。
常见使用场景:
图片插入:\includegraphics[width=\linewidth]{...} 让图片宽度适配当前环境。
表格或浮动体:设置表格或浮动体宽度为当前行宽,增强布局灵活性。
嵌套环境:在列表、缩进或自定义盒子中,\linewidth 自动减去缩进或边距。
framexleftmargin=1.5em, 左边框到代码内容的距离,只调整这个,行号位置是不变的区别于下面
左右额外边距(Extra Margins)
参数:
xleftmargin:代码内容左侧的额外边距(从页面左边缘到代码内容的距离)。
xrightmargin:代码内容右侧的额外边距(从代码内容到页面右边缘的距离)。
作用:
这两个参数会在代码内容的 左右两侧添加额外的空白区域,类似于在代码块周围“填充”空白。
此边距会影响 整个代码块(包括边框和行号)。
如果设置了 frame=single(边框),边框会包裹代码内容和这些额外边距。
不要把正文的text放到代码块中
另外,不查文档而是直接问AI是学习LaTeX很不正确的行为。