我有一个 tex 文件,其中包含:
\usepackage[utf8]{inputenc}
\begin{something}
该文件调用一个宏,将和之间的内容保存\end{something}
到文件中。但文件的编码不是utf8
。有没有办法设置输出文件的编码(如果需要,我可以重写宏)。
宏是:
\def\@something[#1]{%
\gdef\@somethinginclude{#1}
\immediate\openout\@out=\@outname.tmp
\newlinechar='15
\begingroup \catcode`\^^M=12 %
\let\do\@makeother\dospecials\obeyspaces%
\@xsomething
}
\def\endsomething{%
\endgroup
\immediate\closeout\@out
}
编辑
我已经简化了宏:
\RequirePackage{fancyvrb}
\newenvironment{something}
{
\VerbatimOut{\@outname.tmp}}
{
\endVerbatimOut
}
这样代码就简单多了,但是编码还是不对,好像是使用了内部表示。
答案1
\usepackage[utf8]{inputenc}
当设置了高位的字符时,它们会被激活,而 verbatim 环境不会改变这一点。你可以自己做:
我将此文件命名为hernan.tex
,因此输出文件将是hernan.out
:
\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[italian]{babel}
\usepackage{fancyvrb}
\newenvironment{writefile}[1]
{\deactivateeightbit\VerbatimOut{#1.out}}
{\endVerbatimOut}
\makeatletter
\newcommand{\deactivateeightbit}{%
\count@=127
\loop
\catcode\count@=12
\ifnum\count@<255
\advance\count@\@ne
\repeat
}
\makeatother
\begin{document}
Questo è il mio testo.
\begin{writefile}{\jobname}
àèì
\end{writefile}
\end{document}
的内容hernan.out
是
àèì
如果我看着它,LESSCHARSET=ascii less hernan.out
我会得到这个
<C3><A0><C3><A8><C3><AC>
显示正确的UTF-8。