【保姆级教程】3行代码解决BIThesis模板algorithmic环境字号灾难

【保姆级教程】3行代码解决BIThesis模板algorithmic环境字号灾难

【免费下载链接】BIThesis 📖 北京理工大学非官方 LaTeX 模板集合,包含本科、研究生毕业设计模板及更多。🎉 (更多文档请访问 wiki 和 release 中的手册) 【免费下载链接】BIThesis 项目地址: https://gitcode.com/GitHub_Trending/bi/BIThesis

你是否也曾在使用BIThesis模板撰写论文时,遭遇算法伪代码字号与正文严重脱节的尴尬?当精心排版的论文中突然出现超大号算法代码块,或小到看不清的函数定义时,不仅影响阅读体验,更可能导致答辩评委对论文专业性的质疑。本文将从问题根源出发,提供3种渐进式解决方案,确保你的算法代码在保持学术规范的同时,实现与正文排版的完美融合。

问题诊断:为什么algorithmic环境字号总是"不听话"?

BIThesis作为北京理工大学非官方LaTeX模板集合,其算法排版模块基于algorithmicx宏包构建。通过分析模板源码(tests/algorithmic/main.tex)发现,默认配置存在两处关键冲突:

% 模板默认配置(存在冲突)
\usepackage{algorithm}
\usepackage{algorithmic}
\renewcommand{\algorithmicrequire}{\textbf{Input:}}
\renewcommand{\algorithmicensure}{\textbf{Output:}}

冲突主要源于:

  1. 宏包版本差异:CTeX套装与TeX Live 2023+自带的algorithmicx宏包存在兼容性问题
  2. 样式重置失效:模板对algorithm环境的字体设置未正确传递到嵌套的algorithmic环境
  3. 文档类限制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字号

工作原理mermaid

此方案的优势在于:

  • 避免重复劳动,所有算法块自动应用设置
  • 支持条件判断,可针对不同章节设置差异化字号
  • 不破坏模板原有结构,便于后续模板升级

方案三:深度定制(修改模板底层配置)

对于追求极致排版效果的高级用户,可直接修改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}

总结与最佳实践

选择合适的解决方案取决于你的具体需求:

  • 临时应急:方案一(局部调整)
  • 常规使用:方案二(全局配置)
  • 模板维护者:方案三(深度定制)

推荐工作流mermaid

通过本文介绍的方法,你已掌握BIThesis模板中算法字号调整的完整解决方案。合理的字号设置不仅能提升论文的视觉舒适度,更能体现研究者对学术规范的严谨态度。建议将本文收藏,以便在论文撰写的关键阶段快速参考。

下期待定:《BIThesis模板中表格与图片跨页排版解决方案》—— 解决学术论文中大型图表的分页难题,敬请关注。

【免费下载链接】BIThesis 📖 北京理工大学非官方 LaTeX 模板集合,包含本科、研究生毕业设计模板及更多。🎉 (更多文档请访问 wiki 和 release 中的手册) 【免费下载链接】BIThesis 项目地址: https://gitcode.com/GitHub_Trending/bi/BIThesis

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值