将 Latin1 中的未知字符更改为已知字符

将 Latin1 中的未知字符更改为已知字符

我目前正在尝试为一些学生创建问题集,因此它涉及从多个地方复制粘贴。但是,例如,对于几何问题,当我复制 gamma 时,我得到的是“Γ”,而 Latin1 不支持它……我想留在 Latin1 中,因为它有我需要的所有重音……

问题是,当我编译时,“Γ”变成了“?”,然后我必须手动更改它……

是否有可能存在一个函数可以向 Latin1 添加符号,或者将符号从“Γ”替换为“$\Gamma$”?

我发现了这一点:

\documentclass[11pt]{article}
\usepackage[latin1]{inputenc}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\myreplace}{m}
 {
  \tl_set:Nn \l__maxd_argument_tl { #1 }
  \tl_replace_all:Nnn \l__maxd_argument_tl { - } { . }
  \tl_replace_all:Nnn \l__maxd_argument_tl { Γ } { $\Gamma$ }
  \tl_use:N \l__maxd_argument_tl
 }
\tl_new:N \l__maxd_argument_tl
\ExplSyntaxOff

\begin{document}
\myreplace{---}
\myreplace{Γ}
\end{document}

此代码搜索所有“-”和“Γ”,并分别用“。”和“$\Gamma$”替换它们,因此我得到了想要的“...$\Gamma$”。

但这实际上并没有搜索“Γ”并替换它们,而是搜索它所知道的“Γ”,因此是“?”......所以我的函数应该在 Latex 编译之前完成

因此,如果我想创建一个代码来替换多个未知字符,这将行不通。有人有主意吗?

答案1

尽管您inputenc声明了,但您的输入文件不能采用 latin1 编码。我在这里假设它是 UTF-8(就像问题中发布的版本)如果是这样,您可以简单地声明字符以使用数学字体字符:

在此处输入图片描述

\documentclass[11pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{newunicodechar}
\newunicodechar{Γ}{\ensuremath{\Gamma}}
\begin{document}


some text with é and ü and Γ
\end{document}

答案2

有一些软件包可以更系统地执行 David Carlisle 的回答所建议的操作。特别是,alphabeta带有支持 LGR 编码的字体的软件包将定义您想要的希腊字母宏,并允许您在文本模式和数学模式下使用希腊字母输入。所有文本模式字符都应该由 处理inputenc

newunicode您可能仍希望在 PDFTeX 中使用字符表示某些数学符号,正如他的回答所暗示的那样,因为inputenc没有设置它们。例如,要写入 ∈ℝ,您需要创建映射\newunicodechar{∈}{\ensuremath\in}\newunicodechar{ℝ}{\ensuremath\mathbb{R}}

此示例使用unicode-mathLuaLaTeX 或 XeLaTeX 运行。我强烈推荐它,除非你使用 PDFTeX。它功能更强大,支持更多字体,并且更易于使用。

我还强烈建议您以 UTF-8 格式保存所有新的源文件。

\RequirePackage{luatex85} % Workaround for standalone 1.2 and LuaTeX.
\documentclass[preview,varwidth]{standalone}
\usepackage{iftex}

\ifPDFTeX
  \usepackage[LGR,T1]{fontenc}
  \usepackage{textcomp}
  \usepackage[utf8]{inputenc}
  \usepackage{alphabeta}
  \usepackage{lmodern}
\else
  \usepackage[math-style=TeX]{unicode-math}
\fi

\begin{document}
Some text with é and ü and Γ.  \(α = r \sin φ \cos θ\).
\end{document}

在此处输入图片描述

相关内容