包含方括号的书籍和 algorithm2e 章节名称

包含方括号的书籍和 algorithm2e 章节名称

这是一个简单的例子:

\documentclass{book}

\usepackage{algorithm2e}

 
\begin{document}


\chapter{Test [broken]}


\chapter[]{Test [not broken]}
  
\end{document}

这为我产生了:

损坏的部分 没有破损的部分

我在用

  • pdfTeX,版本 3.141592653-2.6-1.40.25(TeX Live 2023)
  • 文档类别:书籍 2022/07/02 v1.4n 标准 LaTeX 文档类别
  • algorithm2e.sty — 算法包,版本 5.2

我觉得这有点像 bug...或者是我做错了什么?

文件中algorithm2e.sty有一部分可能是原因,因为它重新定义了章节命令:

%% redefine chapter so that it adds a vspace in the loa as the original does for lof and lot
% \let\algocf@original@chapter=\chapter%
% \def\chapter{\expandafter\addtocontents{loa}{\protect\addvspace{10\p@}}\algocf@original@chapter}%
%
% bug correction with hyperref submitted by Hubert Meier
\begingroup\expandafter\expandafter\expandafter\endgroup 
\expandafter\ifx\csname @chapter\endcsname\relax\else 
% \let\algocf@original@chapter=\chapter% 
% \def\chapter{\addtocontents{loa}{\protect\addvspace{10\p@}}\algocf@original@chapter}% 
\let\algocf@original@chapter=\@chapter%
\@ifclassloaded{krantz}{%
\def\@chapter[#1][#2]#3{\algocf@original@chapter[#1][#2]{#3}\addtocontents{loa}{\protect\addvspace{10\p@}}}% 
}{%
\def\@chapter[#1]#2{\algocf@original@chapter[#1]{#2}\addtocontents{loa}{\protect\addvspace{10\p@}}}% 
}%
\fi

虽然我有点不确定,因为我不完全明白这里发生了什么......

答案1

它应该是

  • \algocf@original@chapter[{#1}][{#2}]{#3}
    \algocf@original@chapter[{#1}]{#2}

而不是当前的

  • \algocf@original@chapter[#1][#2]{#3}
    \algocf@original@chapter[#1]{#2}

如果中间的参数[...]包含,则将会失败]

我已经邮寄了其中一个软件包维护者克里斯托夫。

\documentclass{book}
\usepackage{algorithm2e}

\makeatletter
\begingroup\expandafter\expandafter\expandafter\endgroup 
\expandafter\ifx\csname @chapter\endcsname\relax\else
\@ifclassloaded{krantz}{%
  \def\@chapter[#1][#2]#3{\algocf@original@chapter[{#1}][{#2}]{#3}\addtocontents{loa}{\protect\addvspace{10\p@}}}% 
}{%
  \def\@chapter[#1]#2{\algocf@original@chapter[{#1}]{#2}\addtocontents{loa}{\protect\addvspace{10\p@}}}% 
}%
\fi
\makeatother

\begin{document}
\chapter{Test [broken]}
\chapter[]{Test [not broken]}
\end{document}

第1章

第2章

答案2

除了square brackets直接给予Chapter title,你还可以通过给予tag,例如,

\documentclass{book}

\usepackage{algorithm2e}

 
\begin{document}

\def\lbrack{[}\def\rbrack{]}

\chapter{Test \lbrack broken\rbrack}


\chapter[]{Test [not broken]}
  
\end{document}

希望这能解决问题。

相关内容