下面是一个示例,其中还包括问题的描述:
\documentclass{book}
\usepackage{CJKutf8}
\begin{document}
\begin{CJK*}{UTF8}{gbsn}
Some Chinese text.
一些中文
\section{一些中文}
Compiling this with pdflatex will generate the following common error:
%! PACKAGE INPUTENC ERROR: UNICODE CHAR \U8:Ɨ� NOT SET UP FOR USE WITH LATEX.
However, when a clearpage command is included at the end of the document
(i.e., to uncomment the line below), then the error will disappear and the
document compiles correctly.
%\clearpage % This is important; otherwise there will be a nasty UTF-8 error.
If we delete section command, the document also compiles correctly
(even without clearpage).
\end{CJK*}
\end{document}
我的问题是:为什么该\clearpage
命令可以解决问题?
答案1
当 latex 尝试排版页面标题时会发生这种情况。这种情况发生在页面输出时;如果CJK*
环境在最后一页输出之前结束,则进行排版所需的定义就会消失,并且您会收到此错误。
如果您将内容添加\errorcontextlines=99
到文档中(CJK*
请在环境之外),您会清楚地看到这一点。此外,问题也消失了\pagestyle{empty}
(同样的警告),这进一步支持了我的诊断。
您已经找到了适当的解决方法:添加\clearpage
您所做的位置。
已编辑添加此版本的解决方法 – 感谢 egreg 在评论中提出的意见:
\AtBeginDocument{\csname CJK*\endcsname{UTF8}{gbsn}}
\AtEndDocument{\clearpage\csname endCJK*\endcsname}
然后,当然,您要从CJK*
文档主体中删除环境。
答案2
问题是 section 命令设置了页眉。问题是 CJK 环境在页眉排版之前结束,因此中文字符不再设置。使用\clearpage
使 CJK 环境跨越两页,因此在页眉排版时处于活动状态,但显然只是一种解决方法。第二个问题是书籍类页眉使用 \Makeuppercase 设置,这可能会造成很多危害(这也是错误消息使用大写字母的原因之一)。
\documentclass{book}
\renewcommand{\sectionmark}[1]{\markright{\thesection.\ #1}} %no uppercase
\usepackage{CJKutf8}
\begin{document}
\begin{CJK*}{UTF8}{gbsn}
Some Chinese text.
一些中文
\section[\protect\begin{CJK*}{UTF8}{gbsn}一些中文\protect\end{CJK*}]
{一些中文}
Compiling this with pdflatex will generate the following common error:
%! PACKAGE INPUTENC ERROR: UNICODE CHAR \U8:Ɨ� NOT SET UP FOR USE WITH LATEX.
However, when a clearpage command is included at the end of the document
(i.e., to uncomment the line below), then the error will disappear and the
document compiles correctly.
%\clearpage % This is important; otherwise there will be a nasty UTF-8 error.
If we delete section command, the document also compiles correctly
(even without clearpage).
\end{CJK*}
\end{document}