openout 能处理带有空格的文件名吗?

openout 能处理带有空格的文件名吗?

使用 pdflatex 可以\openout处理带有空格的文件名吗?(我们正在使用 MiKTeX,我们的用户似乎认为以这种方式限制他们很笨拙。我们也有大量遗留的 TeX 文件,并且更愿意继续使用 pdftex/pdflatex。)

背景:输出文件名基于输入的作业名 - 我们使用此处的答案处理空格/星号问题:为什么 \jobname 给出的是星号而不是空格,我该如何解决这个问题?

我们只需添加一个新的扩展以供使用。

在某些情况下(这种情况很少见,但如果仔细想想也并非不可想象),我们会在文件名中间得到一个空格。然后 pdflatex 返回以下消息:

! 缺少插入 $。

然后停止。

我们有一些严格的文件命名约定,因此在这种情况下用下划线(或其他字符)替换空格是不可行的。

MWE:Openout 在包中的使用如下:

   \myStuff@filename <- gets a filename based on the -jobname. See link above.
                        Unfortunately it could be    "foo bar" not "foobar"


    \immediate\openout\myStuff@openout=\myStuff@filename

答案1

你们都很棒!很抱歉没有发布我如何得出myStuff@filename。我应该重新编辑原始问题吗?我们使用的是 MikTeX 2.9 或 2.3(试图逐步淘汰它)

问题在于不使用引号。\Verbdef来自 newverbs 也有效。

以下是错误代码的一个例子:

% The following actually writes to 'my.tex'
\renewcommand\TestFilename{my test outputB.file}
\newwrite\MyFilehandle
\immediate\openout\MyFilehandle=\TestFilename
. . .

Ulrikes 的解决方案很有效 - 点击那里,但每个人都值得点击一下

解决方案代码 - 包括作业名称等。

% Variations in run command to illustrate general filename requirements ...
% h:\MikTeX\MikTeX.2.9p\texmf\miktex\bin\pdflatex -job-name=OpenOutTestJobname "OpenOutTestJobname.tex"
% h:\MikTeX\MikTeX.2.9p\texmf\miktex\bin\pdflatex "-job-name=Open Out Test Jobname" "OpenOutTestJobname.tex"
% This is the stupid requirement - need to handle more than one contiguous space!
% h:\MikTeX\MikTeX.2.9p\texmf\miktex\bin\pdflatex "-job-name=Open  Out  Test  Jobname" "OpenOutTestJobname.tex"
% Test writing to openout - attempt reading in the same file into a pdfobj
\pdfoutput=1
\documentclass[german]{article}
\usepackage[a4paper]{geometry}
\begin{document} 
\typeout{jobname=\jobname}
%%%
%%% Convert jobname
\edef\JobnameX{\jobname}
\catcode`\*=\active
\def*{ }
\edef\JobnameX{\scantokens\expandafter{\JobnameX\noexpand}}
\catcode`\*=12 %
\newcommand{\TestFilename}{\JobnameX .ips}
\typeout{TestFilename=\TestFilename}
%%%
%%% Write stuff to output - then read it back into a pdfobj
\newwrite\MyFilehandle
\immediate\openout\MyFilehandle="\TestFilename"
\typeout{Test writing stuff to output file=\TestFilename}
\immediate\write\MyFilehandle{Test writing stuff to output file=\TestFilename}
\immediate\closeout\MyFilehandle
\immediate\pdfobj file {\TestFilename} %%% Just to show a snapshot of the entire process.
%%%   FYI - we embed papertray/bursting/external page requirement commands for postprocessing
%%%   (actually written as a 'pagepiece' dictionary)
%%%
%%% Write some text to create a pdf
Write some text into the pdf.
\end{document}
\endinput

控制台记录片段(用于第二次运行命令变体):

. . .
jobname=Open*Out*Test*Jobname
TestFilename=Open Out Test Jobname.ips
Test writing stuff to output file=Open Out Test Jobname.ips
<<Open Out Test Jobname.ips>>
. . .

生成的 PDF 片段:

. . .
1 0 obj
Test writing stuff to output file=Open Out Test Jobname.ips
endobj
. . .

相关内容