Skip to content

add: 新增硕士盲审封面,可以一键替换盲审封面。 - #93

Merged
mengchaoheng merged 2 commits into
mengchaoheng:masterfrom
adi-lee:more_cover
Jan 26, 2026
Merged

mengchaoheng merged 2 commits into
mengchaoheng:masterfrom
adi-lee:more_cover

Conversation

@adi-lee

@adi-lee adi-lee commented Apr 15, 2025

Copy link
Copy Markdown
Contributor

add: 新增硕士盲审封面,可以一键替换盲审封面。
实现参考:主分支的正式封面
提交理由:
在提交盲审时,有单独的封面,如果想要替换成盲审封面目前有两种办法:

  1. 修改cls文件中的pdf命名
  2. 替换thesis_cover.pdf,这也会导致使用正式封面还要重新替换

@mengchaoheng

Copy link
Copy Markdown
Owner

感谢推送,抱着谨慎的态度,我需要逐行检查才能合并。

@mengchaoheng

Copy link
Copy Markdown
Owner

@adi-lee 同学还在线吗?可以继续处理吗?抱歉我忘了这个没合并,当时觉得没搞清楚,过后就忘了

@adi-lee

adi-lee commented Jan 26, 2026 via email

Copy link
Copy Markdown
Contributor Author

@mengchaoheng

Copy link
Copy Markdown
Owner

如果是留着给大家取消注释使用,那就保留注释代码,注意一定要默认设置是良好运行的,若无必要的注释可以删除后重新提交。

@adi-lee

adi-lee commented Jan 26, 2026

Copy link
Copy Markdown
Contributor Author

如果是留着给大家取消注释使用,那就保留注释代码,注意一定要默认设置是良好运行的,若无必要的注释可以删除后重新提交。

默认仍是主分支实现,需要替换盲审封面时,取消注释使用

Comment thread scutthesis.cls Outdated
@mengchaoheng

Copy link
Copy Markdown
Owner

我问了gpt,我好像读懂了:

这段代码确实存在语法错误,并且逻辑结构不够清晰,有很大的简化空间。
以下是具体的问题分析和三种不同程度的优化方案。
❌ 存在的问题
 * 致命错误:缺少结束符 \fi
   TeX 的条件判断结构必须闭合。你的代码以 \else 结尾,后面没有闭合,会导致编译报错(File ended while scanning use of ...)。
   * 因为你用了一个嵌套的 \if ... \else \if ...,所以最后必须有两个 \fi 来闭合。
 * 代码冗余
   注释掉的废弃代码太多,干扰阅读。
 * 参数细节
   pages={1-5,{},7-8} 中间的 {} 会插入一个空白页。如果这是为了双面打印凑页码(比如让第 7 页出现在奇数页),那是对的;如果是为了跳过第 6 页,应该直接写 pages={1-5,7-8}。
✅ 方案一:修复并清理(推荐)
这是最稳妥的改法,修复了语法错误,保留了原有的优先级逻辑(即:如果 pdfcover 为真,则优先用正式封面;否则再检查是否是盲审)。
\ifpdfcover
  % --- 情况1:正式封面 (包含空白页处理) ---
  \includepdf[pages={1-5,{},7-8}]{cover_file/thesis_cover.pdf}
\else
  \ifblindpdfcover
    % --- 情况2:盲审封面 ---
    \includepdf[pages={1}]{cover_file/blind_cover.pdf}
  \else
    % --- 情况3:既不是PDF封面也不是盲审 (这里通常放代码生成的默认封面) ---
    % \maketitle 
    % 或者留空
  \fi
\fi

⚡ 方案二:逻辑扁平化(更易读)
如果你确定 pdfcover(正式封面)和 blindpdfcover(盲审封面)这两个开关绝不会同时开启,或者你希望代码看起来更整洁,可以使用 \if ... \fi 并列结构。
% 处理正式封面
\ifpdfcover
  \includepdf[pages={1-5,{},7-8}]{cover_file/thesis_cover.pdf}
\fi

% 处理盲审封面 (仅在非正式封面模式下执行,或者假设两者互斥)
\ifblindpdfcover
  \ifpdfcover \else % 确保没有冲突(可选)
     \includepdf[pages={1}]{cover_file/blind_cover.pdf}
  \fi
