上下文

上下文

上下文

考虑包含以下文件的目录

$ ls
1.tex  '2 2.tex'  "3 '' 3.tex"  '4 "" 4.tex'

所有这些文件都包含以下内容

$ cat 1.tex
\documentclass{article}
\begin{document} a \end{document}

以下命令的输出可以证明这一点

$ sha512sum 1.tex '2 2.tex' "3 '' 3.tex" '4 "" 4.tex' | awk '{print $1}' | uniq | wc -l
1

我可以分别编译和1.tex执行以下命令2.tex3 ''.tex

$ pdflatex 1.tex >/dev/null && echo $?
0
$ pdflatex '2 2.tex' >/dev/null && echo $?
0
$ pdflatex "3 '' 3.tex" >/dev/null && echo $?
0

但是,我找不到编译的方法4 "" 4.tex。我尝试了以下方法

$ pdflatex '4 "" 4.tex'
$ pdflatex "4 \"\" 4.tex"
$ pdflatex 4\ \"\"\ 4.tex

全部显示以下内容(代表光标所在的位置)

$ pdflatex '4 "" 4.tex'
This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019) (preloaded format=pdflatex)
 restricted \write18 enabled.
entering extended mode
! I can't find file `"4 4.tex"'.
<*> "4  4.tex"

(Press Enter to retry, or Control-D to exit)
Please type another input file name: █

问题

有什么方法可以pdflatex编译名称包含双引号字符的文件?

我从未发现过.tex名称包含双引号字符的文件,但我只是想找出导致这种行为的原因。

其他背景信息

这个问题与我使用的 shell 无关,原因如下

原因 1

我创建了以下脚本并将 shebang 设置为bashzsh和 ,dash这样我就可以看到不同 shell 上的行为。所有都显示了上面显示的输出。因此,这不仅发生在 ,zsh也发生在 和bashdash所以这不是一个依赖于 shell 的问题。

$ cat main.sh
#!/bin/zsh

pdflatex '4 "" 4.tex'
pdflatex "4 \"\" 4.tex"
pdflatex 4\ \"\"\ 4.tex

原因 2

考虑具有以下内容的 C++ 源文件

$ cat 'my "" file.cpp'
int main() {
  return 123;
}
$ 

我可以使用以下命令编译并执行它

$ g++ 'my "" file.cpp' && ./a.out
$ echo $?
123

因此,我们可以得出结论,我使用的 shell 能够解析包含该"字符的文件名,因为至少有一个程序接受这些参数,这可以证明这一点。

答案1

基于 web2c 的 tex 实现无法访问名称中带有双引号的文件。双引号仅用于引用文件名中的空格。

texdoc web2c

第 3.5.4 节规定:

文件名中的双引号 ( ") 字符将被忽略;无法读取名称包含 . 的文件"

相关内容