Gostaria de poder rastrear erratas em uma tese que consiste em vários arquivos LaTeX e exibi-las em um documento separado. Usando oerrata
package eu sou capaz de fazer algo assim:
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}
O que me dá:
Existe alguma maneira de imprimir o número da página, bem como a seção/subseção de cada errata? Oerrata
documentaçãodiz:
Sua localização será referenciada pela seção em que aparecem e não pelo número da página, uma vez que não esperamos que o primeiro mude no processo de correção da errata.
No meu caso particular, entretanto, preciso de mais informações posicionais sobre cada errata - no mínimo o número da página e, se possível, também o número da linha. Existe alguma maneira de conseguir isso usando errata
algum outro pacote?
Responder1
Não creio que seja possível persuadir o pacote a fazer isto imediatamente. No entanto, podemos corrigir o comando que ele usa para criar as referências para a errata que ele grava no -errata.tex
arquivo quando record
está ativo.
Por exemplo, usando etoolbox
, podemos adicionar o número da página às informações de seção da seguinte forma:
\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}
Estendi um pouco o MWE apenas para testar se não estava obtendo todos os números de página iguais a 1 ou iguais ao número da seção atual ou algo assim. O texto acima produz o seguinte -errata.tex
arquivo:
\erratumItem{{}1: p.\nobreakspace {}1}{misspelled `word'}
\erratumItem{{}2: p.\nobreakspace {}3}{misspelled `line'}
Quando a lista de erratas
\documentclass{article}
\usepackage[hide]{errata}
\title{Errata in The Book}
\begin{document}
\maketitle
\printerrata{<filename of The Book>}
\end{document}
é processado, isso produz
Os números das linhas são significativamente mais complicados e estão muito além do alcance do autor desta resposta. Embora eu nunca tenha usado isso antes, o lineno
pacote pode ser útil aqui.
Advertência emptor ...
O pacote oferece várias opções, mas nem todas são susceptíveis de serem utilizadas para o nosso propósito. A opção mais robusta provavelmente é simplesmente carregar o pacote com as opções padrão e dizer \linenumbers
before \maketitle
.
Nesse caso, o documento original fica assim nas páginas 1 e 3:
e podemos alterar nosso patch
\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!}}
para produzir o seguinte no documento de errata
Se preferirmos não exibir os números das linhas no documento original, podemos adicionar
\let\makeLineNumber\relax
e as referências para a errata ainda terão os números das linhas. No entanto, isso tornará os números das linhas significativamente menos úteis, pois teremos que adivinhar onde está a linha 1.023 da página 54 ou algo assim. Se houver muitas erratas, isso provavelmente será administrável, mas se as erratas em uma página forem esparsas, o número da linha será quase inútil.
lineno
suporta a redefinição dos números de página em cada página. No entanto, isso não funcionará diretamente com o errata
. Além disso, é pouco provável que as condições lineno
impostas para esta opção sejam satisfeitas por uma tese típica. Por exemplo, muitas teses usam algarismos romanos minúsculos para o 'assunto inicial' antes de mudar para o árabe. Isso exigiria muito cuidado e provavelmente alternar entre diferentes tipos de números de linha no documento - e isso antes mesmo de pensar em fazê-lo funcionar também errata
. Consulte lineno
a documentação do para obter mais detalhes sobre seus recursos e armadilhas.
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}
O código do documento da errata permanece o listado acima.
Responder2
Comecei a usar o pacote de erratas para minha tese de mestrado. No entanto, rapidamente descobri que era muito limitado, então comecei a modificá-lo e basicamente acabei reescrevendo-o completamente.
Estendi-o extensivamente enquanto tentava garantir a compatibilidade com versões anteriores. Infelizmente, nunca consegui publicá-lo no ctan, então no momento é necessário copiar os arquivos do pacote do repositório git para o seu diretório de trabalho.
Esteja avisado, os componentes internos do pacote são bastante complexos, portanto, entender completamente como utilizar as opções e personalizar o comportamento requer um bom entendimento do LaTeX, bem como do pacote pkgkeys.
Recursos para as modificações da errata:
Entre muitas opções, você pode exibir o número da página e o número da linha de cada errata com a opçãolinenos = verdadeiro.
Eu fiz um exemplo baseado emerratatest.texdo repositório do Github e tentei reduzi-lo o máximo possível:
\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}
Parece o seguinte (PDF):