我尝试在外部文件中写入一些字符串以用于特殊类型的索引,但使用 utf8 重音字符会出现错误。
在我的外部文件中,这些字符的显示方式与我在文档中写入的方式相同,并且这些字符以后无法读取。
我的测试代码是:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[portuges]{babel}
\usepackage[T1]{fontenc}
\newif\iffirstSiglaUse\firstSiglaUsetrue
\newcommand{\sigla}[2]{%
\iffirstSiglaUse
\newwrite\arqEscreveSiglas%
\immediate\openout\arqEscreveSiglas=\jobname.losg%
\firstSiglaUsefalse
\fi
\immediate\write\arqEscreveSiglas{#1 #2}%
#2 (#1)%
}
\AtEndDocument{%
\iffirstSiglaUse\else\immediate\closeout\arqEscreveSiglas\fi
}
\makeatletter
\newcommand{\leArquivo}{%
\def\dados{}
\newread\arqLeSiglas%
\openin\arqLeSiglas=\jobname.losg%
\loop\unless\ifeof\arqLeSiglas%
\read\arqLeSiglas to \dados%
\dados\par%
\repeat%
\closein\arqLeSiglas%
}
\begin{document}
\leArquivo
A \sigla{EPUSP}{Escola Politécnica da Universidade de Sao Paulo} é uma instituição de ensino ligada à \sigla{USP}{Universidade de Sao Paulo} e visa o ensino em engenharia. A entidade representativa dos engenheiros formado na EPUSP é responsabilidade da \sigla{AEP}{Associacao dos Engenheiros Politecnicos} que promove a integração entre ex-alunos.
\end{document}
答案是“!包 inputenc 错误:Unicode 字符 \u8:(某些内容)未设置为用于 LaTeX”
我阅读了 inputenc 文档,看到了一些使用 utf8 字符生成的 aux 文件,我意识到重音字符的正确表示是“\IeC{...}”,但我的输出文件并非如此。
我的输出文件是:
EPUSP Escola Politécnica da Universidade de Sao Paulo
USP Universidade de Sao Paulo
AEP Associacao dos Engenheiros Politecnicos
有人知道我做错了什么吗?
答案1
通过 LaTeX 的机制,通过定义的字符inputenc
变得健壮\protect
。但它们不能用于“移动参数”,例如,\write
除非\protect
在本地给出了适当的定义。使用\protected@write
not \immediate\write
(如果您需要 \immediate
那么您需要设置\protect
“手动”,但通常对于索引,您不希望立即写入。
答案2
因为你基本上想逐字逐句地写,我建议
\immediate\write\stream{\unexpanded{...}}
以下是我修改您的文档的方式:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[portuges]{babel}
%%% Allocate a write stream and close it at end document
\newwrite\arqEscreveSiglas
\AtBeginDocument{
\immediate\openout\arqEscreveSiglas=\jobname.losg
}
\AtEndDocument{%
\immediate\closeout\arqEscreveSiglas
}
\newcommand{\sigla}[2]{%
\immediate\write\arqEscreveSiglas{\unexpanded{#1 #2}}%
#2 (#1)%
}
\newcommand{\leArquivo}{%
\def\dados{}%
\newread\arqLeSiglas
\openin\arqLeSiglas=\jobname.losg
\loop\unless\ifeof\arqLeSiglas
\read\arqLeSiglas to \dados
\dados\par
\repeat
\closein\arqLeSiglas
\immediate\openout\arqEscreveSiglas=\jobname.losg
}
\begin{document}
\leArquivo
A \sigla{EPUSP}{Escola Politécnica da Universidade de Sao Paulo} é uma
instituição de ensino ligada à \sigla{USP}{Universidade de Sao Paulo}
e visa o ensino em engenharia. A entidade representativa dos
engenheiros formado na EPUSP é responsabilidade da
\sigla{AEP}{Associacao dos Engenheiros Politecnicos} que promove a
integração entre ex-alunos.
\end{document}
由于您想在读取完前一个文件后打开写入流,因此在读取完成后打开它会更容易。