我正在用 Java 编写一个程序,该程序使用 LaTeX 为某些内容生成 PDF。在此 PDF 中,我必须包含从文件中获取的任意 Unicode 字符。
\documentclass[11pt,a4paper]{scrartcl}
\usepackage[english]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc} % or \usepackage[utf8x]{inputenc} for mor characters
\usepackage{eurosym}
\usepackage{textcomp}
\begin{document}
¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ
le\#bla\%dd\@\euro{}i9pi\{\_\}d dsa ddd4(ozfertig
\char"2200
\end{document}
这为我提供了许多 UTF-8 字符,但不是全部。在上面的例子中,带有 的行\char"2200
不起作用,其他行都起作用。如果我能找到一种包含所有 UTF-8 符号的字体(即使它只是映射到 ?),这应该可以工作。有这样的字体吗?
如果没有,是否有一份文档列出了我正在使用的包中定义的符号范围,以便我可以用一些定义的字符替换其余的符号?
我无法使用 XeTeX 或 LuaTeX,我只能使用 pdfLaTeX。
答案1
您的意思是 Unicode 字符,而不是 UTF-8 字符。Unicode 代码点的范围是十六进制 0-10FFFF,而 pdflatex 字体限制为十六进制 0-FF,因此您需要数千种字体来覆盖整个 Unicode 范围,并且需要每个字符(或可以映射为块的字符范围)的 TeX 宏定义。
答案2
这有点像 hack。如果 Unicode 符号定义已使用编码包(例如textcomp
或 选项)加载到fontenc
,则\UnicodeChar{abcd}
可以使用 访问它,或者?
将被打印。
\documentclass[11pt,a4paper]{scrartcl}
\usepackage[english]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{eurosym}
\usepackage{textcomp}
\makeatletter
\begingroup
\def\DeclareUnicodeChar#1#2{\global\@namedef{UC@#1}{#2}}
\def\cdp@elt#1#2#3#4{%
\lowercase{\InputIfFileExists{#1enc.dfu}{}{}}%
}\cdp@list
\endgroup
\def\UnicodeChar#1{\@ifundefined{UC@#1}{?}{\@nameuse{UC@#1}}}
\makeatother
\begin{document}
¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ
le\#bla\%dd\@\euro{}i9pi\{\_\}d dsa ddd4(ozfertig
\UnicodeChar{2200}
\end{document}