在本地使用 DeclareUnicodeCharacter(在文档中,而不是序言中)

在本地使用 DeclareUnicodeCharacter(在文档中,而不是序言中)

我有一组自动生成的 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}

在此处输入图片描述

相关内容