我有一组自动生成的 LaTeX 代码片段(每个都在一个单独的文件中),我将它们包含在多个文档中。这些代码片段使用 Unicode 符号而不是数学命令(←、λ、⇒、... 而不是、、、\leftarrow
... )。\lambda
\Rightarrow
将以下内容添加到我的序言中,允许 pdfLaTeX 编译这些片段:
\DeclareUnicodeCharacter{03BB}{$\lambda$}
\DeclareUnicodeCharacter{2190}{$\leftarrow$}
\DeclareUnicodeCharacter{21D2}{$\Rightarrow$}
但我需要将其添加到文档本身的序言中。理想情况下,我宁愿将这些内容隐藏在 LaTeX 代码片段文件中。这样,代码片段文件将包含以下内容:
\DeclareUnicodeCharacter{03BB}{$\lambda$}
\DeclareUnicodeCharacter{2190}{$\leftarrow$}
\DeclareUnicodeCharacter{21D2}{$\Rightarrow$}
(λ x ⇒ y ← x; y)
...而我就能将它们包括在内而不用考虑这些令人厌烦的事情\DeclareUnicodeCharacter
。
有没有办法\DeclareUnicodeCharacter
在文档正文中实现与 相同的效果?效果可以限制在单个环境中吗?
梅威瑟:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage[T1]{fontenc}
\DeclareUnicodeCharacter{03BB}{$\lambda$}
\DeclareUnicodeCharacter{2190}{$\leftarrow$}
\DeclareUnicodeCharacter{21D2}{$\Rightarrow$}
\begin{document}
\texttt{(λ x ⇒ y ← x; y)}
\end{document}
答案1
它只制作前导码以保存上个世纪有用的几十个字节,您可以将其关闭......
\documentclass{article}
\makeatletter
\let\@onlypreamble\@gobble
\makeatother
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage[T1]{fontenc}
\begin{document}
\begin{center}
\DeclareUnicodeCharacter{03BB}{$\lambda$}
\DeclareUnicodeCharacter{2190}{$\leftarrow$}
\DeclareUnicodeCharacter{21D2}{$\Rightarrow$}
\texttt{(λ x ⇒ y ← x; y)}
\end{center}
\end{document}
答案2
您可以使用newunicodechar
,它的优点是还可以与 XeLaTeX 和 LuaLaTeX 一起使用。
您需要保留一份 的副本\newunicodechar
。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage[T1]{fontenc}
\usepackage{etoolbox}
\usepackage{newunicodechar}
\let\xnewunicodechar\newunicodechar
\AfterEndPreamble{\let\newunicodechar\xnewunicodechar}
\begin{document}
\begin{center}
\newunicodechar{λ}{$\lambda$}
\newunicodechar{⇒}{$\rightarrow$}
\newunicodechar{←}{$\leftarrow$}
\texttt{(λ x ⇒ y ← x; y)}
\end{center}
\end{document}