无效的 utf-8 字节序列(latex、回忆录、词汇表)

无效的 utf-8 字节序列(latex、回忆录、词汇表)

我尝试在描述中添加带有变音符号的词汇表项,但出现此错误:

./mwe-glossary.gls:3:包 inputenc 错误:无效的 UTF-8 字节序列。

问题似乎是,生成的 gl* 文件不是 UTF-8 的:

$ file mwe-glossary.tex mwe-glossary.gl*
mwe-glossary.tex: LaTeX 2e document, UTF-8 Unicode text
mwe-glossary.glo: LaTeX raw glossary, ISO-8859 text
mwe-glossary.gls: LaTeX document, ISO-8859 text

有人可以帮我解决这个问题吗?


latexmkrc

add_cus_dep('acn', 'acr', 0, 'run_makeindex');
add_cus_dep('glo', 'gls', 0, 'run_makeindex');

sub run_makeindex {
  if ( $silent ) {
    system("makeindex -q -s '$_[0].gst' -o '$_[0].gls' '$_[0].glo'");
  }
  else {
    system("makeindex -s '$_[0].gst' -o '$_[0].gls' '$_[0].glo'");
  };
}

push @generated_exts, 'acn', 'acr', 'alg';
push @generated_exts, 'glo', 'gls', 'glg';
$clean_ext .= ' %R.ist %R.xdy';

mwe-词汇表.tex

\documentclass{memoir}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\makeglossary

\begin{document}

\printglossary
\glossary{Umlaute}{ÄäÖöÜü}

\dots

\end{document}

(已复制)mwe-词汇表.gst

%%% basic.gst basic makindex glossary style file
%%% Output style parameters
preamble "\\begin{theglossary}"
postamble "\n\\end{theglossary}\n"

item_0 "\n\\glossitem"
delim_0 "{\\memglonum{"
encap_suffix "}}}"
%%% Input style parameters
keyword "\\glossaryentry"

我运行的命令是:

$ latexmk -pdf -file-line-error -interaction=nonstopmode

答案1

编辑 2020/02/24:这似乎是一个更简单的补丁

\makeatletter
\renewcommand{\@ctualm@mwritetoglo}[5]{%
  % \immediate\write \memglofile
  \immediate@protected@write\memglofile{}% the only line changed
  {\string\glossaryentry{#1\@nameuse{memglsact\m@mgf}
      {\string\memgloterm{#2}}{\string\memglodesc{#3}}
      {\string\memgloref{#4}}\@nameuse{memglsnf\m@mgf}}{#5}}%
  \endgroup}
\makeatother
  • 我虽然已经测试过了,但显然还不够彻底。

这个补丁似乎有效

\makeatletter
\renewcommand{\@ctualm@mwritetoglo}[5]{%
  \immediate\write\memglofile{\string\glossaryentry{\detokenize{#1}\@nameuse{memglsact\m@mgf}
      {\string\memgloterm{\detokenize{#2}}}{\string\memglodesc{\detokenize{#3}}}
      {\string\memgloref{\detokenize{#4}}}\@nameuse{memglsnf\m@mgf}}{\detokenize{#5}}}%
  \endgroup}
\makeatother

我会把它添加到下一本回忆录中。虽然不知道什么时候

答案2

我找到了解决这个问题的办法,就是使用图标。不过,看上去不对。


latexmkrc

add_cus_dep('acn', 'acr', 0, 'run_makeindex');
add_cus_dep('glo', 'gls', 0, 'run_makeindex');

sub run_makeindex {
  if ( $silent ) {
    system("makeindex -q -s '$_[0].gst' -o '$_[0].gls' '$_[0].glo'");
  }
  else {
    system("makeindex -s '$_[0].gst' -o '$_[0].gls' '$_[0].glo'");
  };
  # XXX: using iconv doesn't look right to me
  system("iconv -f iso-8859-1 -t utf-8 -o '$_[0].gls' '$_[0].gls'");
}

push @generated_exts, 'acn', 'acr', 'alg';
push @generated_exts, 'glo', 'gls', 'glg';
$clean_ext .= ' %R.ist %R.xdy';

相关内容