更新整个文档中的文字

更新整个文档中的文字

在我的工作中,我们为每个项目交付数百个物理组件 - 通常是交付到Nordsjøen的海上平台 - 每个组件都有相应的标签(以及其他元数据,例如产品描述和序列号)。

组件的典型标签可能是“42MV43523”,它是唯一的,被视为海上平台上设备的“地址”。

然而,在为项目编写所有必要的技术文档时,我经常会得到数百页需要标记引用的内容(使用完整标记,而不是引用某个列表的 (1))。尽管文档的格式通常相同,但我需要

  1. 将这些标签放入自由文本的多个位置(始终是相同的位置)
  2. 将这些标签放入描述位于同一行的表中,例如

|42Mv43523|供应商名称|产品描述|

|42Mv43558|供应商名称|产品描述|

(...)

问题是,更新这些文件变成了一项繁重的临时工作,占用了我大量的时间(每周 10 到 20 小时)。此外,我经常需要将这些文件提交给别人进行临时审批,而标签还没有确定,这让情况更加糟糕。

我希望创建一个或两个主文档,可以在其中为每个项目编写标签和相应的元数据,并且可以在整个文档的表格和自由文本中更新标签和元数据(对于自由文本,元数据不是必需的)。

希望这些信息足够了。这对我们公司以及挪威石油行业的许多其他公司来说都是一个重大问题。

答案1

您可以使用datatool包,或者使用csname如下所示的方法:

  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}
    

仅输出的内容\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}

相关内容