Entfernen von Kommentaren in LaTeX

Entfernen von Kommentaren in LaTeX

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
  1. 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.texlautet wie folgt:
é %
  1. Wenn ich ausführe arxiv-latex-cleaner \path\to\folder, wird ein Fehler angezeigt, der besagt, dass arxiv-latex-cleanerim 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 dem arxiv_latex_cleaner.exesich befindet (nämlich C:\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 installiert arxiv-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 stripperin 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).

verwandte Informationen