Advertência emptor ...

Advertência emptor ...

Gostaria de poder rastrear erratas em uma tese que consiste em vários arquivos LaTeX e exibi-las em um documento separado. Usando oerratapackage 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á:

insira a descrição da imagem aqui

Existe alguma maneira de imprimir o número da página, bem como a seção/subseção de cada errata? Oerratadocumentaçã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 errataalgum 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.texarquivo quando recordestá 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.texarquivo:

\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

errata mais informativa


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 linenopacote 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 \linenumbersbefore \maketitle.

Nesse caso, o documento original fica assim nas páginas 1 e 3:

números de linha página 1 números de linha página 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

números de linha na 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.

linenosuporta 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 linenoimpostas 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 linenoa 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):insira a descrição da imagem aqui

informação relacionada