如何在 LaTeX 中放入隐藏数据?

如何在 LaTeX 中放入隐藏数据?

在我的 LaTeX 文档中,我想放置隐藏数据,例如标记或标签。其背后的想法是能够返回明确的错误消息。例如,在这个 latex 文件中,我想在注释行带有星号的位置放置一个标签或标记:

\documentclass[12pt]{article}

\usepackage[parfill]{parskip}
\usepackage[none]{hyphenat}
\sloppy
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{array,ragged2e, calc}
\usepackage{enumitem}
\usepackage{lipsum}
\usepackage{needspace}

\definecolor{shadecolor}{RGB}{217,217,217}  % Color used for highlighting
\definecolor{light-blue}{RGB}{0,175,236}    % Color for the footer

% ------------------------------------------------------------------------------------
% Header and footer management.
% ------------------------------------------------------------------------------------
\usepackage{fancyhdr}
\pagestyle{fancy}

% clear any old style settings
\fancyhf{}
\fancyheadoffset{0in}
\headheight = 53pt
\renewcommand{\headrulewidth}{0pt}

% ------------------------------------------------------------------------------------
% Defining the section style
\newcommand{\mysectionstyle}[1]{\colorbox{shadecolor}{\begin{tabular}{>{}p{\rectanglelength}}{\fontsize{13}{6}\selectfont\textbf{#1}}\end{tabular}}\vspace{6pt}}
% ------------------------------------------------------------------------------------
\addtolength{\footskip}{0.6cm}
\renewcommand{\footrulewidth}{1pt}
\renewcommand{\footrule}{{\color{light-blue}%
\vskip-\footruleskip\vskip-\footrulewidth
\hrule width\headwidth height\footrulewidth\vskip\footruleskip}}
% ------------------------------------------------------------------------------------

\usepackage[left=0.75in,top=1.5in,right=0.75in,bottom=1in]{geometry} % Document margins
\usepackage{titlesec}

\newlength{\rectanglelength}
\setlength{\rectanglelength}{\textwidth}
\addtolength{\rectanglelength}{-6pt}

\newlength{\foo}

\begin{document}
\lipsum[1]

\settototalheight{\foo}{\parbox[t]{\linewidth}{\begin{minipage}[t]{\linewidth} \begin{tabular}{@{}>{\RaggedRight}p{11cm}>{\RaggedLeft}p{6.35cm}@{}}\fontsize{13}{6}\selectfont{LaTeX}&\textbf{2011 to 2012}\end{tabular}\\\begin{tabular}{@{}>{\RaggedRight}p{11cm}>{\RaggedLeft}p{6.35cm}@{}}\textbf{Lead Programmer}&\textbf{}\end{tabular}%
\vspace{3pt}\begin{itemize}[parsep=0pt, topsep=0pt, itemsep=0pt, leftmargin=2ex]\item \lipsum[1]\item \lipsum[1]\item \lipsum[1]\item \lipsum[1]\item \lipsum[1]\item \lipsum[1]\item \lipsum[1]\item \lipsum[1]\item \lipsum[1]\end{itemize}%
\vspace{7pt}\textbf{End Title}\\\lipsum[1]

\vspace{10pt}\end{minipage}}
}
\needspace{\foo}{\setlength{\parskip}{4pt}

% ******* I WANT TO INSERT A TAG OR MARKER HERE.*******
\mysectionstyle{Experiences}

\begin{tabular}{@{}>{\RaggedRight}p{11cm}>{\RaggedLeft}p{6.35cm}@{}}\fontsize{13}{6}\selectfont{LaTeX}&\textbf{2011 to 2012}\end{tabular}\\\begin{tabular}{@{}>{\RaggedRight}p{11cm}>{\RaggedLeft}p{6.35cm}@{}}\textbf{Lead Programmer}&\textbf{}\end{tabular}%
\vspace{3pt}\begin{itemize}[parsep=0pt, topsep=0pt, itemsep=0pt, leftmargin=2ex]\item \lipsum[1]\item \lipsum[1]\item \lipsum[1]\item \lipsum[1]\item \lipsum[1]\item \lipsum[1]\item \lipsum[1]\item \lipsum[1]\item \lipsum[1]\end{itemize}%
\vspace{7pt}\textbf{End Title}\\\lipsum[1]

\vspace{10pt}}
\end{document}

我想在 LaTeX 文件中插入一个标签或标记,这样当出现错误时,我可以检索标记,然后返回一条用户友好的消息。例如,第 X 部分出现错误。

在 LaTeX 中可以实现吗?如果可以,我该怎么做?

答案1

我将根据最后一段中描述的用例进行讨论:

我想在 LaTeX 文件中插入一个标签或标记,这样当出现错误时,我可以检索标记,然后返回一条用户友好的消息。例如,第 X 部分出现错误。

\show命令将停止排版并向终端打印下一个标记的描述。同样,\showthe将停止并打印计数器的值。

当排版停止时,i命令将允许您插入标记进行处理。

将它们放在一起,您可以编写一个显示部分编号的宏并在出现错误时调用它。

\documentclass{article}
\usepackage{lipsum}

\makeatletter
\newcommand{\showsection}{%
   \showthe\c@section 
}
\makeatother

\begin{document}

\section{First}

\lipsum

\section{Second}

\lipsum

\foo% undefined cs

\section{Third}

\lipsum

\end{document}

以下是控制台会话示例:

! Undefined control sequence.
l.20 \foo
         % undefined cs
? i \showsection
> 2.
\showsection ->\showthe \c@section 

l.20 \foo
         % undefined cs
? s
OK, entering \scrollmode...

i \showsection在终端输入行上输入了以下内容,它打印了2. 您可以根据需要美化输出。

至于如何“标记”文档,我会使用现有的内容并挂接到这些宏中。例如,我注意到我使用现有的计数器来表示章节编号,而不是创建新的计数器。如果我想打印章节姓名我可以向宏添加命令\section,将节标题保存到宏中\show。(我没有这样做,因为如果你阅读源代码,你会发现这\section不是一个简单的宏。)

答案2

你可以这样定义

\def\thissection{section X}

然后在您控制的错误消息中您可以使用该命令

\PackageError{mypackage}{You made a mistake in \thissection: try harder}{}

它将选取当前的定义。

但是您无法自定义 TeX 本身的错误处理程序。例如,如果用户输入了错误的命令,\fooobarTeX 将发出未定义的命令错误,并且您无法自定义它使用的错误消息。

相关内容