Обновление слов по всему документу

Обновление слов по всему документу

В ходе моей работы мы поставляем несколько сотен физических сборок за проект — как правило, на морские платформы в Нордшёэне — каждая из них имеет соответствующий тег (а также другие метаданные, такие как описание элемента и серийный номер).

Типичный тег для сборки может быть «42MV43523», он уникален и считается «адресом» оборудования на морской платформе.

Однако при написании всей необходимой технической документации для проекта я часто получаю сотни страниц, где мне нужны ссылки на теги (с полным тегом, а не (1), ссылающимся на какой-то список). Хотя документы часто отформатированы одинаково, мне нужно

  1. Разместите эти теги в свободном тексте в нескольких местах (всегда в одних и тех же местах)
  2. Поместите эти теги в таблицы, где описания располагаются на одной строке, например:

|42Mv43523|Имя поставщика|Описание товара|

|42Mv43558|Имя поставщика|Описание товара|

(...)

Проблема в том, что обновление этих документов по всему миру становится тяжелой разовой работой, которая отнимает у меня много времени (от 10 до 20 часов в неделю). Кроме того, мне часто приходится отправлять эти документы на временное одобрение, не определив тег, что еще больше ухудшает ситуацию.

Я надеюсь создать один или два главных документа, в которых я смогу записывать теги и соответствующие метаданные для каждого проекта, и в которых теги и метаданные можно будет обновлять по всему документу как в таблицах, так и в свободном тексте (для свободного текста метаданные не нужны).

Надеюсь, что этой информации достаточно. Это существенная проблема для нашей компании и многих других в норвежской нефтяной промышленности.

решение1

Вы можете использовать datatoolпакет или использовать csnames, как показано здесь:

  1. Создайте отдельный файл, содержащий несколько макросов и все ваши теги вместе с расширенной информацией, который я называю MyTags.texMWE ниже:

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

Связанный контент