我在 StackExchange 上提出的第一个问题。
我在 Windows 上使用 GVim,尝试编译一个带重音字符的最小 tex 文件,例如“é 3.tex”。在 gvim 中使用 pdflatex 没有问题,但使用 latexmk 时会出现问题。其他程序不会出现此问题(至少 texworks 不会出现)。Vim Tex 工具(如 SingleCompile 或 VimTex)也存在此问题。
我的 vimrc 中有以下几行:
augroup TEX_FILE_COMPILATION
autocmd!
autocmd filetype tex compiler tex
autocmd filetype tex noremap <F4> :update <CR> :let &makeprg='pdflatex -interaction=nonstopmode "%"' <CR> :execute "make \| cw 5 \| silent !texworks ".'"'.expand('%:r').'.pdf'.'"'<CR>
autocmd filetype tex noremap <F5> :update <CR> :let &makeprg='latexmk -f -pdf -interaction=nonstopmode "%"' <CR> :execute "make \| cw 5 \| silent !texworks ".'"'.expand('%:r').'.pdf'.'"'<CR>
augroup END
latexmk 抱怨找不到正确的文件。
日志档案:
# Fdb version 3 ["pdflatex"] 1531410414 ""é 3.tex"" ""é 3.pdf" ""é 3" 1531410414
(generated)
""é 3.log"
""
""é 3.pdf"
é 前面有一个多余的双引号,这导致了问题。
我认为存在编码问题。我也直接尝试过:
:!chcp 1252 & latexmk -f -pdf -interaction=nonstopmode "%"
返回
C:\windows\system32\cmd.exe /c (chcp 1252 ^& latexmk -f -pdf -interaction=nonstopmode ^"é 3.tex^")
Page de codes active : 1252
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LC_ALL = (unset),
LANG = "FR"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
Latexmk: This is Latexmk, John Collins, 25 May 2018, version: 4.56.
Latexmk: Could not find file ["é 3.tex"]
Latexmk: In file-database '"é 3.fdb_latexmk' line 3 is of wrong format:
'""é 3.aux" 1531408183 8 a94a2480d3289e625eea47cd1b285758 ""'
Latexmk: In file-database '"é 3.fdb_latexmk' line 4 is of wrong format:
'""é 3.tex"" 0 -1 0 ""'
Latexmk: applying rule 'pdflatex'...
Rule 'pdflatex': Rules & subrules not known to be previously run:
pdflatex
Rule 'pdflatex': The following rules & subrules became out-of-date:
'pdflatex'
------------
Run number 1 of rule 'pdflatex'
------------
------------
Running 'pdflatex -interaction=nonstopmode -recorder ""é 3.tex""'
------------
This is pdfTeX, Version 3.14159265-2.6-1.40.19 (MiKTeX 2.9.6700)
entering extended mode
! I can't find file `é'.
<*> é
3.tex
Please type another input file name
! Emergency stop.
<*> é
3.tex
! ==> Fatal error occurred, no output PDF file produced!
Transcript written on texput.log.
Latexmk: fls file doesn't appear to have been made.
Failure to make '"é 3.pdf'
ETC。
latexmk 可以打开具有 UTF8 名称的文件吗? https://www.i-programmer.info/programming/other-languages/1973-unicode-issues-in-perl.html
任何想法都将非常感谢。
编辑:
如果我测试 GVim+latexmk+“e 3.tex”,它可以工作,所以我不认为空格是有问题的。
直接使用 cmd 就可以了。文件名中有奇怪的字符,latexmk 注意到了,但我得到了一个好的“é 3.pdf”:
C:\HyperX\vim_tests>latexmk -pdf -interaction=nonstopmode "C:\HyperX\vim_tests\é 3.tex"
Latexmk: This is Latexmk, John Collins, 25 May 2018, version: 4.56.
Latexmk: applying rule 'pdflatex'...
Rule 'pdflatex': Rules & subrules not known to be previously run:
pdflatex
Rule 'pdflatex': The following rules & subrules became out-of-date:
'pdflatex'
------------
Run number 1 of rule 'pdflatex'
------------
------------
Running 'pdflatex -interaction=nonstopmode -recorder "C:\HyperX\vim_tests\Ú 3.tex"'
------------
This is pdfTeX, Version 3.14159265-2.6-1.40.19 (MiKTeX 2.9.6700)
entering extended mode
("C:/HyperX/vim_tests/├® 3.tex"
LaTeX2e <2018-04-01> patch level 5
Babel <3.20> and hyphenation patterns for 75 language(s) loaded.
(C:\HyperX\prg\MikTeX\texmfs\install\tex\latex\base\article.cls
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
(C:\HyperX\prg\MikTeX\texmfs\install\tex\latex\base\size10.clo)) ("├® 3.aux")
[1{C:/HyperX/prg/MikTeX/texmfs/data/pdftex/config/pdftex.map}] ("├® 3.aux") )<C
:/HyperX/prg/MikTeX/texmfs/install/fonts/type1/public/amsfonts/cm/cmr10.pfb>
Output written on "├® 3.pdf" (1 page, 12289 bytes).
Transcript written on "├® 3.log".
=== TeX engine is 'pdfTeX'
Latexmk: Log file says output to '├® 3.pdf'
Latexmk: ===For rule 'pdflatex', actual output '├® 3.pdf'
======appears not to match expected output 'Ú 3.pdf'.
Further diagnostics follow:
--The base names of the files are different. That is strange!!
Latexmk: All targets (Ú 3.pdf) are up-to-date
正如 John Collins 所回答的,latexmk 可以处理带有重音符号的文件名,因此该问题似乎是 Vim 特有的。
答案1
我给出了详细的描述,以便对遇到类似问题的人有所帮助。
诊断:当文件名包含空格和重音字符时,原作者安排latexmk
从编辑器调用。在级别上,文件名被正确引用。主要问题是,一旦 latexmk 收到文件,其名称就会包含双引号,如第一条错误消息所示vim
é 3.tex
vim
Latexmk: Could not find file ["é 3.tex"]
方括号[
和]
是分隔符,这表示 latexmk 查找名为 的文件"é 3.tex"
而不是预期的é 3.tex
。
更多细节:其余错误实际上无关紧要。它们是由于latexmk
使用-f
选项调用而导致的,该选项表示在遇到通常致命的错误后尽可能继续。细节(加上latexmk
隐含的假设,即文件名不包含“”字符)太长了,无法在此解释。
事实上,OP 能够pdflatex
在相同条件下成功运行,是因为pdflatex
(和其他 TeX 引擎)在查找文件之前删除了“”字符。(当在文件名中插入适当转义的“”字符时,可以通过命令行测试来验证这一点。)
事实上,latexmk
所有其他相关程序都可以毫无问题地处理带有空格和常规 Unicode 字符(包括重音字符)的文件名。这可以通过latexmk
从命令行调用时发生的情况来验证,如问题中的一个清单所示。(预期文件名和输出中出现的字符之间的不匹配pdflatex
无关紧要;它来自窗口cmd.exe
在显示 UTF-8 编码字符串时的奇怪行为。)
此外,在一次离线对话中,原发帖人已确认latexmk
从 TeXWorks 调用 时也不会出现问题。因此,问题似乎只出现在 上vim
。此外,当文件名同时包含空格和重音字符时,就会引发问题,而当文件名仅包含其中一个时,则不会引发问题。
解决方案:使用新版本latexmk
(4.58 或更高版本)。它现在复制 TeX 引擎(等)的行为pdflatex
,并从命令行上的文件名中删除字符“” 。这使得它能够更好地抵御在命令行上引用文件名的错误。(在 MS-Windows 中,在命令行中引用通常很难做到稳健。)
当然,仍然值得一提的是,一般建议使用 ASCII 字母、数字以及可能的“_”和“-”等受限字符集。这适用于用户希望在操作系统、文件系统等之间保持最大兼容性的情况。但由于所有相关程序都支持更通用的字符,因此用户有权使用它们。