环境与本地 \newunicodechar{ä}{ae} 或类似环境 - 可能吗?

环境与本地 \newunicodechar{ä}{ae} 或类似环境 - 可能吗?

我正在使用带有 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不要加载,而应使用。xltxtrafontspec

您可以通过抽象来轻松定义字符:

\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}

相关内容