我正在努力从 LaTeX 文件中删除注释。
我尝试了两个主要答案这个问题,但是它不起作用。
这是一个测试文件:
é %comment
- 当我运行时
latexpand test.tex > stripped.tex
,生成的文件的编码存在问题,并且它无法编译为 PDF。stripped.tex
如下所示:
é %
- 当我运行 时
arxiv-latex-cleaner \path\to\folder
,出现错误,提示arxiv-latex-cleaner
未在 PATH 上定义:arxiv-latex-cleaner : The term 'arxiv-latex-cleaner' is not recognized as the name of a cmdlet, function, script file, or operable program.
我将 所在的文件夹arxiv_latex_cleaner.exe
(即C:\Users\MYNAME\AppData\Roaming\Python\Python39\Scripts
)添加到 PATH。我在 Windows 提示符和 Anaconda 提示符中卸载并使用 pip 重新安装arxiv-latex-cleaner
,但无济于事。我仍然收到相同的错误。
我有 Windows 10,通过 Anaconda 安装了 Python 3.9,并通过 texlive 安装了 LaTeX。
答案1
(这是第三个版本)
将此另存为文件stripper.tex
% macro to sanitize catcodes, making space and % active
\def\stringregime{%
\catcode`\\ 12
\catcode`\{ 12
\catcode`\} 12
\catcode`\# 12
\catcode32 \active
\catcode`\~ 12
\catcode`\% \active
}%
% active space gives normal space
\begingroup
\catcode32\active\xdef {\string }%
\endgroup
\begingroup
% the \empty delimiter will be added manually by \handlelines
\catcode`\%\active
\xdef%#1\empty{\string%}
\endgroup
\def\removeEOLspacechar#1 {\def\fileline{#1}}
\def\bracedpar{\par}
% main loop macro
\def\handlelines{%
\ifeof\infile
\else
\read\infile to \fileline
% remove the EOL space from \fileline before outputting it
% If TeX replaces an empty line by \par in input there is no space
% token only the \par token.
\ifx\fileline\bracedpar\def\fileline{}\else
\expandafter\removeEOLspacechar\fileline
\fi
\immediate\write\outfile{\fileline\empty}% delimiter for active %
\expandafter\handlelines
\fi
}
% loop launch
\def\DoIt{%
\begingroup
\stringregime
\handlelines
\endgroup
}
% file auxiliaries
\newread\infile
\newwrite\outfile
\immediate\write128{}
\message{filename to strip of comments: }\read-1to\theinfile
% clean up trailing space
\def\cleanuptrailingspace#1 \par{\def\theinfile{#1}}
\expandafter\cleanuptrailingspace\theinfile\par
%
\openin\infile\theinfile\relax
\immediate\openout\outfile\theinfile-out
\DoIt
\immediate\write128{output written to \theinfile-out USE AT OWN RISK}
\immediate\closein\infile
\immediate\closeout\outfile
\bye
用法:在命令行上发出etex stripper
,然后系统会提示您输入文件名。输入它(以 结尾<return>
),然后 eTeX 会在工作目录中生成一个新文件作为输出。请将要剥离的文件放在相同的工作目录中。
%
如果将其用于注释字符以外的其他用途(例如,如果有\%
)。则会出现一些限制并会出现问题。
理论上,此代码会定位所有%
输入行中的 ' 并修剪其后面的所有内容。
与该答案的最新版本相比,该答案避免了输出文件行以空格字符结尾。(无论如何这并不重要)。