我买了一台新电脑,系统是windows10,安装了MikTeX2.9,之前的LaTeX文件在新系统下编译失败,下面是一个例子:
\documentclass{book}
\usepackage{fontspec}
\usepackage[BoldFont,SlantFont,CheckSingle=true]{xeCJK}
\usepackage{CJKnumb}
\setmainfont{Times New Roman}
\setCJKmainfont{DFT_HZ5.TTC}
\begin{document}
請見本書第\CJKnumber{\ref{coding}}章)。
\end{document}
不需要使用DFT_HZ5.TTC,其他中文字体也一样。以下是日志文件:
....
....
Font) TU/TimesNewRoman(0)/m/n --> TU/TimesNewRoman(0)/b/n on
input line 7.
LaTeX Font Info: Overwriting math alphabet `\mathit' in version `bold'
(Font) OT1/cmr/bx/it --> TU/TimesNewRoman(0)/b/it on input lin
e 7.
LaTeX Font Info: Overwriting math alphabet `\mathsf' in version `bold'
(Font) OT1/cmss/bx/n --> TU/lmss/b/n on input line 7.
LaTeX Font Info: Overwriting math alphabet `\mathtt' in version `bold'
(Font) OT1/cmtt/m/n --> TU/lmtt/b/n on input line 7.
! Missing number, treated as zero.
<to be read again>
\protect
l.8 隢?
这并不奇怪,因为 \CJKnumber 里面的内容是未定义的。程序应该弹出并询问我,我只需按回车键即可。但它没有弹出。程序只是在这里中断了。
但是,如果我删除另一个汉字,程序就会变成
\documentclass{book}
\usepackage{fontspec}
\usepackage[BoldFont,SlantFont,CheckSingle=true]{xeCJK}
\usepackage{CJKnumb}
\setmainfont{Times New Roman}
\setCJKmainfont{DFT_HZ5.TTC}
\begin{document}
\CJKnumber{\ref{coding}}
\end{document}
没问题。我的系统设置有什么问题?
答案1
如同这个答案,错误是由于\ref{<label>}
不能完全展开(主要是因为\null
中的)引起的。相反,您可以使用包中的\@setref
fully expandable 命令。\getrefnumber{<label>}
refcount
完整示例:
\documentclass{book}
\usepackage[BoldFont,SlantFont,CheckSingle=true]{xeCJK}
\usepackage{CJKnumb}
\usepackage{refcount}
\begin{document}
\chapter{title}\label{coding}
第\CJKnumber{\getrefnumber{coding}}章
\end{document}
或者,为了具有一致的计数器输出格式,建议(重新)定义\the<counter>
命令。
\documentclass{book}
\usepackage[BoldFont,SlantFont,CheckSingle=true]{xeCJK}
\usepackage{CJKnumb}
\renewcommand{\thechapter}{\CJKnumber{\arabic{chapter}}}
\begin{document}
\chapter{title}\label{coding}
第\ref{coding}章
\end{document}
请注意,\CJKnumber
接受的是数字,而不是计数器名称,因此我们首先使用它\arabic{chapter}
来获取数字。
这种用法比较常见。