![处理 latex、Windows 10、MiKTeX 2.9 中主目录的波浪号](https://linux22.com/image/425054/%E5%A4%84%E7%90%86%20latex%E3%80%81Windows%2010%E3%80%81MiKTeX%202.9%20%E4%B8%AD%E4%B8%BB%E7%9B%AE%E5%BD%95%E7%9A%84%E6%B3%A2%E6%B5%AA%E5%8F%B7.png)
我想要在 Latex 运行中包含一系列来自不同路径的文件;我在 Windows 10 下的 MiKTeX 2.9 中工作。我无法\string~
指向 %USERPROFILE%。
以下 MWE 可以作为说明:
\documentclass{article}
\usepackage{graphicx}
% I put mypic.png in my Home Folder; I'm running Windows 10, MiKTeX 2.9,
% executing pdflatex both in command line and in TeXWorks
%
\newcommand\HomeFolder{\string~} %1
%\newcommand\HomeFolder{$HOME} %2
%\newcommand\HomeFolder{C:/Users/MyLoginName} %3
\begin{document}
\includegraphics{\HomeFolder/mypic}
\end{document}
依次取消\newcommand
注释标签 1、2 和 3。结果分别是:
! LaTeX Error: File `~/mypic not found.
! LaTeX Error: File `$HOME/mypic not found.
3 成功了。(该操作明确地将我的 %USERPROFILE% 放入其中。)MiKTeX 中的波浪号是否指向 %USERPROFILE% 以外的某个地方?如果是,有没有办法将 ~ 重置为 %USERPROFILE?或者这个问题更普遍?
换句话说,\includegraphics{\string~/foo}
大卫·卡莱尔在回答中提到的“应该有效”相对于主目录的参考文件是否适用于 MiKTeX 2.9?这应该是相当基本的,但我还没有看到关于它的直接陈述。
(上面的 MWE 说明了我试图表达的关于访问主文件夹外的路径的观点。我意识到如果我的主目录在我的 TEXINPUTS 路径中,那么我不需要限定包含的内容mypic.png
。但是,我正在处理的用例更一般地是关于路径的,其中上述问题只是一个特例。)
那个报告https://sourceforge.net/p/miktex/bugs/2535/讨论了为什么pdftex.exe
而不是 MiKTeX 是处理波浪号的问题。然而,这里的问题pdflatex
也适用于 ,而在 2535 的插图中,pdflatex
波浪号工作正常,即使没有pdftex
。
答案1
在 TeXlive 和 Windows 10 中\string~
可以运行并指向%USERPROFILE%
。使用$USERPROFILE
也可以:
\includegraphics{\string~/Documents/test.pdf}
\includegraphics{$USERPROFILE/Documents/test.pdf}
这是 TeXlive 用于搜索文件的 kpathsea 库的功能。
MiKTeX 不使用 kpathsea,而且两者都不起作用。在使用 MiKTeX 时,我不知道还有什么方法可以像 TeXlive 那样直接在文档中获取变量扩展(也许可以使用 lua 或管道)。
您提到的错误与此无关,这是关于文件名中的实际波浪符号。但我在命令行上检查了环境变量。
如果文件存在,则类似的操作在两个 texsystems 中都可以正常工作:
pdflatex %USERPROFILE%/path/to/test
如果文件不存在,MiKTeX 和 TeXLive 的行为会有所不同。MIKTeX 会扩展变量,但随后会对反斜杠发出抱怨:
C:\Users\XXX\Documents>pdflatex %USERPROFILE%/tests/test.utf8
This is pdfTeX, Version 3.14159265-2.6-1.40.21 (MiKTeX 20.11)
entering extended mode
! Undefined control sequence.
<*> C:\Users
\XXX/tests/test.utf8
另一边的 TeXLive 抱怨文件丢失:
! I can't find file `C:/Users/XXX/tests/test-utf8'.
<*> C:/Users/XXX/tests/test-utf8
旁注:我永远不会像这样调用 pdflatex,但总是先切换到 tex 文件的文件夹然后使用pdflatex test
,所以在我看来这只是一个学术差异。
您可以在以下位置提出功能请求:https://github.com/MiKTeX/miktex/issues。