我想为我的图片定义一组新标签,如下所示:
\usepackage{newfloat}
\DeclareFloatingEnvironment[listname={Seznam grafů}]{Graf}
然而,LaTeX 拒绝识别包选项中的“ů”并向我抛出一个错误:
! Package inputenc Error: Keyboard character used is undefined
最小工作示例是这样的:
\documentclass[12pt,a4paper]{article}\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[utf8]{inputenc}
\usepackage[english,czech]{babel}
\usepackage[nottoc]{tocbibind}
\usepackage{newfloat}
\DeclareFloatingEnvironment[listname={Seznam grafů}]{Graf}
\begin{document}
\tableofcontents
\listoffigures
\listofGrafs
\end{document}
第一次编译成功,但第二次编译失败,因为生成的.toc
文件有问题(所以这类似于.toc 文件中的特殊字符问题但那里接受的解决方案没有帮助,因为我指定inputenc
得足够早)。生成的.toc
文件如下:
\select@language {czech}
\contentsline {section}{Seznam obr\'azk\r {u}}{1}
\contentsline {section}{Seznam graf·}{1}
如果我·
用\r {u}
} 替换,下一次编译会顺利进行,并生成带有目录的乳胶文档,但我必须在每次编译之前执行此操作,这并不方便。使用\r{u}
如下:
\DeclareFloatingEnvironment[listname={Seznam graf\r{u}}]{Graf}
没有帮助。
更新:此问题现已解决:http://sourceforge.net/p/latex-caption/tickets/22/(截至 2015 年 9 月 16 日,该漏洞应于 2015 年 9 月 20 日上传至 CTAN - 预计需要一段时间才会影响到您的发行版)
答案1
当需要使用时,该newfloat
包会做很多事情\edef
,至少在某些情况下\protected@edef
。
您可以通过间接传递来解决这个问题:
\documentclass[12pt,a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english,czech]{babel}
\usepackage{lmodern}
\usepackage[nottoc]{tocbibind}
\usepackage{newfloat}
\protected\def\listGrafsname{Seznam grafů}
\DeclareFloatingEnvironment[listname={\listGrafsname}]{Graf}
\begin{document}
\tableofcontents
\listoffigures
\listofGrafs
\end{document}
因此宏\listGrafsname
将传递任何\edef
未修改的内容。
因为hyperref
您必须添加另一条信息:
\documentclass[12pt,a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english,czech]{babel}
\usepackage{lmodern}
\usepackage[nottoc]{tocbibind}
\usepackage{newfloat}
\usepackage[unicode]{hyperref}
\protected\def\listGrafsname{Seznam grafů}
\DeclareFloatingEnvironment[listname={\listGrafsname}]{Graf}
\pdfstringdefDisableCommands{\def\listGrafsname{Seznam grafů}}
\begin{document}
\tableofcontents
\listoffigures
\listofGrafs
\end{document}