\fi

🔧 方案三:高级简化(宏定义法)
如果你的 cls 文件很长,为了保持正文整洁,可以把文件名和页码定义成宏,最后只写一行执行代码。
% 1. 定义默认值
\def\my@cover@file{}
\def\my@cover@pages{}

% 2. 根据条件赋值
\ifpdfcover
  \def\my@cover@file{cover_file/thesis_cover.pdf}
  \def\my@cover@pages{1-5,{},7-8}
\else
  \ifblindpdfcover
    \def\my@cover@file{cover_file/blind_cover.pdf}
    \def\my@cover@pages{1}
  \fi
\fi

% 3. 执行 (只有当文件名不为空时才执行)
\ifx\my@cover@file\empty
  % 这里可以放备用的 LaTeX 源码封面生成逻辑
\else
  \includepdf[pages={\my@cover@pages}]{\my@cover@file}
\fi

💡 关键提示
 * 依赖包:请确保你的 .cls 文件头部已经加载了 pdfpages 包:
   \RequirePackage{pdfpages}

 * 路径问题:cover_file/ 是相对路径。确保用户编译 .tex 主文件时,文件夹下确实有 cover_file 这个目录,否则会报错找不到文件。
 * 空白页:再次确认 pages={1-5,{},7-8} 中的 {} 是否是你刻意为之(用于插入一张白纸)。如果不需要白纸,请改为 pages={1-5,7-8}。
建议直接复制【方案一】的代码替换你原来那段。
Would you like me to explain how to automatically detect if the file exists before trying to include it, to avoid compilation errors?


可以的,这是非常标准且规范的用法。
这种通过 \documentclass 的选项(Options)来控制文档行为(比如切换封面)是 LaTeX 模板开发的最佳实践。
为了让你写在 .tex 文件里的这一行代码生效,你的 .cls 文件里必须包含以下3 个步骤的定义。请检查你的 .cls 文件头部是否已经写好了这些内容:
1. .cls 文件必需的定义(后端支持)
在 .cls 文件的开头部分(通常在 \LoadClass 之前或之后),需要有对应的布尔变量定义和选项声明:
% --- 1. 定义布尔开关 (默认设为 false) ---
\newif\ifpdfcover \pdfcoverfalse
\newif\ifblindpdfcover \blindpdfcoverfalse

% --- 2. 声明选项 (当用户传入参数时,将开关设为 true) ---
\DeclareOption{pdfcover}{\pdfcovertrue}
\DeclareOption{blindpdfcover}{\blindpdfcovertrue}

% (处理其他可能的选项,例如 unicode, master 等)
\DeclareOption{unicode}{...} 
\DeclareOption{master}{...}

% --- 3. 处理所有选项 ---
\ProcessOptions\relax

原理解释:
 * 当你写 \documentclass[pdfcover]{scutthesis} 时,LaTeX 会触发 \DeclareOption{pdfcover} 里的代码,也就是执行 \pdfcovertrue。
 * 随后在你之前展示的代码逻辑中,\ifpdfcover 就会判定为真,从而插入正式封面。
2. 逻辑优先级(防呆设计)
按照我之前给你的方案一(嵌套 if-else),你的逻辑是非常安全的。
\ifpdfcover
    % 正式封面
\else
    \ifblindpdfcover
        % 盲审封面
    \else
        % 默认动作
    \fi
\fi

如果用户手误写了:
\documentclass[pdfcover, blindpdfcover]{scutthesis} (两个都写了)
结果:
由于 \ifpdfcover 在最外层,代码会优先生成正式封面,忽略盲审封面。这是一种很好的容错设计,避免了同时输出两份封面的尴尬。
3. 给用户的建议(前端用法)
你给出的两种调用方式完全没问题。为了让模板用户(学生)用起来更舒服,你可以保留这种注释风格,让他们二选一取消注释即可:
%% === 封面选择 (请二选一,或都不选使用默认生成的封面) ===

%% 选项 A: 盲审阶段 (隐藏作者信息)
% \documentclass[unicode,master,blindpdfcover]{scutthesis}

%% 选项 B: 最终提交 (插入 PDF 正式封面)
\documentclass[unicode,master,pdfcover]{scutthesis}

