我正在尝试使用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
好吧,这实际上不是一个解决方案,只是一种让它运转起来的变通方法,但这样使用起来非常麻烦。但也许有人能看出一个问题。因此,这是使其运转起来的一系列操作:
- 将所有特殊字符和变音符号替换为 ASCII 字符(在我的例子中,ÄÖÜäöü 替换为 ae、oe、ue,é 替换为 e)
- 删除
\left
所有\right
这是 latexdiff 的另一个问题 - 注释掉所有
tikz
图片(我的情况是,注释掉所有图片\tikzsetnextfilename
以及 和%\usetikzlibrary{external}
就足够了\tikzexternalize[prefix=tikz/]
),另请参见此处。 - 跑步
latexdiff .\doc1.tex .\doc2.tex > diff.tex
- 用 NotePad++打开
diff.tex
。当前编码是UCS2-Little-Endian
,但我们需要使用Convert to UTF8-without-BOM
,然后保存文档。 - 在 TexMaker 中打开
diff.tex
,现在不应该弹出有关编码的对话框,并且文档应该可以正常编译。