我想\'{\i}
在书签中使用。虽然当有 eTeX 时它可以正常工作,但\dimexpr
如果没有 eTeX,我就无法使用。(而且我目前使用的 TeX 发行版版本还不包含 eTeX 支持。)能否在没有 eTeX 的情况下将其“扩展”为\doaccenti
TeX 可以理解的形式?
\documentclass{report}
\usepackage[unicode=true,bookmarks=true]{hyperref}
\makeatletter
\newcommand{\doaccenti}{\8\number\dimexpr0.00390625\dimexpr\number"00EDsp\relax\relax
\expandafter\HyPsd@unichar@second@byte\expandafter{%
\number\numexpr"00ED-256*\number\dimexpr0.00390625\dimexpr\number"00EDsp%
\relax\relax\relax}}
\makeatother
\begin{document}
\section[\texorpdfstring{\'{\i}}{\ifpdfstringunicode{\doaccenti}{i}}]{\'{\i}}
Text.
\end{document}
感谢您的回答!
我现在很好奇:你使用的是哪个 (La)TeX 发行版?(哪个版本和操作系统)
MacKichan ScientificWorkPlace 5.50 Build 2960(Windows XP)
但如果可能的话,你最好升级你的 TeX 发行版
这是最新版本。正在计划发布新版本。
\section[\texorpdfstring{\'{\i}}{% \ifpdfstringunicode{\string\000\string\355}{i}}]{\'{\i}} 可与基于“Knuth TeX”构建的 LaTeX 配合使用。
因此,不幸的是,SWP 不是基于“Knuth TeX”构建的 LaTeX(无法编译)。
我试过
\documentclass{report}
\usepackage[unicode=true,bookmarks=true]{hyperref}
\def\doaccenti{\80\355}
\begin{document}
\section[\texorpdfstring{\'{\i}}{\ifpdfstringunicode{\doaccenti}{i}}]{\'{\i}}
Text.
\end{document}
(以及其他方法),但得到了:
! TeX capacity exceeded, sorry [save size=5000].
@if ...1expandafter @gobbletwo string #2endcsname
{let #1#2}
l.1449 \newif\ifcheckat@
If you really absolutely need more capacity,
you can ask a wizard to enlarge me.
:-( 我现在能做什么?
(抱歉以答案的形式发布,谢谢 Scharrer 先生!我没有看到任何“评论”字段,因为我尚未注册。现在已更改。)
好吧,我发现即使
\documentclass{report}
\usepackage[unicode=true,bookmarks=true]{hyperref}
\begin{document}
\section[\texorpdfstring{i}{i}]{i}
Text.
\end{document}
无法编译,但是
解决方案:
\documentclass{report}
\usepackage{xcolor}
\pagecolor{white}
\usepackage[unicode=true,bookmarks=true]{hyperref}
\begin{document}
\section[\texorpdfstring{\'{\i}}{\ifpdfstringunicode{\80\355}{i}}]{\'{\i}}
Text.
\end{document}
确实运行正常!
尽管如此,虽然这解决了问题,但我仍然很好奇,为什么
\usepackage{xcolor}
\pagecolor{white}
需要嗎?!
答案1
好吧,\numexpr
除了\dimexpr
origin TeX 之外什么都不做。但如果可能的话,你最好升级你的 TeX 发行版。
反正:
% \number\dimexpr0.00390625\dimexpr\number"00EDsp\relax\relax
\@tempdima="00EDsp
\@tempdimb=0.00390625\@tempdima
\@tempcntb=\@tempdimb
\number\@tempcntb
和
% \number\numexpr"00ED-256*\number\dimexpr0.00390625\dimexpr\number"00EDsp\relax\relax\relax
\@tempdima="00EDsp
\@tempdimb=0.00390625\@tempdima
\@tempcntb=\@tempdimb
\@tempcnta="00ED
\multiply\@tempcntb by 256
\advance\@tempcnta by \@tempcntb
\number\@tempcnta
但是,结果\doaccenti
是一个常数。你可以简单地使用
\def\doaccenti{\80\355}
来表达unicode字符í。
答案2
如果你只需要在书签文件中写入正确的八进制字符串,则代码
\section[\texorpdfstring{\'{\i}}{%
\ifpdfstringunicode{\string\000\string\355}{i}}]{\'{\i}}
与基于“Knuth TeX”构建的 LaTeX 兼容。