【保姆级教程】3行代码解决BIThesis模板algorithmic环境字号灾难
你是否也曾在使用BIThesis模板撰写论文时,遭遇算法伪代码字号与正文严重脱节的尴尬?当精心排版的论文中突然出现超大号算法代码块,或小到看不清的函数定义时,不仅影响阅读体验,更可能导致答辩评委对论文专业性的质疑。本文将从问题根源出发,提供3种渐进式解决方案,确保你的算法代码在保持学术规范的同时,实现与正文排版的完美融合。
问题诊断:为什么algorithmic环境字号总是"不听话"?
BIThesis作为北京理工大学非官方LaTeX模板集合,其算法排版模块基于algorithmicx宏包构建。通过分析模板源码(tests/algorithmic/main.tex)发现,默认配置存在两处关键冲突:
% 模板默认配置(存在冲突)
\usepackage{algorithm}
\usepackage{algorithmic}
\renewcommand{\algorithmicrequire}{\textbf{Input:}}
\renewcommand{\algorithmicensure}{\textbf{Output:}}
冲突主要源于:
- 宏包版本差异:CTeX套装与TeX Live 2023+自带的
algorithmicx宏包存在兼容性问题 - 样式重置失效:模板对
algorithm环境的字体设置未正确传递到嵌套的algorithmic环境 - 文档类限制:
bithesis.cls中定义的\normalsize与算法环境默认字号存在2pt偏差
问题复现最小示例
\documentclass{bithesis}
\begin{document}
\section{算法设计}
以下是快速排序算法的实现:
\begin{algorithm}[H]
\caption{快速排序算法}
\begin{algorithmic}[1]
\Function{QuickSort}{$A, p, r$}
\If{$p < r$}
\State $q \gets \Call{Partition}{A, p, r}$
\State \Call{QuickSort}{$A, p, q-1$}
\State \Call{QuickSort}{$A, q+1, r$}
\EndIf
\EndFunction
\end{algorithmic}
\end{algorithm}
\end{document}
编译后会出现两种典型异常:
- 放大模式:算法文本字号比正文大2-3pt,函数名
QuickSort异常突出 - 缩小模式:整个算法块字号缩小至8pt以下,
\State命令标号难以辨认
解决方案:从临时修复到根治方案
方案一:环境局部调整(3行代码应急处理)
当面临紧急交稿时,可在算法环境内部直接设置字体大小。这种方式不影响全局配置,适合单个异常算法块的快速修复:
\begin{algorithm}[H]
\caption{快速排序算法}
\small % 关键调整:设置环境内字号为小四号(12pt正文对应10.5pt)
\begin{algorithmic}[1]
\Function{QuickSort}{$A, p, r$}
\If{$p < r$}
\State $q \gets \Call{Partition}{A, p, r}$
\State \Call{QuickSort}{$A, p, q-1$}
\State \Call{QuickSort}{$A, q+1, r$}
\EndIf
\EndFunction
\end{algorithmic}
\normalsize % 恢复正文字号
\end{algorithm}
字号参数对照表(基于BIThesis默认12pt正文): | 命令 | 实际字号 | 适用场景 | |------|----------|----------| | \tiny | 5pt | 脚注级算法注释 | | \scriptsize | 7pt | 多算法并列排版 | | \footnotesize | 9pt | 标准算法块 | | \small | 10.5pt | 复杂算法(含嵌套循环) | | \normalsize | 12pt | 与正文同号(不推荐) |
方案二:全局配置覆盖(一次设置,全文档生效)
对于包含多个算法的论文,推荐在导言区进行全局设置。通过重定义algorithmic环境的字体配置,实现全文档算法字号统一:
% 在导言区(main.tex开头)添加
\usepackage{etoolbox} % 提供环境钩子功能
\AtBeginEnvironment{algorithmic}{\small} % 所有algorithmic环境默认使用\small字号
工作原理:
此方案的优势在于:
- 避免重复劳动,所有算法块自动应用设置
- 支持条件判断,可针对不同章节设置差异化字号
- 不破坏模板原有结构,便于后续模板升级
方案三:深度定制(修改模板底层配置)
对于追求极致排版效果的高级用户,可直接修改BIThesis模板的算法环境定义。通过编辑templates/graduate-thesis/main.tex文件,在\usepackage{algorithmic}之后添加:
% 深度定制算法环境字体
\makeatletter
\renewenvironment{algorithmic}[1][0]{%
\edef\ALG@numberfreq{#1}%
\ALG@beginalgorithmic%
\fontsize{10.5pt}{12.6pt}\selectfont % 精确设置字号和行距
}{%
\ALG@endalgorithmic%
}
\makeatother
参数说明:
10.5pt:字体大小(对应\small字号)12.6pt:行距设置(通常为字号的1.2倍)
⚠️ 注意:修改模板文件前请先备份原文件,建议通过Git进行版本控制,避免模板升级时丢失自定义配置。
进阶技巧:复杂场景的字号适配策略
场景1:算法与代码混合排版
当论文中同时包含伪代码(algorithmic)和实际代码(lstlisting)时,需确保两者字号协调:
% 算法伪代码(使用方案二设置的\small)
\begin{algorithm}[H]
\caption{快速排序伪代码}
\begin{algorithmic}[1]
\Function{QuickSort}{$A, p, r$}
\Comment{伪代码使用\small字号}
\EndFunction
\end{algorithmic}
\end{algorithm}
% 实际代码(手动设置相同字号)
\begin{lstlisting}[language=C, basicstyle=\small\ttfamily]
// C语言实现,保持与伪代码相同字号
void quick_sort(int A[], int p, int r) {
if (p < r) {
int q = partition(A, p, r);
quick_sort(A, p, q-1);
quick_sort(A, q+1, r);
}
}
\end{lstlisting}
场景2:算法中的数学公式适配
算法伪代码中的数学公式可能因字号变化导致与文本对齐问题,建议使用\scriptstyle控制公式大小:
\begin{algorithmic}[1]
\State $T(n) = \begin{cases}
O(1) & \text{if } n = 1, \\
2T(n/2) + O(n) & \text{if } n > 1.
\end{cases}$
% 对复杂公式使用小号数学字体
\State $S = \sum_{i=1}^{\scriptscriptstyle n} x_i^2$
\end{algorithmic}
常见问题排查
Q1:设置后算法标题字号也跟着变化?
A:算法标题由algorithm环境控制,与algorithmic环境独立。如需调整标题字号,可单独设置:
\renewcommand{\algorithmiccaptionfont}{\small\bfseries}
Q2:为什么我的设置在某些章节不生效?
A:检查是否存在局部字号设置覆盖了全局配置。使用\currentfontsize命令诊断当前字号:
\begin{algorithmic}[1]
\State 当前字号: \the\fontdimen6\font % 输出当前字号值,用于调试
\end{algorithmic}
Q3:如何实现算法与正文的平滑过渡?
A:推荐在算法前后添加0.5行间距,并使用[H]选项固定位置:
\begin{algorithm}[H]
\vspace{0.5\baselineskip} % 顶部间距
\caption{带间距的算法示例}
\begin{algorithmic}[1]
\State 算法内容
\end{algorithmic}
\vspace{0.5\baselineskip} % 底部间距
\end{algorithm}
总结与最佳实践
选择合适的解决方案取决于你的具体需求:
- 临时应急:方案一(局部调整)
- 常规使用:方案二(全局配置)
- 模板维护者:方案三(深度定制)
推荐工作流:
通过本文介绍的方法,你已掌握BIThesis模板中算法字号调整的完整解决方案。合理的字号设置不仅能提升论文的视觉舒适度,更能体现研究者对学术规范的严谨态度。建议将本文收藏,以便在论文撰写的关键阶段快速参考。
下期待定:《BIThesis模板中表格与图片跨页排版解决方案》—— 解决学术论文中大型图表的分页难题,敬请关注。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



