複数の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}
すべてのページ番号が 1 または現在のセクション番号に等しくならないことをテストするために、MWE を少し拡張しました。上記の操作により、次の-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
パッケージが役に立つかもしれません。
買い手責任負担 ...
パッケージにはさまざまなオプションが用意されていますが、そのすべてが私たちの目的に使用できるとは限りません。最も堅牢なオプションは、単にデフォルトのオプションでパッケージをロードし、\linenumbers
beforeと指定することです\maketitle
。
その場合、元の文書の 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
私は修士論文のために errata パッケージを使い始めました。しかし、すぐに制限が多すぎることがわかったので、修正を始め、結局完全に書き直すことになりました。
下位互換性を確保しながら、大幅に拡張しました。残念ながら、ctan で公開することができなかったので、現時点では、パッケージ ファイルを git リポジトリから作業ディレクトリにコピーする必要があります。
注意してください。パッケージの内部はかなり複雑なので、オプションの使用方法と動作のカスタマイズ方法を完全に理解するには、LaTeX と pkgkeys パッケージをよく理解している必要があります。
エラッタ修正に関するリソース:
多くのオプションの中で、各エラッタのページ番号と行番号を表示するには、オプションを使用します。ラインノス=true。
私は以下の例に基づいて例を挙げましたエラッタテスト.texGithub リポジトリから取得し、可能な限り簡素化してみました。
\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):