从 notepad++ 编译 LaTeX 并用 sumatra 打开。如果文件路径包含变音符号,则 ForwardSearch 不起作用
Compiling LaTeX from notepad++ and opening with sumatra. ForwardSearch doesn't work if file path contains umlauts
我遇到这个小问题已经有一段时间了,即使在谷歌搜索过多之后我也找不到解决方案。
在 this guide 中描述了如何使用 npp++ 和 nppExec 以及 SumatraPDF 编写和编译 LaTeX。
通过一些聪明的脚本和DDE 命令的使用(通过CMCDDE.exe),甚至可以使用sumatra 的ForwardSearch 在.tex 和.pdf 之间来回跳转。一切正常,除非 .tex 文件的路径包含不在英文字母表中的字符(例如 åäö)。
然后 CMCDDE 命令失败,因为发送到 sumatra 的 ForwardSearch 的路径读取(例如)C:\†„”
而不是 C:\åäö
。这一定是一个编码问题,我一直无法找到有效的解决方案。
所以,如果我有这个 .tex 文件 C:\åäö\MWE.tex
和
\documentclass{article}
\begin{document}
Hello World!
\end{document}
使用link above中描述的批处理脚本时无法正确打开。这些是有问题的批处理文件行:
::Writes the commands that are to be executed using CMCDDE.exe (through cmcdde.tmp)
echo SUMATRA>"%~dp1build\cmcdde.tmp"
::%~dp1build transforms into C:\åäö\build for the MWE
echo control>>"%~dp1build\cmcdde.tmp"
echo [ForwardSearch("%~dp1build\%~n1.pdf", "%~f1", %2, 0, 0, 0)]>>"%~dp1build\cmcdde.tmp"
:: This gives the following line in cmcdde.tmp: [ForwardSearch("P:\Documents\†„”\build\MWE.pdf", "P:\Documents\†„”\MWE.tex", 3, 0, 0, 0)] (in ANSI encoding)
"P:\Documents\localtexmf\cmcdde.exe" @"%~dp1build\cmcdde.txt"
:: This fails because the path P:\Documents\†„”\build doesn't exist (P:\Documents\åäö\build does)
我曾经尝试过的想法:
- 我尝试使用 chcp 65001 和 chcp 865 更改编码,但是
一直无法让它工作。
- 我也试过用
搜索和替换
script 在执行之前遍历 cmcdde.tmp 文件,但它没有
成功(我不确定我应该寻找哪些标志来交换
åäö、†„” 或 åäö 或 ├Ñ├ñ├ 或其他?)
- 我也试过
cmd /c 或 cmd /a /c 在 echo 命令之前(如描述的那样
here)
但这似乎并没有什么不同。
请让我知道如果有问题问题的哪些部分不清楚。
我设法找到了解决方案。原来使用代码页 1252 解决了这个问题。
所以将chcp 1252
放在批处理文件的开头是解决方案。但是,如果您使用其他 none 标准字符而不是我(除了北欧字母表中的字符),我猜您可能需要另一个代码页。
试验和测试不同的方法,直到你能正常工作。
我遇到这个小问题已经有一段时间了,即使在谷歌搜索过多之后我也找不到解决方案。 在 this guide 中描述了如何使用 npp++ 和 nppExec 以及 SumatraPDF 编写和编译 LaTeX。
通过一些聪明的脚本和DDE 命令的使用(通过CMCDDE.exe),甚至可以使用sumatra 的ForwardSearch 在.tex 和.pdf 之间来回跳转。一切正常,除非 .tex 文件的路径包含不在英文字母表中的字符(例如 åäö)。
然后 CMCDDE 命令失败,因为发送到 sumatra 的 ForwardSearch 的路径读取(例如)C:\†„”
而不是 C:\åäö
。这一定是一个编码问题,我一直无法找到有效的解决方案。
所以,如果我有这个 .tex 文件 C:\åäö\MWE.tex
和
\documentclass{article}
\begin{document}
Hello World!
\end{document}
使用link above中描述的批处理脚本时无法正确打开。这些是有问题的批处理文件行:
::Writes the commands that are to be executed using CMCDDE.exe (through cmcdde.tmp)
echo SUMATRA>"%~dp1build\cmcdde.tmp"
::%~dp1build transforms into C:\åäö\build for the MWE
echo control>>"%~dp1build\cmcdde.tmp"
echo [ForwardSearch("%~dp1build\%~n1.pdf", "%~f1", %2, 0, 0, 0)]>>"%~dp1build\cmcdde.tmp"
:: This gives the following line in cmcdde.tmp: [ForwardSearch("P:\Documents\†„”\build\MWE.pdf", "P:\Documents\†„”\MWE.tex", 3, 0, 0, 0)] (in ANSI encoding)
"P:\Documents\localtexmf\cmcdde.exe" @"%~dp1build\cmcdde.txt"
:: This fails because the path P:\Documents\†„”\build doesn't exist (P:\Documents\åäö\build does)
我曾经尝试过的想法:
- 我尝试使用 chcp 65001 和 chcp 865 更改编码,但是 一直无法让它工作。
- 我也试过用 搜索和替换 script 在执行之前遍历 cmcdde.tmp 文件,但它没有 成功(我不确定我应该寻找哪些标志来交换 åäö、†„” 或 åäö 或 ├Ñ├ñ├ 或其他?)
- 我也试过 cmd /c 或 cmd /a /c 在 echo 命令之前(如描述的那样 here) 但这似乎并没有什么不同。
请让我知道如果有问题问题的哪些部分不清楚。
我设法找到了解决方案。原来使用代码页 1252 解决了这个问题。
所以将chcp 1252
放在批处理文件的开头是解决方案。但是,如果您使用其他 none 标准字符而不是我(除了北欧字母表中的字符),我猜您可能需要另一个代码页。
试验和测试不同的方法,直到你能正常工作。