为什么自定义的 \todonotes \newcommand 会干扰 bibtex?

为什么自定义的 \todonotes \newcommand 会干扰 bibtex?

我正在使用该\todonotes包,并定义了各种自定义注释,按照我从这里得到的答案例如\newcommand{\todoinline}[2][1=]{\todo[inline,#1]{#2}}(现在找不到了)。

当我两年前最后一次密集使用它时,一切都运行良好,但现在我遇到了两个问题:

  • 它会引发错误(但仍然有效):

     Package xkeyval Error: `1' undefined in families `todonotes'. \todoinline{Test inline}
    
  • 它打破了我的书目,我只得到

    Citation `McLorem2022' on page 2 undefined
    

    每次引用都有错误。

如何\todonotes在不破坏 bibtex 的情况下使用自定义?

如果使用它\todo[inline]{something}而不是我的自定义命令,一切都会完美地运行,但我想在自动完成功能中对它进行简写,并对不同的注释进行一些颜色编码。

当生成 MWE(见下文)时,它也可以工作(除了错误),但是对于真实文件,我可以通过替换来重现 bibtex 失败/工作,\todo[inline]{something}\todoinline{something}我绞尽脑汁想找出是什么原因造成的。

file.tex 中,我添加了所有其他可能的原因:

\documentclass[]{article}

\usepackage{graphicx} 
\usepackage{booktabs}
\usepackage{todonotes}
\usepackage{mhchem}
\usepackage{natbib}

\newcommand{\todogreen}[2][1=]{\todo[color=green,#1]{#2}}
\newcommand{\todored}[2][1=]{\todo[color=red,#1]{#2}}
\newcommand{\todoblue}[2][1=]{\todo[inline, color=cyan,#1]{#2}}
\newcommand{\todoinline}[2][1=]{\todo[inline,#1]{#2}}

\title{My cool article}
\author{Me}
\begin{document}
\maketitle
\begin{abstract}
Something important
\end{abstract}
\section{Main text}
"Lorem ipsum" \citep{McLorem2022}. Isotopes: \ce{^{18}O} and \ce{^{2}H}.
\todoinline{Test inline}
\todored{Test red}
\todogreen{Test green}
\todoblue{Test blue}
\begin{figure}
    \centering
    \includegraphics[width=1\linewidth]{testimage.png}
    \caption{Some image}
    \todo[inline]{Should be improved}
    \label{fig:someimage}
\end{figure}
See also Fig. \ref{fig:someimage}!
\begin{table}
    \begin{tabular}{l p{0.1\textwidth} p{0.1\textwidth}}
        \toprule
        A & B  \\
        \midrule
        1 & 2 \\
        4 & 4 $\dagger$ \\
        \bottomrule
    \end{tabular}
    $\dagger$ some hint
    \caption{Simple table}
    \label{table:simple_table}
\end{table}
\section*{References}
\bibliographystyle{apalike} 
\bibliography{mybib.bib}
\end{document}

mybib.bib:

% Encoding: UTF-8

@Article{McLorem2022,
    author  = {Mc Lorem, Ipsum},
    journal = {Invented Words},
    title   = {A novel way to invent silly words},
    year    = {2022},
}

@Comment{jabref-meta: databaseType:bibtex;}

答案1

自定义 todonotes 定义中的可选参数似乎未使用。因此,您可以简化定义,如下所示:

\newcommand{\todogreen}[1]{\todo[color=green]{#1}}
\newcommand{\todored}[1]{\todo[color=red]{#1}}
\newcommand{\todoblue}[1]{\todo[inline, color=cyan]{#1}}
\newcommand{\todoinline}[1]{\todo[inline]{#1}}

完整 MWE:

\documentclass[]{article}

\usepackage{graphicx} 
\usepackage{booktabs}
\usepackage{todonotes}
\usepackage{mhchem}
\usepackage{natbib}

\newcommand{\todogreen}[1]{\todo[color=green]{#1}}
\newcommand{\todored}[1]{\todo[color=red]{#1}}
\newcommand{\todoblue}[1]{\todo[inline, color=cyan]{#1}}
\newcommand{\todoinline}[1]{\todo[inline]{#1}}

\title{My cool article}
\author{Me}
\begin{document}
\maketitle
\begin{abstract}
Something important
\end{abstract}
\section{Main text}
"Lorem ipsum" \citep{McLorem2022}. Isotopes: \ce{^{18}O} and \ce{^{2}H}.
\todoinline{Test inline}
\todored{Test red}
\todogreen{Test green}
\todoblue{Test blue}
\begin{figure}
    \centering
    \includegraphics[width=1\linewidth]{example-image}
    \caption{Some image}
    \todo[inline]{Should be improved}
    \label{fig:someimage}
\end{figure}
See also Fig. \ref{fig:someimage}!
\begin{table}
    \begin{tabular}{l p{0.1\textwidth} p{0.1\textwidth}}
        \toprule
        A & B  \\
        \midrule
        1 & 2 \\
        4 & 4 $\dagger$ \\
        \bottomrule
    \end{tabular}
    $\dagger$ some hint
    \caption{Simple table}
    \label{table:simple_table}
\end{table}
\bibliographystyle{apalike} 
\bibliography{todobib.bib}
\end{document}

结果:

在此处输入图片描述

根据OP 的评论这些重新定义也解决了原来的问题。

相关内容