`latexdiff` 使用什么输出编码?

`latexdiff` 使用什么输出编码?

我正在尝试使用latexdiff两个版本的文档。它们采用 UTF8 编码,并将声明\usepackage[utf8]{inputenc}作为序言的第一行。

我处理文件然后使用

latexdiff --encoding=utf8 file1.tex file2.tex > out.tex

但是当我再次尝试out.tex使用 TexMaker 打开并指定 UTF8 作为编码时,所有字符都äöüé显示为一些乱码。我猜这意味着它latexdiff不使用 UTF8 作为输出编码,但它使用什么编码?

这是在 Windows 10 上使用 MikTex 和 TexMaker 以及 Strawberry Perl(不适用于 Active State Perl)。


编辑:由于以下观察,我不得不得出结论,latexdiff 或 texmaker 没有使用正确的 UTF8 编码。

我现在在 TexMaker 中制作了两个新的玩具文档(没有任何变音符号或其他特殊字符),在设置中设置为 UTF8:

\documentclass[10pt]{report}
\usepackage[utf8]{inputenc}
\title{Test1}
\begin{document}
\maketitle
\chapter{intro}
what is love?
\begin{itemize}
\item item
\end{itemize}
\end{document}

文档2:

\documentclass[10pt]{report}
\usepackage[utf8]{inputenc}
\title{Test2}
\begin{document}
\maketitle
\chapter{intro}
what is hate?
\begin{itemize}
\item item2
\end{itemize}
\end{document}

运行该命令latexdiff .\doc1.tex .\doc2.tex > diff.tex会导致以下结果diff.tex(使用 TexMaker 打开时,在弹出窗口中询问时选择 UTF8)。(当我尝试在此处粘贴文本时,没有任何内容被粘贴,因此出现了图像。)

但是,当我使用 UTF16 设置打开该文档时,它看起来是正确的:

\documentclass[10pt]{report}
%DIF LATEXDIFF DIFFERENCE FILE
%DIF DEL .\doc1.tex   Mon Sep 11 13:46:31 2017
%DIF ADD .\doc2.tex   Mon Sep 11 13:46:26 2017
\usepackage[utf8]{inputenc}
\title{\DIFdelbegin \DIFdel{Test1}\DIFdelend \DIFaddbegin \DIFadd{Test2}\DIFaddend }
%DIF PREAMBLE EXTENSION ADDED BY LATEXDIFF
%DIF UNDERLINE PREAMBLE %DIF PREAMBLE
\RequirePackage[normalem]{ulem} %DIF PREAMBLE
\RequirePackage{color}\definecolor{RED}{rgb}{1,0,0}\definecolor{BLUE}{rgb}{0,0,1} %DIF PREAMBLE
\providecommand{\DIFadd}[1]{{\protect\color{blue}\uwave{#1}}} %DIF PREAMBLE
\providecommand{\DIFdel}[1]{{\protect\color{red}\sout{#1}}}                      %DIF PREAMBLE
%DIF SAFE PREAMBLE %DIF PREAMBLE
\providecommand{\DIFaddbegin}{} %DIF PREAMBLE
\providecommand{\DIFaddend}{} %DIF PREAMBLE
\providecommand{\DIFdelbegin}{} %DIF PREAMBLE
\providecommand{\DIFdelend}{} %DIF PREAMBLE
%DIF FLOATSAFE PREAMBLE %DIF PREAMBLE
\providecommand{\DIFaddFL}[1]{\DIFadd{#1}} %DIF PREAMBLE
\providecommand{\DIFdelFL}[1]{\DIFdel{#1}} %DIF PREAMBLE
\providecommand{\DIFaddbeginFL}{} %DIF PREAMBLE
\providecommand{\DIFaddendFL}{} %DIF PREAMBLE
\providecommand{\DIFdelbeginFL}{} %DIF PREAMBLE
\providecommand{\DIFdelendFL}{} %DIF PREAMBLE
%DIF END PREAMBLE EXTENSION ADDED BY LATEXDIFF

\begin{document}
\maketitle
\chapter{intro}
what is \DIFdelbegin \DIFdel{love}\DIFdelend \DIFaddbegin \DIFadd{hate}\DIFaddend ?
\begin{itemize}
\item \DIFdelbegin \DIFdel{item
}\DIFdelend \DIFaddbegin \DIFadd{item2
}\DIFaddend \end{itemize}
\end{document}

但当我尝试使用编译它时,pdflatex我得到了错误

line 1 ! Undefined control sequence. \

答案1

好吧,这实际上不是一个解决方案,只是一种让它运转起来的变通方法,但这样使用起来非常麻烦。但也许有人能看出一个问题。因此,这是使其运转起来的一系列操作:

  1. 将所有特殊字符和变音符号替换为 ASCII 字符(在我的例子中,ÄÖÜäöü 替换为 ae、oe、ue,é 替换为 e)
  2. 删除\left所有\right 这是 latexdiff 的另一个问题
  3. 注释掉所有tikz图片(我的情况是,注释掉所有图片\tikzsetnextfilename以及 和%\usetikzlibrary{external}就足够了\tikzexternalize[prefix=tikz/]),另请参见此处
  4. 跑步latexdiff .\doc1.tex .\doc2.tex > diff.tex
  5. 用 NotePad++打开diff.tex。当前编码是UCS2-Little-Endian,但我们需要使用Convert to UTF8-without-BOM,然后保存文档。
  6. 在 TexMaker 中打开diff.tex,现在不应该弹出有关编码的对话框,并且文档应该可以正常编译。

相关内容