我在使用 \immediate\write18
该包时的输出中得到了虚假的文本。lineno
平均能量损失 以下文件中产生以下内容foo.tex
:
如果注释掉包含该lineno
包的行,我就会得到想要的结果:
我原本以为禁用lineno
软件包的功能可以解决这个问题。但是,以下几行并没有解决这个问题:
\nolinenumbers
\renewcommand{\thelinenumber}{}%
\renewcommand\LineNumber{}%
问题:
我如何在宏中禁用这个问题并仍然使用pdf 中包\OuputToFile
的功能?lineno
笔记:
- 做不是如果当前目录中有,请运行此命令,
foo.tex
因为它将被覆盖。 - 我需要包含
lineno
生成 PDF 的软件包,并获取我试图在该过程结束时输出的统计数据。我宁愿避免在没有此软件包的情况下进行额外运行,因为这会增加很多额外的处理时间。
代码:
\documentclass{standalone}
\usepackage{xparse}
\usepackage[mathlines,pagewise]{lineno}% <-- Commenting this out yields desired results
\makeatletter
\immediate\write18{printf "\\n" > foo.tex }% Initialize File
\NewDocumentCommand{\OuputToFile}{%
m% string to output
}{%
%% None of these solve the issue
%\nolinenumbers
%\renewcommand{\thelinenumber}{}%
%\renewcommand\LineNumber{}%
\immediate\write18{printf '\@percentchar s' 'string = "#1"' >> foo.tex }%
\immediate\write18{printf "\\n" >> foo.tex }%
}
\makeatother
\def\MyString{$\OuterMacro{\InnerMacro{X}}$}
\begin{document}
Output to file:
\OuputToFile{\detokenize{$\OuterMacro{\dXXX{X}}$}}%
\OuputToFile{\detokenize{$\OuterMacro{\eXXX{X}}$}}%
\end{document}
答案1
为了2020-02-02版本中,该\\
宏被制作成 (ε-TeX) \protected
,而不是像以前那样 (LaTeX) 强大,所以如果你现在写:
\immediate\write17{hello\\world}
它将打印hello\\world
在终端中(或打印到文件中)。以前的版本(lineno
基于的版本)只有\\
robust(用 声明\DeclareRobustCommand
),因此在裸机中使用它\write
会使其爆炸(您需要改用\protected@write
)。 lineno
仍然有一个旧的非\protected
版本,所以当您加载它时,BOOM!
您可以重新定义\\
它\protected
在您的文档中:
\NewCommandCopy\oldbackslash\\
\protected\def\\{\oldbackslash}
或者(在这种情况下可能更有意义)使用\string\\
:
\documentclass{standalone}
\usepackage{xparse}
\usepackage[mathlines,pagewise]{lineno}% <-- Commenting this out yields desired results
\makeatletter
\immediate\write18{printf "\string\\n" > foo.tex }% Initialize File
\NewDocumentCommand{\OuputToFile}{%
m% string to output
}{%
\immediate\write18{printf '\@percentchar s' 'string = "#1"' >> foo.tex }%
\immediate\write18{printf "\string\\n" >> foo.tex }%
}
\makeatother
\def\MyString{$\OuterMacro{\InnerMacro{X}}$}
\begin{document}
Output to file:
\OuputToFile{\detokenize{$\OuterMacro{\dXXX{X}}$}}%
\OuputToFile{\detokenize{$\OuterMacro{\eXXX{X}}$}}%
\end{document}