在 elsarticle 类文档摘要中使用 todonotes 时出现 LaTeX 编译错误

在 elsarticle 类文档摘要中使用 todonotes 时出现 LaTeX 编译错误

我正在准备使用 LaTeX 中的类进行评论elsarticle。有各种线程需要跟踪,所以我用它todonotes来记录问题,以便我可以继续写作。我发现\todo在抽象环境中使用会导致编译暂停并显示消息

! LaTeX Error: Float(s) lost
Hitting return to proceed gives 
! LaTeX Error: This may be a LaTeX bug.
and the only help offered is 
"Call for help" ... HELP!

在多页文档中,我发现该错误由于没有在句子末尾和下一个句子之间插入空格而扰乱了句子末尾其他待办事项周围的文本。

我可以忽略该类elsarticle而使用准备文本article,但最好还是彻底解决这个问题。鉴于 LaTeX 错误并不乐观,我不知道从哪里开始解决这个问题。欢迎提出建议。我想报告这个问题,以防这个\todo问题影响到其他文档类。

最小工作示例如下:

 \documentclass[review,numbers,authoryear,sort]{elsarticle}
 \usepackage[textwidth=2.3cm, textsize=scriptsize,color=green!40]{todonotes}
 \setlength{\marginparwidth}{1.5cm}  

\listfiles

\begin{document}

\begin{frontmatter}
\title{To catch a bug \ldots }

 \author[mymainaddress]{me}
\ead{my email}
 \address[mymainaddress]{my address}

\begin{abstract}
I'm having a problem with an Elsevier style file.\todo{Get to the point!} 
Maybe someone at Stackexchange can suggest how to get the todo note to appear?
  \end{abstract}

\end{frontmatter}

\section{Introduction} \label{s:intro}
Words to go here \ldots
\end{document}

答案1

环境abstract会立即排版文本并将其保存在一个框中,因此不可能存在类似的浮动\todo

对您的草稿进行如下操作,获得与标准类似的结果。但请记住在提交文档时将所有附加代码与“待办事项”一起删除。

\documentclass[review,numbers,authoryear,sort]{elsarticle}

%%% Do this only for your drafts
\usepackage[textwidth=2.3cm, textsize=scriptsize,color=green!40]{todonotes}
\usepackage{xpatch,environ,ragged2e}

\setlength{\marginparwidth}{4cm}

\RenewEnviron{abstract}{%
  \xdef\theabstracttext{%
    \unexpanded{%
      \def\baselinestretch{1}\noindent\unskip\textbf{Abstract}\par\medskip
      \noindent\unskip\ignorespaces}%
    \unexpanded\expandafter{\BODY}%
  }%
}
\def\theabstracttext{}
\xpatchcmd{\pprintMaketitle}
  {\ifvoid\absbox}
  {\ifx\theabstracttext\empty\else\printtheabstracttext\fi\ifvoid\absbox}
  {}{}
\newcommand{\printtheabstracttext}{{%
  \begin{trivlist}
  \normalfont\normalsize
  \item\relax
  \theabstracttext
  \end{trivlist}
}}
%%% end addition

\begin{document}

\begin{frontmatter}
\title{To catch a bug \ldots }

\author[mymainaddress]{me}
\ead{my email}
\address[mymainaddress]{my address}

\begin{abstract}
I'm having a problem with an Elsevier style file.\todo{Get to the point!} 
Maybe someone at Stackexchange can suggest how to get the todo note to appear?
\end{abstract}

\end{frontmatter}

\section{Introduction} \label{s:intro}
Words to go here \ldots
\end{document}

enter image description here

答案2

除非您想要最终版本中的注释(如果您使用该类,则相当奇怪elsarticle),否则我会做的就是将inline选项添加到命令中\todo,并将obeyFinal选项添加到todonotes包中。 MWE:

\documentclass[]{elsarticle} % add "final" option to hide todo notes
\usepackage[obeyFinal]{todonotes} 
\begin{document}
\begin{frontmatter}
\begin{abstract}
Some \todo[inline]{Get to the point!} text
\end{abstract}
\end{frontmatter}
\end{document}

当然,虽然边注不会影响文本布局,但此 MWE 会拆分段落并增加摘要的高度,但隐藏注释并查看上述 MWE 中的最终布局非常简单,只需final在文档类选项中添加“ ”即可。我认为这在结果和简单性之间取得了良好的平衡,主要是考虑到如果您要提交代码,无论如何您最终都会手动清除与注释相关的任何代码。

答案3

就像另一种解决方案一样。

我倾向于使用fixme这个特殊的原因:todo 不能在任何地方使用。

我使用这个设置:

\usepackage[draft]{fixme}
\fxsetup{
  layout=marginnote,
  marginface=\normalfont\tiny,
  envface=,
  inlineface=,
  innerlayout=noinline,
}

\fxnote{text}正文中

它的代价是\fxnote同一行中的两个注释将排版在一起。这通常没问题,\listoffixmes可用于列出所有注释。

以下是对 OP MWE 的调整:

\documentclass[review,numbers,authoryear,sort]{elsarticle}
%\usepackage[textwidth=2.3cm, textsize=scriptsize,color=green!40]{todonotes}
\setlength{\marginparwidth}{1.5cm}  

\usepackage[draft]{fixme}
\fxsetup{
  layout=marginnote,
  marginface=\normalfont\tiny,
  envface=,
  inlineface=,
  innerlayout=noinline,
}

\listfiles

\begin{document}

\begin{frontmatter}
\title{To catch a bug \ldots }

 \author[mymainaddress]{me}
\ead{my email}
 \address[mymainaddress]{my address}

\begin{abstract}
I'm having a problem with an Elsevier style file.\fxnote{Get to the point!} 
Maybe someone at Stackexchange can suggest how to get the todo note to appear?
  \end{abstract}

\end{frontmatter}

\section{Introduction} \label{s:intro}
Words to go here \ldots
\end{document}

相关内容