我有一台新笔记本电脑,安装了包含 TeX Live 的 Ubuntu 14.04。在 Ubuntu 12.04 下运行良好的 LaTeX 文件现在\Hy@temp
在调用 latex 的每个\citeads
命令时都给出错误“定义中的参数编号非法”(但 pdflatex 不会出现)。该文件位于example.tex
,http://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 texlive
或sudo apt-get install texlive-base
。其次,如果它是从 iso 安装的,那么我觉得唯一的方法应该是更新. 尝试更新所有包裹(如果可以的话)(命令是tlmgr update all
)否则软件包natbib
,twoopt
和hyperref
。这应该可以解决问题。命令是:(
tlmgr update self
有时需要。最好先完成,即在更新软件包之前先更新 TeXLive 管理器)。然后tlmgr update --package name--
。这样就可以了。