%% 选项 C: 撰写阶段 (不加任何参数,使用 LaTeX 代码生成的草稿封面)
% \documentclass[unicode,master]{scutthesis}

总结: 你的调用方式是正确的,只要确保 .cls 里面有 \DeclareOption 和 \ProcessOptions 与之配合即可。
需不需要我帮你写一下 unicode 或 master 这类选项通常是如何定义的?

@mengchaoheng

Copy link
Copy Markdown
Owner

所以实际上想写在cls 文件的是:

\ifpdfcover
    % 正式封面
\else
    \ifblindpdfcover
        % 盲审封面
    \else
        % 默认动作
    \fi
\fi

然后tex文件前端调用:

%% === 封面选择 ===

%% 选项 A: 盲审阶段 (隐藏作者信息)
% \documentclass[unicode,master,blindpdfcover]{scutthesis}

%% 选项 B: 最终提交 (插入 PDF 正式封面)
\documentclass[unicode,master,pdfcover]{scutthesis}

%% 选项 C: 撰写阶段 (不加任何参数,使用 LaTeX 代码生成的草稿封面)
% \documentclass[unicode,master]{scutthesis}

@adi-lee

adi-lee commented Jan 26, 2026

Copy link
Copy Markdown
Contributor Author

我问了gpt,我好像读懂了:

这段代码确实存在语法错误,并且逻辑结构不够清晰,有很大的简化空间。
以下是具体的问题分析和三种不同程度的优化方案。
❌ 存在的问题
 * 致命错误:缺少结束符 \fi
   TeX 的条件判断结构必须闭合。你的代码以 \else 结尾,后面没有闭合,会导致编译报错(File ended while scanning use of ...)。
   * 因为你用了一个嵌套的 \if ... \else \if ...,所以最后必须有两个 \fi 来闭合。
 * 代码冗余
   注释掉的废弃代码太多,干扰阅读。
 * 参数细节
   pages={1-5,{},7-8} 中间的 {} 会插入一个空白页。如果这是为了双面打印凑页码(比如让第 7 页出现在奇数页),那是对的;如果是为了跳过第 6 页,应该直接写 pages={1-5,7-8}。
✅ 方案一:修复并清理(推荐)
这是最稳妥的改法,修复了语法错误,保留了原有的优先级逻辑(即:如果 pdfcover 为真,则优先用正式封面;否则再检查是否是盲审)。
\ifpdfcover
  % --- 情况1:正式封面 (包含空白页处理) ---
  \includepdf[pages={1-5,{},7-8}]{cover_file/thesis_cover.pdf}
\else
  \ifblindpdfcover
    % --- 情况2:盲审封面 ---
    \includepdf[pages={1}]{cover_file/blind_cover.pdf}
  \else
    % --- 情况3:既不是PDF封面也不是盲审 (这里通常放代码生成的默认封面) ---
    % \maketitle 
    % 或者留空
  \fi
\fi

⚡ 方案二:逻辑扁平化(更易读)
如果你确定 pdfcover(正式封面)和 blindpdfcover(盲审封面)这两个开关绝不会同时开启,或者你希望代码看起来更整洁,可以使用 \if ... \fi 并列结构。
% 处理正式封面
\ifpdfcover
  \includepdf[pages={1-5,{},7-8}]{cover_file/thesis_cover.pdf}
\fi

% 处理盲审封面 (仅在非正式封面模式下执行,或者假设两者互斥)
\ifblindpdfcover
  \ifpdfcover \else % 确保没有冲突(可选)
     \includepdf[pages={1}]{cover_file/blind_cover.pdf}
  \fi
\fi

🔧 方案三:高级简化(宏定义法)
如果你的 cls 文件很长,为了保持正文整洁,可以把文件名和页码定义成宏,最后只写一行执行代码。
% 1. 定义默认值
\def\my@cover@file{}
\def\my@cover@pages{}

% 2. 根据条件赋值
\ifpdfcover
  \def\my@cover@file{cover_file/thesis_cover.pdf}
  \def\my@cover@pages{1-5,{},7-8}
\else
  \ifblindpdfcover
    \def\my@cover@file{cover_file/blind_cover.pdf}
    \def\my@cover@pages{1}
  \fi
