更新整個文件中的文字

更新整個文件中的文字

在我的工作中,我們為每個專案交付數百個實體組件 - 通常交付給 Nordsjøen 的海上平台 - 每個組件都有相應的標籤(以及其他元數據,例如專案描述和序號)。

組件的典型標籤可以是“42MV43523”,並且是唯一的並且被認為是海上平台上的設備的“地址”。

然而,在為專案編寫所有必要的技術文件時,我經常會遇到數百頁需要標記引用的頁面(帶有完整標記,而不是引用某些清單的 (1))。儘管文件的格式通常相同,但我需要

  1. 將這些標籤放入多個位置的自由文字中(始終是相同的位置)
  2. 將這些標籤放入表格中,其中描述位於同一行,例如

|42Mv43523|供應商名稱|項目描述|

|42Mv43558|供應商名稱|項目描述|

(...)

問題是,從頭到尾更新這些文件變成了一項繁重的臨時工作,佔用了我大量的時間(每週 10 - 20 小時)。此外,我經常需要發送這些文件進行臨時批准,而沒有確定標籤,這使得情況變得更糟。

我希望創建一兩個主文檔,我可以在其中為每個項目編寫標籤和相應的元數據,並且可以在整個文檔中以表格和自由文本形式更新標籤和元數據(對於自由文本,元數據不是必需的)。

希望這是足夠的資訊。對於我們公司以及挪威石油行業的許多其他公司來說,這是一個重大問題。

答案1

您可以使用datatoolpacakge,或使用csnames,如下所示:

  1. 創建一個單獨的文件,其中包含一些巨集和所有標籤以及擴展信息,我MyTags.tex在下面的 MWE 中將其稱為:

    \DefineTag{42Mv43523}{Supplier name 43523}{Item Description 43523}
    \DefineTag{42Mv43558}{Supplier name 43558}{Item Description 43558}
    
  2. 那麼\input這個文件為:

    \input{MyTags.tex}
    

    在這種情況下,僅顯示標籤標籤,或作為

    \def\JustUseTag{}
    \input{MyTags.tex}
    

    在這種情況下標籤名,供應商名稱, 和商品描述被展示。

  3. 然後,要存取文件中的信息,請使用:

    \UseTag{42Mv43523}
    
    \UseTag{42Mv43558}
    

just 的輸出\input{MyTags.tex}是:

在此輸入影像描述

但隨著\def\JustUseTag{}正義\input{MyTags.tex}

在此輸入影像描述

筆記:

  • filecontents套餐使用它只是為了能夠打包下面的 MWE。在您的實際用例中不需要它。

代碼:

\documentclass{article}

\begin{filecontents*}{MyTags.tex}
    \newcommand*{\DefineTag}[3]{%
        % #1 = tag name
        % #2 = supplier name
        % #3 = item description
        \global\expandafter\newcommand\csname#1TagOnly\endcsname{#1}%
        \global\expandafter\newcommand\csname#1Expanded\endcsname{#1 #2 #3}%
    }%

    \newcommand{\UseTagOnly}[1]{\expandafter\csname#1TagOnly\endcsname}
    \newcommand{\UseTagExpanded}[1]{\expandafter\csname#1Expanded\endcsname}

    \ifdefined\JustUseTag
        \newcommand{\UseTag}[1]{\UseTagOnly{#1}}
    \else
        \newcommand{\UseTag}[1]{\UseTagExpanded{#1}}
    \fi

    \DefineTag{42Mv43523}{Supplier name 43523}{Item Description 43523}
    \DefineTag{42Mv43558}{Supplier name 43558}{Item Description 43558}
\end{filecontents*}



%\def\JustUseTag{}% <--- Un-comment to obtain the additional meta data associated with the tag
\input{MyTags.tex}


\begin{document}

    \UseTag{42Mv43523}

    \UseTag{42Mv43558}

\end{document}

答案2

從你的問題中不清楚(a)你對 LaTeX 有多熟悉,以及(b)為什麼這個過程必須使用 LaTeX(這聽起來像是資料庫軟體的工作)。無論如何,為了讓您了解最基本的 LaTeX 的功能,請參閱下文。當文件變得更長且標籤堆積時,其他更有經驗的使用者可以建議更有效的程式碼。 (朱拜勒向您問好。)

\documentclass[a4paper]{article}

\begin{document}

\newcommand{\tagone}{42MV43523}
\newcommand{\tagtwo}{42MV43558}

The \tagone{} was signed for upon arrival, blah blah blah...

\begin{table}[h]
\begin{tabular}{lll}
\hline
Item & Supplier Name & Description\\
\hline
\tagone{} & Bob's House of Petrochemicals & vat of caustic stuff\\
\tagtwo{} & Bits-R-Us & earth-crust-penetrating drill bit\\
\hline
\end{tabular}
\end{table}

\end{document}

相關內容