\mbox{ } + \makeatletter 导致“LaTeX 错误:缺少 \begin{document}。”错误

\mbox{ } + \makeatletter 导致“LaTeX 错误:缺少 \begin{document}。”错误

我想保留一部分文本和同伴一起细蓝色下划线,例如: 在此处输入图片描述

有时,文本“《礼物》注释“与细蓝色下划线发生在后续页面上。创建文本细蓝色下划线是:

 \makeatletter
\def\enoteheading{\section*{\notesname
  \@mkboth{\MakeUppercase{\notesname}}{\MakeUppercase{\notesname}}}%
  \mbox{}\par\vskip-2.3\baselineskip\noindent\textcolor{midnightblue}{\rule{.5\textwidth}{0.4pt}}\par\vskip\baselineskip}
\makeatother

其中 \notesname 定义为:

\renewcommand{\notesname}{\textcolor{midnightblue}{Notes for ‘\textit{<$title>}’}}

我尝试使用\mbox保持文本细蓝色下划线通过将上面的代码包含在以下页面上\mbox

\mbox{%    % <-- Added
\makeatletter
\def\enoteheading{\section*{\notesname
  \@mkboth{\MakeUppercase{\notesname}}{\MakeUppercase{\notesname}}}%
  \mbox{}\par\vskip-2.3\baselineskip\noindent\textcolor{midnightblue}{\rule{.5\textwidth}{0.4pt}}\par\vskip\baselineskip}
\makeatother
}    % <-- Added

但是,那

LaTeX 错误:缺少 \begin{document}。

在编译时发生。

关于如何保持“《礼物》注释“与同伴一起发短信细蓝色下划线将不胜感激。

谢谢阅读。

MWE 更新2021 年 12 月 17 日中午 12 点:经过一段时间的延迟,我添加了以下代码来演示我被告知不起作用的代码。目前,\mbox{ } 命令已在下面注释掉,以显示执行 \theendnotes 命令时会发生什么。

% !TEX TS-program = Arara 
% arara: pdflatex: { synctex: yes, shell: yes } 
% arara: bibtex
% arara: pdflatex: { synctex: on, shell: yes } 
% arara: pdflatex: { synctex: on, shell: yes } 

\documentclass[12pt,oneside,dvipsnames]{book}   

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}        % fontenc package enables use of Type 1 fonts

\usepackage{endnotes}
\usepackage{lipsum}
\usepackage[dvipsnames]{xcolor}

\definecolor{midnightblue}{RGB}{26,26,112} 

\renewcommand{\notesname}{\textcolor{midnightblue}{Notes for `\textit{The Gift}'}}

%___________________ Define \enoteformat ___________________
\makeatletter
\def\enoteformat{%
  \rightskip\z@ \leftskip\z@ \parindent=1.8em
  \leavevmode{\setbox\z@=\lastbox}\llap{\@Alph\theenmark.\enskip}%
}
\makeatother

%___________________ Define \enoteheading ___________________
% \mbox{%    % <-- IF Added, error occurs
\makeatletter
\def\enoteheading{\section*{\notesname
  \@mkboth{\notesname}{\notesname}}%
  \mbox{}\par\vskip-2.7\baselineskip\noindent\textcolor{midnightblue}{\rule{.5\textwidth}{0.4pt}}\par\vskip\baselineskip}
\makeatother
% }    % <-- IF Added, error occurs

\begin{document}

\noindent

Over millions of years, plant photosynthesis would produce enormous volumes of carbon-rich biomass that then would die and accumulate.\footnote{@\,Ibid. (Henry, 2013)}

\theendnotes                % Print the endnotes

\end{document}

鉴于达莱夫大卫·卡莱尔,我决定尝试不同的解决方案。通过移动细蓝色下划线下方文本《礼物》注释“向上靠近文本因此有望消除文本细蓝色下划线

为此,我调整了上述内容\enoteheading代码\vskip-2.3\vskip-2.7这使得细蓝色下划线 直接地下方文本《礼物》注释“,希望消除页面分离问题,例如:

在此处输入图片描述

我想感谢达莱夫大卫·卡莱尔他们的评论引导我想到另一种解决方案,虽然这不是一个严格的编码解决方案,但希望能够实现预期的结果。

达莱夫大卫·卡莱尔,如果您想提交正式答案作为“解决方案”,我会检查您的“解决方案”,以认可您的评论。

感谢你们对这个问题的帮助。

答案1

您不能\makeatletter在(或任何命令中,它必须在外层使用)中使用。同样,您不能在框或 vskip 或节标题中使用标记,因为标记需要位于外层,这样它们才能迁移到页头,并且垂直空间和节标题需要垂直模式,因此在强制单行 hmode 的情况\mbox下不起作用。\mbox

\enoteheading该框形成一个本地组,因此在使用之前,组末尾的定义将被丢弃。

相关内容