買者自負 ...

買者自負 ...

我希望能夠追蹤由多個 LaTeX 文件組成的論文中的勘誤表,然後將它們顯示在單獨的文件中。使用errata包我能夠做這樣的事情:

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}

這給了我:

在此輸入影像描述

有什麼方法可以列印頁碼以及每個勘誤的章節/小節嗎?這errata文件說:

它們的位置將由它們出現的部分而不是頁碼來引用,因為我們不希望前者在勘誤表更正過程中發生變化。

然而,在我的特定情況下,我需要有關每個勘誤的更多位置資訊 - 至少是頁碼,如果可能的話,還需要行號。有什麼辦法可以使用errata或其他一些套件來實現這個目的嗎?

答案1

我認為不可能說服軟體包開箱即用地執行此操作。但是,我們可以修補它用來建立勘誤表引用的命令,當勘誤表處於活動狀態-errata.tex時,該命令會寫入檔案record

例如,使用etoolbox,我們可以將頁碼新增到分段資訊中,如下所示:

\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}

我稍微擴展了 MWE,只是為了測試是否所有頁碼都等於 1 或等於當前節號或其他值。上面產生了以下-errata.tex文件:

\erratumItem{{}1: p.\nobreakspace  {}1}{misspelled `word'}
\erratumItem{{}2: p.\nobreakspace  {}3}{misspelled `line'}

當勘誤表列表

\documentclass{article}
\usepackage[hide]{errata}
\title{Errata in The Book}
\begin{document}
  \maketitle
  \printerrata{<filename of The Book>}
\end{document}

被處理,這會產生

更多資訊勘誤表


行號要複雜得多,並且遠遠超出了該答案作者的理解範圍。儘管我以前從未使用過它,但是該lineno軟體包可能會有所幫助。

買者自負 ...


該軟體包提供了各種選項,但並非所有這些選項都可用於我們的目的。最可靠的選項可能是簡單地使用預設選項載入套件並說\linenumbersbefore \maketitle

在這種情況下,原始文件的第 1 頁和第 3 頁如下所示:

第 1 頁的行號 第 3 頁的行號

我們可以修改我們的補丁

\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!}}

在勘誤表文件中產生以下內容

勘誤表中的行號

如果我們不想在原始文件中顯示行號,我們可以添加

\let\makeLineNumber\relax

勘誤表的參考文獻仍將採用行號。然而,這將使行號的用處大大降低,因為我們將不得不猜測第 54 頁第 1,023 行在哪裡或其他什麼。如果有許多勘誤表,這可能是可以管理的,但如果頁面上的勘誤表稀疏,則行號幾乎毫無用處。

lineno支援重置每頁頁碼。然而,這不能直接與 一起工作errata。此外,lineno典型的論文不太可能滿足該選項的條件。例如,許多論文在使用阿拉伯數字之前都使用小寫羅馬數字作為「前言」。這需要非常小心,並且可能需要在文件中不同類型的行號之間進行切換 - 這甚至是在考慮使其errata也可以使用之前。lineno有關其功能和缺陷的更多詳細信息,請參閱的文檔。

完整程式碼:

\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}

勘誤表文件的程式碼仍然如上所列。

答案2

我開始在我的碩士論文中使用勘誤表包。然而,我很快就發現它太有限了,所以我開始修改它,基本上最終完全重寫了它。

我在嘗試確保向後相容性的同時對其進行了廣泛的擴展。不幸的是,我從未在 ctan 上發布它,因此目前有必要將套件檔案從 git 儲存庫複製到您的工作目錄中。

請注意,套件的內部結構非常複雜,因此要充分了解如何利用選項並自訂行為,需要對 LaTeX 以及 pkgkeys 套件有充分的了解。

勘誤表修改的資源:

在許多選項中,您可以使用下列選項顯示每個勘誤的頁碼和行號行=真

我做了一個基於的例子勘誤表.tex來自 Github 存儲庫並嘗試盡可能地刪除它:

\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}

看起來如下(PDF):在此輸入影像描述

相關內容