在我的工作中,我們為每個專案交付數百個實體組件 - 通常交付給 Nordsjøen 的海上平台 - 每個組件都有相應的標籤(以及其他元數據,例如專案描述和序號)。
組件的典型標籤可以是“42MV43523”,並且是唯一的並且被認為是海上平台上的設備的“地址”。
然而,在為專案編寫所有必要的技術文件時,我經常會遇到數百頁需要標記引用的頁面(帶有完整標記,而不是引用某些清單的 (1))。儘管文件的格式通常相同,但我需要
- 將這些標籤放入多個位置的自由文字中(始終是相同的位置)
- 將這些標籤放入表格中,其中描述位於同一行,例如
|42Mv43523|供應商名稱|項目描述|
|42Mv43558|供應商名稱|項目描述|
(...)
問題是,從頭到尾更新這些文件變成了一項繁重的臨時工作,佔用了我大量的時間(每週 10 - 20 小時)。此外,我經常需要發送這些文件進行臨時批准,而沒有確定標籤,這使得情況變得更糟。
我希望創建一兩個主文檔,我可以在其中為每個項目編寫標籤和相應的元數據,並且可以在整個文檔中以表格和自由文本形式更新標籤和元數據(對於自由文本,元數據不是必需的)。
希望這是足夠的資訊。對於我們公司以及挪威石油行業的許多其他公司來說,這是一個重大問題。
答案1
您可以使用datatool
pacakge,或使用csname
s,如下所示:
創建一個單獨的文件,其中包含一些巨集和所有標籤以及擴展信息,我
MyTags.tex
在下面的 MWE 中將其稱為:\DefineTag{42Mv43523}{Supplier name 43523}{Item Description 43523} \DefineTag{42Mv43558}{Supplier name 43558}{Item Description 43558}
那麼
\input
這個文件為:\input{MyTags.tex}
在這種情況下,僅顯示標籤標籤,或作為
\def\JustUseTag{} \input{MyTags.tex}
在這種情況下標籤名,供應商名稱, 和商品描述被展示。
然後,要存取文件中的信息,請使用:
\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}