\fi

% 3. 执行 (只有当文件名不为空时才执行)
\ifx\my@cover@file\empty
  % 这里可以放备用的 LaTeX 源码封面生成逻辑
\else
  \includepdf[pages={\my@cover@pages}]{\my@cover@file}
\fi

💡 关键提示
 * 依赖包:请确保你的 .cls 文件头部已经加载了 pdfpages 包:
   \RequirePackage{pdfpages}

 * 路径问题:cover_file/ 是相对路径。确保用户编译 .tex 主文件时,文件夹下确实有 cover_file 这个目录,否则会报错找不到文件。
 * 空白页:再次确认 pages={1-5,{},7-8} 中的 {} 是否是你刻意为之(用于插入一张白纸)。如果不需要白纸,请改为 pages={1-5,7-8}。
建议直接复制【方案一】的代码替换你原来那段。
Would you like me to explain how to automatically detect if the file exists before trying to include it, to avoid compilation errors?

可以的,这是非常标准且规范的用法。
这种通过 \documentclass 的选项(Options)来控制文档行为(比如切换封面)是 LaTeX 模板开发的最佳实践。
为了让你写在 .tex 文件里的这一行代码生效,你的 .cls 文件里必须包含以下3 个步骤的定义。请检查你的 .cls 文件头部是否已经写好了这些内容:
1. .cls 文件必需的定义(后端支持)
在 .cls 文件的开头部分(通常在 \LoadClass 之前或之后),需要有对应的布尔变量定义和选项声明:
% --- 1. 定义布尔开关 (默认设为 false) ---
\newif\ifpdfcover \pdfcoverfalse
\newif\ifblindpdfcover \blindpdfcoverfalse

% --- 2. 声明选项 (当用户传入参数时,将开关设为 true) ---
\DeclareOption{pdfcover}{\pdfcovertrue}
\DeclareOption{blindpdfcover}{\blindpdfcovertrue}

% (处理其他可能的选项,例如 unicode, master 等)
\DeclareOption{unicode}{...} 
\DeclareOption{master}{...}

% --- 3. 处理所有选项 ---
\ProcessOptions\relax

原理解释:
 * 当你写 \documentclass[pdfcover]{scutthesis} 时,LaTeX 会触发 \DeclareOption{pdfcover} 里的代码,也就是执行 \pdfcovertrue。
 * 随后在你之前展示的代码逻辑中,\ifpdfcover 就会判定为真,从而插入正式封面。
2. 逻辑优先级(防呆设计)
按照我之前给你的方案一(嵌套 if-else),你的逻辑是非常安全的。
\ifpdfcover
    % 正式封面
\else
    \ifblindpdfcover
        % 盲审封面
    \else
        % 默认动作
    \fi
\fi

如果用户手误写了:
\documentclass[pdfcover, blindpdfcover]{scutthesis} (两个都写了)
结果:
由于 \ifpdfcover 在最外层,代码会优先生成正式封面,忽略盲审封面。这是一种很好的容错设计,避免了同时输出两份封面的尴尬。
3. 给用户的建议(前端用法)
你给出的两种调用方式完全没问题。为了让模板用户(学生)用起来更舒服,你可以保留这种注释风格,让他们二选一取消注释即可:
%% === 封面选择 (请二选一,或都不选使用默认生成的封面) ===

%% 选项 A: 盲审阶段 (隐藏作者信息)
% \documentclass[unicode,master,blindpdfcover]{scutthesis}

%% 选项 B: 最终提交 (插入 PDF 正式封面)
\documentclass[unicode,master,pdfcover]{scutthesis}

%% 选项 C: 撰写阶段 (不加任何参数,使用 LaTeX 代码生成的草稿封面)
% \documentclass[unicode,master]{scutthesis}

总结: 你的调用方式是正确的,只要确保 .cls 里面有 \DeclareOption 和 \ProcessOptions 与之配合即可。
需不需要我帮你写一下 unicode 或 master 这类选项通常是如何定义的?

时间有点久远了,相关的语法我也忘记了,基于谨慎的态度,还是验证一下,如果你有现成的编译环境,你也可以操作下

@mengchaoheng
mengchaoheng merged commit dcf0579 into mengchaoheng:master Jan 26, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants