Хранение и вызов переменного количества текстовых строк в LaTeX - PullRequest
2 голосов
/ 22 января 2010

Я сейчас пишу документ API в LaTeX. У меня есть табличное окружение со списком кодов ошибок и описаний, например так:

\begin{tabular}{|c|l|}
\hline
\textbf{Code} & \textbf{Description} \\ \hline
1 & (description of error 1) \\ \hline
2 & (description of error 2) \\ \hline

\end{tabular}

В следующих местах документа я ссылаюсь на код ошибки и ее описание, например:

Possible error conditions:
\begin{itemize}
\item 1---(description of error 1)

\end{itemize}

Я хочу автоматизировать этот процесс, чтобы мне не приходилось каждый раз повторять описания. Я попытался использовать счетчик, метки и команду \ savebox, но это довольно громоздко:

\newcounter{error}

% Inside the tabular environment:

\newsavebox{\ErrorOne}
\savebox{\ErrorOne}{(description of error 1)}
\refstepcounter{error} \label{ErrorOne} \arabic{error} & \usebox{\ErrorOne} \\ \hline

и позже, для ссылки на ошибку,

\ref{ErrorOne}---\usebox{\ErrorOne}

Я особенно возражаю против необходимости использовать ErrorOne для меток, но \ ErrorOne (с ведущей обратной косой чертой) для ящиков сохранения. Мне также не нужны имена типа ErrorOne, поскольку в какой-то момент мне может понадобиться изменить порядок. Я хочу определить несколько команд:

\newerror{errorlabel}{Description}  % defines the error (doesn't output anything)
\errorcode{errorlabel}              % outputs the error code
\errordesc{errorlabel}              % outputs the error description

и тогда сможете сказать что-то вроде

\newerror{ArgumentError}{Too many arguments}
\newerror{DatabaseError}{Could not connect to database}

% Inside the tabular environment:

\errorcode{ArgumentError} & \errordesc{ArgumentError} \\ \hline
\errorcode{DatabaseError} & \errordesc{DatabaseError} \\ \hline

% Later on:

\errorcode{DatabaseError}---\errordesc{DatabaseError}

с автоматически генерируемыми кодами ошибок (1, 2, 3, ...), такими как метки.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 23 января 2010

у меня работает следующее

\catcode`\@=11

\newcounter{error}
\def\newerror#1#2{\refstepcounter{error}%
   \expandafter\xdef\csname errno@#1\endcsname{\arabic{error}}%
   \expandafter\xdef\csname errds@#1\endcsname{#2}%
}
\def\errorcode#1{\expandafter\printerrinfo \csname errno@#1\endcsname}
\def\errordesc#1{\expandafter\printerrinfo \csname errds@#1\endcsname}
\def\printerrinfo#1{\ifx#1\relax\errmessage{Error code is invalid}%
        \else\expandafter#1\fi}

\catcode`\@=12


\newerror{ArgumentError}{Too many arguments} 
\newerror{DatabaseError}{Could not connect to database} 


\errorcode{DatabaseError}---\errordesc{DatabaseError} 
0 голосов
/ 23 января 2010

В вашей преамбуле создайте новые команды для каждой ошибки, затем просто вызовите команду:

\newcommand{\errorone}{this is the error and its description}

затем в теле, просто вызовите новую команду:

\begin{tabular}{|c|l|}
\hline
\textbf{Code} & \textbf{Description} \\ \hline
1 & \errorone \\ \hline
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...