使用 latex 时出现 hyperref 错误:“\Hy@temp 定义中的参数编号非法”

使用 latex 时出现 hyperref 错误:“\Hy@temp 定义中的参数编号非法”

我有一台新笔记本电脑,安装了包含 TeX Live 的 Ubuntu 14.04。在 Ubuntu 12.04 下运行良好的 LaTeX 文件现在\Hy@temp在调用 latex 的每个\citeads命令时都给出错误“定义中的参数编号非法”(但 pdflatex 不会出现)。该文件位于example.texhttp://www.staff.science.uu.nl/~rutte101/Report_recipe.html 是几十年前的 latex 入门书,最近扩展了 bibtex cite 宏,这些宏将文本引用转换为 NASA 天文学文献数据库的 Web 浏览器打开器。这些宏由《天文学与天体物理学》杂志贡献并推荐。这些错误并不严重(用“s”回答会产生正确的结果example.dvi)。

有什么变化吗?该文件中的宏 hyperref有错误吗?citeads

梅威瑟:

\documentclass{article}
\usepackage{natbib}
\usepackage{twoopt}
\usepackage{hyperref}

\makeatletter
\newcommandtwoopt{\citetads}[3][][]{%
  \href{http://adsabs.harvard.edu/abs/#3}{%
    \def\hyper@linkstart##1##2{}%
    \let\hyper@linkend\@empty%
    \citet[#1][#2]{#3}%
  }
}
\makeatother

\begin{document}
  \citetads{1981ApJ...247L..97M}
\end{document}

2019年2月27日:由 linuxss 私下解决

\makeatletter
\protected\def\sppresslink{\def\hyper@linkstart##1##2{}\let\hyper@linkend\@empty}
 \newcommandtwoopt{\citeads}[3][][]{
   \href{http://adsabs.harvard.edu/abs/#3}
        {\sppresslink \citealp[#1][#2]{#3}}}
\makeatother

答案1

以下修复插入\nonstopmode\errorstopmode工作的方式是让 latex 不会在 内的错误处停止\citeads,但这也会使 latex 也不会在引用中的严重错误处停止。我宁愿重新编码上述 MWE 中的宏,以免收到“ Illegal parameter number in definition of \Hy@temp.”警告。所以仍然欢迎帮助!

(抱歉:我不知道如何正确格式化以下内容;stackexchange 输入窗口撤消了换行符和空格,因此我在每行添加了一个换行符)

\makeatletter
 \newcommandtwoopt{\citetads}[3][][]{%
  \nonstopmode%
  \href{http://adsabs.harvard.edu/abs/#3}{\def\hyper@linkstart##1##2{}%
    \let\hyper@linkend\@empty\citet[#1][#2]{#3}}%
  \errorstopmode}
\makeatother

答案2

当我编译你的 MWE 时,我得到以下结果作为输出(从 iso 映像安装了 TeXLive 2013 的 Windows 机器): 在此处输入图片描述 在此处输入图片描述

现在,我觉得 TeXLive 的安装有问题。如果你是从终端安装的,那么请确保是命令,sudo apt-get install texlive-full而不是简单的sudo apt-get install texlivesudo apt-get install texlive-base。其次,如果它是从 iso 安装的,那么我觉得唯一的方法应该是更新. 尝试更新所有包裹(如果可以的话)(命令是tlmgr update all)否则软件包natbibtwoopthyperref。这应该可以解决问题。命令是:(
tlmgr update self有时需要。最好先完成,即在更新软件包之前先更新 TeXLive 管理器)。然后tlmgr update --package name--。这样就可以了。

相关内容