我正在使用带有 utf8 输入的 xelatex。我试图编写一个 LaTeX 环境,其中每个源代码ä
都打印为 ae,每个源代码都打印ö
为 oe 等。我发现了许多不起作用的方法,但到目前为止还没有一个有效。我将错误消息放在相应的代码行下:
<!-- language: lang-latex -->
\documentclass{minimal}
\XeTeXinputencoding{utf8}
\usepackage{xltxtra}
\usepackage[ngerman]{babel}
\usepackage{newunicodechar}
%------------------------------------------------------------
\newenvironment{noumlauts}{%
% Neither of these works:
% \newunicodechar{ä}{ae}
% ! LaTeX Error: Can be used only in preamble.
%
% \DeclareUnicodeCharacter{00E4}{ae}
% ! Undefined control sequence. (\DeclareUnicodeCharacter)
%
% \catcode`ä=\active\def ä{ae}%
% ! Missing control sequence inserted.
% <inserted text>
% \inaccessible
%
% \makeatletter\@namedef{u8:\detokenize{ä}}{ae}\makeatother
% ! You can't use `\spacefactor' in vertical mode.
% \@ ->\spacefactor
% \@m {}
}{}
%------------------------------------------------------------
\begin{document}
\begin{noumlauts}
\noindent Bräsige Mägen\\
\emph{should look exactly like}\\
Braesige Maegen
\end{noumlauts}
\end{document}
答案1
定义一个条件并重新定义,ä
当条件为真时执行某件事,当条件为假时执行其他事。
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{fontspec}
\usepackage{newunicodechar}
\newif\ifnoumlauts
\newenvironment{noumlauts}
{\noumlautstrue}
{}
\newunicodechar{ä}{\ifnoumlauts ae\else ä\fi}
\begin{document}
\noindent Bräsige Mägen (with umlauts)
\bigskip
\begin{noumlauts}
\noindent Bräsige Mägen\\
\emph{should look exactly like}\\
Braesige Maegen
\end{noumlauts}
\end{document}
请注意,不应使用。另外,除非您真的需要其功能(可能不需要),否则\XeTeXinputencoding
不要加载,而应使用。xltxtra
fontspec
您可以通过抽象来轻松定义字符:
\newcommand{\defnoumlauts}[2]{%
\newunicodechar{#1}{\ifnoumlauts #2\else #1\fi}
}
\defnoumlauts{ä}{ae}
\defnoumlauts{ö}{oe}
\defnoumlauts{ü}{ue}
答案2
\documentclass{minimal}
\usepackage{fontspec}
\usepackage[ngerman]{babel}
\begingroup
\gdef\changeumlautcatcodes{%
\catcode`\ä=13}
\changeumlautcatcodes
\gdef\switchumlauts{%
\defä{ae}}
\endgroup
%------------------------------------------------------------
\newenvironment{noumlauts}{%
\changeumlautcatcodes\switchumlauts}{}
%------------------------------------------------------------
\begin{document}
\begin{noumlauts}
\noindent Bräsige Mägen\\
\emph{should look exactly like}\\
Braesige Maegen
\end{noumlauts}
Bräsige
\end{document}