使用包 [utf8]{inputenc} 时,如何将 € 符号写入文件

使用包 [utf8]{inputenc} 时,如何将 € 符号写入文件

使用以下 MWE,我可以将 € 符号写入文件 euro.txt

\documentclass{article}
\newwrite\tempfile
\immediate\openout\tempfile="euro.txt"

\begin{document}
Write Euro symbol into a file
\immediate\write\tempfile{10 €}%
\immediate\closeout\tempfile

\end{document}

我的问题是我使用了\usepackage[utf8]{inputenc},并且使用此编码时,符号 € 会产生错误。我该怎么办?

%\usepackage[utf8]{inputenc}

答案1

写出 Unicode 字符很麻烦。这主要取决于你想在文件中写什么。

如果可以的话,最简单的方法是

\immediate\write\tempfile{10\unexpanded{€}}

但这可能不是你想要的。所以让我们尝试不同的策略。

首先,你需要一个“立即”版本\protected@write

\makeatletter
\newcommand\protected@iwrite[3]{%
  \begingroup
  \let\thepage\relax
  #2%
  \let\protect\@unexpandable@protect
  \edef\reserved@a{\immediate\write #1{#3}}%
  \reserved@a
  \endgroup
  \if@nobreak\ifvmode\nobreak\fi\fi
}
\makeatother

那么这将起作用:

\documentclass{article}
\usepackage{textcomp}
\usepackage[utf8]{inputenc}

\makeatletter
\newcommand\protected@iwrite[3]{%
  \begingroup
  \let\thepage\relax
  #2%
  \let\protect\@unexpandable@protect
  \edef\reserved@a{\immediate\write #1{#3}}%
  \reserved@a
  \endgroup
  \if@nobreak\ifvmode\nobreak\fi\fi
}
\makeatother

\newwrite\tempfile
\immediate\openout\tempfile="euro.txt"

\begin{document}
Write Euro symbol into a file and in the document: €
\makeatletter
\protected@iwrite\tempfile{}{10€}%
\makeatother
\immediate\closeout\tempfile

\end{document}

这将写

10\IeC {\texteuro }

但这可能仍然不是您所需要的。

如果你想要一个文字 € 字符,你可以这样做

\documentclass{article}
\usepackage{textcomp}
\usepackage[utf8]{inputenc}

\usepackage{newunicodechar}
\makeatletter
\newunicodechar{€}{\ifx\protect\@unexpandable@protect\unexpanded{€}\else\texteuro\fi}

\newcommand\protected@iwrite[3]{%
  \begingroup
  \let\thepage\relax
  #2%
  \let\protect\@unexpandable@protect
  \edef\reserved@a{\immediate\write #1{#3}}%
  \reserved@a
  \endgroup
  \if@nobreak\ifvmode\nobreak\fi\fi
}
\makeatother

\begin{document}
Write Euro symbol into a file and in the document: €
\makeatletter
\protected@iwrite\tempfile{}{10€}%
\makeatother
\immediate\closeout\tempfile

\end{document}

这将写

10€

但请注意,您需要\usepackage{textcomp}赋予 一个含义

相关内容