Me gustaría poder realizar un seguimiento de las erratas en una tesis que consta de varios archivos LaTeX y luego mostrarlos en un documento separado. Utilizando elerrata
paquete puedo hacer algo como esto:
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}
Lo que me da:
¿Hay alguna manera de que pueda imprimir el número de página, así como la sección/subsección de cada fe de erratas? Elerrata
documentacióndice:
Se hará referencia a su ubicación por la sección en la que aparecen en lugar del número de página, ya que no esperamos que el primero cambie en el proceso de corrección de erratas.
En mi caso particular, sin embargo, necesito más información posicional sobre cada errata: al menos el número de página y, si es posible, también el número de línea. ¿Hay alguna manera de lograr esto usando errata
algún otro paquete?
Respuesta1
No creo que sea posible persuadir al paquete para que haga esto de inmediato. Sin embargo, podemos parchear el comando que utiliza para crear las referencias para las erratas que escribe en el -errata.tex
archivo cuando record
está activo.
Por ejemplo, usando etoolbox
, podemos agregar el número de página a la información de sección de la siguiente manera:
\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}
Extendí un poco el MWE solo para probar que no obtenía todos los números de página iguales a 1 o iguales al número de sección actual o algo así. Lo anterior produce el siguiente -errata.tex
archivo:
\erratumItem{{}1: p.\nobreakspace {}1}{misspelled `word'}
\erratumItem{{}2: p.\nobreakspace {}3}{misspelled `line'}
Cuando la lista de erratas
\documentclass{article}
\usepackage[hide]{errata}
\title{Errata in The Book}
\begin{document}
\maketitle
\printerrata{<filename of The Book>}
\end{document}
se procesa, esto produce
Los números de línea son significativamente más complicados y están mucho más allá del alcance del autor de esta respuesta. Aunque nunca lo he usado antes, el lineno
paquete puede ser de ayuda aquí.
Advertencia emptor...
El paquete ofrece varias opciones, pero es probable que no todas sean utilizables para nuestro propósito. La opción más sólida probablemente sea simplemente cargar el paquete con las opciones predeterminadas y decir \linenumbers
antes \maketitle
.
En ese caso, el documento original se ve así en las páginas 1 y 3:
y podemos modificar nuestro parche
\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!}}
producir lo siguiente en el documento de erratas
Si preferimos no mostrar números de línea en el documento original, podemos agregar
\let\makeLineNumber\relax
y las referencias a las erratas seguirán recogendo los números de línea. Sin embargo, esto hará que los números de línea sean significativamente menos útiles ya que tendremos que adivinar dónde está la línea 1.023 en la página 54 o lo que sea. Si hay muchas erratas, esto probablemente sea manejable, pero si las erratas en una página son escasas, el número de línea será casi inútil.
lineno
admite restablecer los números de página en cada página. Sin embargo, esto no funcionará directamente con errata
. Además, lineno
es poco probable que una tesis típica satisfaga las condiciones impuestas para esta opción. Por ejemplo, muchas tesis utilizan números romanos en minúsculas para el "primer tema" antes de cambiar al árabe. Esto requeriría mucho cuidado y probablemente cambiar entre diferentes tipos de números de línea en el documento, y eso incluso antes de pensar en hacerlo funcionar también errata
. Consulte lineno
la documentación de para obtener más detalles sobre sus características y dificultades.
Código completo:
\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}
El código del documento de erratas sigue siendo el indicado anteriormente.
Respuesta2
Empecé a utilizar el paquete de erratas para mi tesis de maestría. Sin embargo, rápidamente descubrí que era demasiado limitado, así que comencé a modificarlo y básicamente terminé reescribiéndolo por completo.
Lo amplié ampliamente mientras intentaba garantizar la compatibilidad con versiones anteriores. Desafortunadamente, nunca pude publicarlo en ctan, por lo que en este momento es necesario copiar los archivos del paquete desde el repositorio de git a su directorio de trabajo.
Tenga en cuenta que las partes internas del paquete son bastante complejas, por lo que comprender completamente cómo utilizar las opciones y personalizar el comportamiento requiere una buena comprensión de LaTeX y del paquete pkgkeys.
Recursos para las modificaciones de erratas:
Entre muchas opciones, puede mostrar el número de página y el número de línea de cada fe de erratas con la opciónlinenos=verdadero.
He hecho un ejemplo basado enprueba de erratas.texdel repositorio de Github y traté de eliminarlo tanto como fuera posible:
\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}
Tiene el siguiente aspecto (PDF):