Ich möchte in der Lage sein, Korrekturen in einer Arbeit, die aus mehreren LaTeX-Dateien besteht, nachzuverfolgen und sie dann in einem separaten Dokument anzuzeigen. Mit demerrata
Paket kann ich so etwas tun:
thebook.tex
:
\documentclass{article}
\usepackage[hide, record]{errata}
\title{The Book}
\begin{document}
\maketitle
\section{First section}
I misspelled a \erratumReplace{misspelled `word'}{ord}{word} on this line.
\section{Second section}
... and also on this \erratumReplace{misspelled `line'}{ine}{line}.
\end{document}
theerrata.tex
:
\documentclass{article}
\usepackage[hide]{errata}
\title{Errata in The Book}
\begin{document}
\maketitle
\printerrata{thebook}
\end{document}
Das gibt mir:
Gibt es eine Möglichkeit, die Seitenzahl und den Abschnitt/Unterabschnitt für jedes Erratum auszudrucken?errata
Dokumentationsagt:
Ihr Standort wird anhand des Abschnitts angegeben, in dem sie erscheinen, und nicht anhand der Seitenzahl, da wir nicht davon ausgehen, dass sich erstere im Zuge der Korrektur der Druckfehler ändern wird.
In meinem speziellen Fall benötige ich jedoch mehr Positionsinformationen zu jedem Erratum – zumindest die Seitenzahl und wenn möglich auch die Zeilenzahl. Gibt es eine Möglichkeit, dies mit errata
oder einem anderen Paket zu erreichen?
Antwort1
Ich glaube nicht, dass es möglich ist, das Paket dazu zu bringen, dies sofort zu tun. Wir können jedoch den Befehl patchen, den es verwendet, um die Referenzen für die Errata zu erstellen, die es in die -errata.tex
Datei schreibt, wenn record
es aktiv ist.
Beispielsweise etoolbox
können wir mithilfe von die Seitenzahl wie folgt zu den Abschnittsinformationen hinzufügen:
\documentclass{article}
\usepackage[hide, record]{errata}
\usepackage{etoolbox}
\apptocmd\ErratumRef{: p.~\arabic{page}}{\typeout{Successfully added pages to errata references.}}{\typeout{Oh no! Could not add pages to errata references. Patch failed!}}
\title{The Book}
\begin{document}
\maketitle
\section{First section}
I misspelled a \erratumReplace{misspelled `word'}{ord}{word} on this line.
\clearpage
No errors here!
\clearpage
\section{Second section}
\dots and also on this \erratumReplace{misspelled `line'}{ine}{line}.
\end{document}
Ich habe das MWE ein wenig erweitert, um zu testen, ob nicht alle Seitenzahlen gleich 1 oder gleich der aktuellen Abschnittsnummer oder so etwas sind. Das Obige erzeugt die folgende -errata.tex
Datei:
\erratumItem{{}1: p.\nobreakspace {}1}{misspelled `word'}
\erratumItem{{}2: p.\nobreakspace {}3}{misspelled `line'}
Wenn die Liste der Errata
\documentclass{article}
\usepackage[hide]{errata}
\title{Errata in The Book}
\begin{document}
\maketitle
\printerrata{<filename of The Book>}
\end{document}
verarbeitet wird, entsteht
Zeilennummern sind wesentlich kniffliger und gehen weit über den Horizont des Autors dieser Antwort hinaus. Obwohl ich es noch nie zuvor verwendet habe, lineno
könnte das Paket hier hilfreich sein.
Vorsicht beim Kauf ...
Das Paket bietet verschiedene Optionen, aber nicht alle davon sind wahrscheinlich für unseren Zweck verwendbar. Die robusteste Option ist wahrscheinlich, das Paket einfach mit den Standardoptionen zu laden und \linenumbers
before einzugeben \maketitle
.
In diesem Fall sieht das Originaldokument auf den Seiten 1 und 3 folgendermaßen aus:
und wir können unseren Patch ändern
\apptocmd\ErratumRef{: p.~\arabic{page}: l.~\arabic{linenumber}}{\typeout{Successfully added pages to errata references.}}{\typeout{Oh no! Could not add pages to errata references. Patch failed!}}
um Folgendes im Errata-Dokument zu veranlassen
Wenn wir es vorziehen, die Zeilennummern im Originaldokument nicht anzuzeigen, können wir hinzufügen
\let\makeLineNumber\relax
und die Referenzen für die Errata werden immer noch die Zeilennummern übernehmen. Dies macht die Zeilennummern jedoch deutlich weniger nützlich, da wir raten müssen, wo auf Seite 54 Zeile 1.023 oder was auch immer ist. Wenn es viele Errata gibt, ist dies wahrscheinlich zu bewältigen, aber wenn es auf einer Seite nur wenige Errata gibt, ist die Zeilennummer fast nutzlos.
lineno
unterstützt das Zurücksetzen der Seitenzahlen auf jeder Seite. Dies funktioniert jedoch nicht ohne weiteres mit errata
. Außerdem werden die Bedingungen, lineno
die für diese Option gelten, von einer typischen Abschlussarbeit wahrscheinlich nicht erfüllt. Viele Abschlussarbeiten verwenden beispielsweise kleine römische Ziffern für den „Titel“, bevor sie auf Arabisch umstellen. Dies würde viel Sorgfalt erfordern und wahrscheinlich das Umstellen zwischen verschiedenen Arten von Zeilennummern im Dokument – und das, bevor man überhaupt daran denken kann, es errata
auch mit funktionieren zu lassen. lineno
Weitere Einzelheiten zu den Funktionen und Fallstricken finden Sie in der Dokumentation von .
Vollständiger Code:
\documentclass{article}
\usepackage[hide, record]{errata}
\usepackage{etoolbox}
\usepackage{lineno}
\apptocmd\ErratumRef{: p.~\arabic{page}: l.~\arabic{linenumber}}{\typeout{Successfully added pages to errata references.}}{\typeout{Oh no! Could not add pages to errata references. Patch failed!}}
\title{The Book}
\begin{document}
\linenumbers
\maketitle
\section{First section}
I misspelled a \erratumReplace{misspelled `word'}{ord}{word} on this line.
\clearpage
No errors here!
\clearpage
\section{Second section}
\dots and also on this \erratumReplace{misspelled `line'}{ine}{line}.
\end{document}
Der Code für das Errata-Dokument bleibt wie oben aufgeführt.
Antwort2
Ich habe angefangen, das Errata-Paket für meine Masterarbeit zu verwenden. Ich fand es jedoch schnell zu eingeschränkt und begann, es zu modifizieren. Im Endeffekt habe ich es komplett neu geschrieben.
Ich habe es umfassend erweitert und dabei versucht, die Abwärtskompatibilität sicherzustellen. Leider konnte ich es nie auf ctan veröffentlichen, daher ist es im Moment notwendig, die Paketdateien aus dem Git-Repo in Ihr Arbeitsverzeichnis zu kopieren.
Seien Sie gewarnt, die internen Vorgänge des Pakets sind ziemlich komplex. Um die Verwendung der Optionen und die Anpassung des Verhaltens vollständig zu verstehen, sind daher gute Kenntnisse von LaTeX sowie des pkgkeys-Pakets erforderlich.
Ressourcen für die Errata-Änderungen:
Unter vielen Optionen können Sie die Seitenzahl und Zeilennummer für jedes Erratum mit der Option anzeigenlinenos=true.
Ich habe ein Beispiel gemacht basierend auferratatest.texaus dem Github-Repo und habe versucht, es so weit wie möglich zu reduzieren:
\documentclass[a4paper,12pt]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[margin=1.6in,marginparsep=3mm]{geometry}
\usepackage{pgfkeys}
\usepackage{caption}
\usepackage{etoolbox}
\usepackage{etextools}
\usepackage{xparse}
\usepackage{tcolorbox}
\usepackage{marginnote}
% Needed for line numbers
\usepackage{lineno}
\setpagewiselinenumbers
\linenumbers
% Remove the line numbers in the margin when using the lineno package
\renewcommand{\LineNumber}{}
\usepackage[bookmarks,breaklinks,pdfpagelabels,
colorlinks=true, % Colors links instead of ugly boxes
linkcolor=black, % Color of internal links
]{hyperref}[2012/11/06] % Reference package, must be before cleveref
\usepackage[noabbrev,nameinlink]{cleveref}[2013/12/28]
\usepackage[
margins=true,
foots=true,
record=true,
linenos=true,
defaultargs={margin=true,foot=true},
defaultargsnote={inlinechange=false},
%requirecmddescription=false,
%marginnote=false,
marginnote=true,
uniquelistlabels=0,
inlinemarks=false,
%inlinechanges=false,
inlinemarks=true,
styles={tablelist},
]{errata}[2015/04/16]
% change margin node format to use tcolorbox
\errataSetKeyFormat[#1+#2]{marginfmt/marginnote}{%
{\vspace{-4pt}%
\begin{tcolorbox}[size=fbox,nobeforeafter,
colframe=red!50!white,colback=red!25!yellow!5!white,%
fontupper=\scriptsize,%
bottomrule=1pt,toprule=1pt,leftrule=0pt,rightrule=0pt,
% arc=0cm, outer arc=0mm, % Remove the rounded corners
arc=0cm,
outer arc=0mm, % Remove the rounded corners
code={\pgfkeysalsofrom#1}
]#2\end{tcolorbox}}}%
\makeatletter
% Example on changing the table styling
\errataset{%
customliststyletablekeyformats/.style={%
listformats/lineref/.setStrKeyFmt={##1}{~(L \lineref{##1})},
%%
listformats/erratalistbegin/.setStrKeyFmt={##1}{%
\setlength\LTleft{-1cm}
\setlength\LTright{-1cm}
\makeatletter%
\begin{longtable}{ c@{\tcolsep{1.7}} c@{\tcolsep{2}} c p{15em} l c }%
& Title & Type & Action & Page
},
listformats/erratalistend/.setStrKeyFmt={##1}{\end{longtable}\makeatother},
actionformat/replace/.setStrKeyFmt={##1+##2}{##2 \shortarrow ##1},
actionformat/add/.setStrKeyFmt={##1}{##1},
actionformat/delete/.setStrKeyFmt={##1}{##1},
actionformat/note/.setStrKeyFmt={##1}{ ##1},
footformats/description/.setStrKeyFmt={##1}{~[##1]~},
footformats/erratumcustomlocation/.setStrKeyFmt={##1+##2}{~[P:\pageref{##1} (L \lineref{##2})]},
listformats/erratumcustomlocation/.setStrKeyFmt={##1+##2}{\pageref{##1} (L \lineref{##2})},
setCmdKeyArgsGetTwo={erratumcustomlocation}{##1+##2}{{pageref}+{lineref}},
},
customliststylefortable/.code={
\errataSetListFormat{+erratumlistitemtitle,+erratumlisttarget,%
\noexpand\errataamersand,+erratumnamedlink,\noexpand\errataamersand,%
+action,\noexpand\errataamersand,+actiondescription,\noexpand\errataamersand,%
-erratumcustomlocation}%
\errataSetFootFormat{+description, +actiondescription, -erratumcustomlocation}
\setcounter{@errata@uniquelistlabels}{4}
\usepackage{stmaryrd}
\newcommand{\shortarrow}{\ensuremath{\vrule height 2\fontdimen22\textfont2 width 0pt\shortrightarrow}}
\newcommand{\tcolsep}[1]{\hspace{##1em}}
\errataRegisterFormatKey{erratumcustomlocation}
},
styles/customtablelist/.style={styles/tablelist, customliststyletablekeyformats,
customliststylefortable},
}
% Apply the custom table style with line numbers in errata
\errataset{.errataapplystyles/.list={customtablelist}}
\makeatother
\title{The Book}
\begin{document}
\section{First section}\label{sect:first}
I misspelled a \erratumReplace{typo}{ord}{word} on this line.
\section{Second section}
... and also on this \erratumReplace[margin=false]{typo}{ine}{line}, but hide
the note in the margin.
On this line we \erratumReplace[inlinemark=false,
label={typolabel}]{typo}{fixes}{fix} a typo and hide the inline marking, but we
still find \cref{typolabel} in the \cref{chap:errata}.
\section{Third section}
Here we \erratumAdd[foot=false]{add}{add} a word without a footnote comment.
\section{Errata}\label{chap:errata}
\PrintErrata
\end{document}
Sieht wie folgt aus (PDF):