Ich habe Probleme, Kommentare aus einer LaTeX-Datei zu entfernen.
Ich habe die beiden Hauptantworten vondiese Frage, aber es funktioniert nicht.
Hier ist eine Testdatei:
é %comment
- Wenn ich ausführe
latexpand test.tex > stripped.tex
, gibt es ein Problem mit der Kodierung der resultierenden Datei und sie wird nicht ins PDF-Format kompiliert.stripped.tex
lautet wie folgt:
é %
- Wenn ich ausführe
arxiv-latex-cleaner \path\to\folder
, wird ein Fehler angezeigt, der besagt, dassarxiv-latex-cleaner
im PATH nicht definiert ist:arxiv-latex-cleaner : The term 'arxiv-latex-cleaner' is not recognized as the name of a cmdlet, function, script file, or operable program.
Ich habe den Ordner, in demarxiv_latex_cleaner.exe
sich befindet (nämlichC:\Users\MYNAME\AppData\Roaming\Python\Python39\Scripts
), im PATH. Ich habe es mit pip sowohl in der Windows-Eingabeaufforderung als auch in der Anaconda-Eingabeaufforderung deinstalliert und neu installiertarxiv-latex-cleaner
, ohne Erfolg. Ich erhalte immer noch denselben Fehler.
Ich habe Windows 10, Python 3.9 über Anaconda und LaTeX über Texlive installiert.
Antwort1
(dies ist die 3. Version)
Als Datei speichernstripper.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
Verwendung: Ausgabe etex stripper
in der Befehlszeile, Sie werden dann nach einem Dateinamen gefragt. Geben Sie ihn ein (mit der Endung <return>
), dann erzeugt eTeX die Ausgabe in einer neuen Datei im Arbeitsrepertoire. Bitte legen Sie die zu entfernende Datei zunächst in dasselbe Arbeitsrepertoire.
Es gibt einige Einschränkungen und es treten Probleme auf, wenn %
es für andere Zwecke als für Kommentarzeichen verwendet wird (z. B. wenn ein \%
. vorhanden ist).
Theoretisch lokalisiert dieser Code alle %
's und schneidet alles ab, was ihnen in den Eingabezeilen folgt.
Im Vergleich zur neuesten Version dieser Antwort wird hier vermieden, dass die Zeilen der Ausgabedatei mit einem Leerzeichen enden (was jedoch ohnehin keine Rolle spielte).