![使用包 [utf8]{inputenc} 时,如何将 € 符号写入文件](https://linux22.com/image/256692/%E4%BD%BF%E7%94%A8%E5%8C%85%20%5Butf8%5D%7Binputenc%7D%20%E6%97%B6%EF%BC%8C%E5%A6%82%E4%BD%95%E5%B0%86%20%E2%82%AC%20%E7%AC%A6%E5%8F%B7%E5%86%99%E5%85%A5%E6%96%87%E4%BB%B6.png)
使用以下 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}
赋予 一个含义€
。