使用以下 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}
赋予 一个含义€
。