我的系统设置有什么问题?

我的系统设置有什么问题?

我买了一台新电脑,系统是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中的)引起的。相反,您可以使用包中的\@setreffully 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}来获取数字。

这种用法比较常见。

相关内容