我并不是 LaTeX 的专家(而且我对底层的 TeX 引擎几乎一无所知),所以如果答案比我看到的更明显,我很抱歉。
有人能告诉我为什么简单地加载xcolor
包会改变编译以下代码片段创建的 PDF 的外观(从实际代码中删减以提供 MWE):
\documentclass{report}
\usepackage{ multicol }
\usepackage{ xcolor }
\begin{document}
\begin{minipage}{\textwidth}
Inside Minpage:
\begin{multicols}{3}
\begin{enumerate}
\item item1
\item item2
\item item3
\item item4
\item item5
\item item6
\end{enumerate}
\end{multicols}
\end{minipage}
\vspace{4 em}
Outside Minipage:
\begin{multicols}{3}
\begin{enumerate}
\item item1
\item item2
\item item3
\item item4
\item item5
\item item6
\end{enumerate}
\end{multicols}
\end{document}
请在此处查看结果,特别是item6
小页面内部的错位:
但是,如果我注释掉该\usepackage{ xcolor }
行,我会得到这个结果:
我在Windows7-64位下使用pdflatex
TexLive-2014(32位版本)的命令。
更清楚地说,问题在于仅仅包含 就会导致垂直错位xcolor
。这是一个已知问题吗?是否有一种可行的解决方法?简单是指不以任何方式干扰 TexLive 安装。可能它应该涉及简单的 LaTeX 设置(我有一个复杂的设置,其中 Lua 代码生成 LaTeX 代码,最终编译为 PDF,因此我想避免更改太多的 LaTeX 生成代码)。
最坏的情况下我会放弃xcolor
,但那时我需要一个替代彩色文本的工具:不需要做复杂的事情,但必须在 TeXLive 中可用。
非常感谢您的帮助!
编辑
在尝试找出问题时,我发现color
包也出现了同样的问题。这能提供线索来追踪问题的根源吗?
此外,由于一位 Linux 用户在评论中表示该问题无法重现,我还重新测试了将行尾字符更改为简单的 LF,而不是标准的 Windows CR-LF,但无济于事。我还将 .tex 文件编码切换为纯 ASCII(之前是 UTF-8),但这应该没关系,因为 MWE 中没有非 ASCII 字符,但你永远不知道。无论如何,没有运气,问题仍然存在。
万一有用,这是我使用的命令行(由我的文本编辑器 SciTE 自动生成):
"G:\root\prg\office\tex\app\texlive/bin/win32/pdflatex.exe" -shell-escape -halt-on-error "bug_xcolor.tex"
该程序记录的第一行内容如下:
This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2014/W32TeX) (preloaded format=pdflatex)
\write18 enabled.
entering extended mode
(./bug_xcolor.tex
LaTeX2e <2014/05/01>
编辑(由@cfr 的评论引发)
以下是使用 输出的文件列表\listfiles
。
当 和 均未color
加载xcolor
时:
*File List*
report.cls 2007/10/19 v1.4h Standard LaTeX document class
size10.clo 2007/10/19 v1.4h Standard LaTeX file (size option)
multicol.sty 2014/04/23 v1.8e multicolumn formatting (FMi)
***********
使用时color
:
*File List*
report.cls 2007/10/19 v1.4h Standard LaTeX document class
size10.clo 2007/10/19 v1.4h Standard LaTeX file (size option)
multicol.sty 2014/04/23 v1.8e multicolumn formatting (FMi)
color.sty 2014/04/23 v1.1a Standard LaTeX Color (DPC)
color.cfg 2007/01/18 v1.5 color configuration of teTeX/TeXLive
pdftex.def 2011/05/27 v0.06d Graphics/color for pdfTeX
infwarerr.sty 2010/04/08 v1.3 Providing info/warning/error messages (HO)
ltxcmds.sty 2011/11/09 v1.22 LaTeX kernel commands for general use (HO)
supp-pdf.mkii
***********
使用时xcolor
:
*File List*
report.cls 2007/10/19 v1.4h Standard LaTeX document class
size10.clo 2007/10/19 v1.4h Standard LaTeX file (size option)
multicol.sty 2014/04/23 v1.8e multicolumn formatting (FMi)
xcolor.sty 2007/01/21 v2.11 LaTeX color extensions (UK)
color.cfg 2007/01/18 v1.5 color configuration of teTeX/TeXLive
pdftex.def 2011/05/27 v0.06d Graphics/color for pdfTeX
infwarerr.sty 2010/04/08 v1.3 Providing info/warning/error messages (HO)
ltxcmds.sty 2011/11/09 v1.22 LaTeX kernel commands for general use (HO)
supp-pdf.mkii
***********
编辑
在@cfr 的帮助下问题解决了。看来我安装的 TL2014 发行版引入了一个错误(切换回较旧的 TL2010 发行版后问题就消失了)。
通过将发行版中的文件更新multicol.sty
至 CTAN 上的最新可用版本 (v1.8m) 来解决问题。
答案1
请注意,在下面的比较中,我过滤掉了完美匹配,即我只显示我的输出与您的输出不同的行。
我对 TL 2015 的 MWE 案例的结果如下:
report.cls 2014/09/29 v1.4h Standard LaTeX document class
size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
multicol.sty 2015/03/31 v1.8m multicolumn formatting (FMi)
与您的相比:
report.cls 2007/10/19 v1.4h Standard LaTeX document class
size10.clo 2007/10/19 v1.4h Standard LaTeX file (size option)
multicol.sty 2014/04/23 v1.8e multicolumn formatting (FMi)
使用 TL 2014,我获得:
report.cls 2014/09/29 v1.4h Standard LaTeX document class
size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
multicol.sty 2014/10/28 v1.8i multicolumn formatting (FMi)
这表明您安装的 TeX Live 可能从未更新过 - 肯定不是 2015 年之前的最终版本。
使用 TL 2013:
report.cls 2007/10/19 v1.4h Standard LaTeX document class
size10.clo 2007/10/19 v1.4h Standard LaTeX file (size option)
multicol.sty 2011/06/27 v1.7a multicolumn formatting (FMi)
这表明问题本质上在于您拥有的副本multicol.sty
要么太新,要么太旧,但不幸的是,不是“恰到好处”。 (我想知道 OverLeaf 是否使用相同版本multicol
- 可能会解释一些事情。)
我会尝试以下内容,但请注意,它可能会失败,所以请做好您的文档根本无法编译的准备。multicol
从 CTAN 下载当前副本,并将.sty
文件与您的文件一起放在您的工作目录中.tex
。如果这导致混乱,您可以删除该文件。
或者,如果你能找到一个老的的副本multicol
,它也可能有效。事实上,在这种情况下它应该可以工作。但更新可能修复了其他错误,因此请先尝试更新它。