
No meu documento LaTeX, gostaria de colocar dados ocultos, como um marcador ou tag. A ideia por trás disso é poder retornar uma mensagem de erro explícita. Por exemplo, neste arquivo látex, eu gostaria de colocar uma tag ou marcador onde está a linha de comentário com estrelas:
\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}
Quero inserir uma tag ou marcador no arquivo LaTeX para que, quando ocorrer um erro, eu possa recuperar o marcador e retornar uma mensagem amigável. Algo como há um erro na seção X.
É possível em LaTeX? Se sim, como posso fazer isso?
Responder1
Estou saindo do caso de uso descrito no seu último parágrafo:
Quero inserir uma tag ou marcador no arquivo LaTeX para que, quando ocorrer um erro, eu possa recuperar o marcador e retornar uma mensagem amigável. Algo como há um erro na seção X.
O \show
comando interromperá a composição tipográfica e imprimirá no terminal uma descrição do próximo token. Da mesma forma, \showthe
irá parar e imprimir o valor de um contador.
Quando a composição for interrompida, o i
comando permitirá que você insira tokens para processamento.
Juntando tudo isso, você pode escrever uma macro que mostre o número da seção e solicite-o em caso de erros.
\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}
Aqui está um exemplo de sessão de console:
! Undefined control sequence.
l.20 \foo
% undefined cs
? i \showsection
> 2.
\showsection ->\showthe \c@section
l.20 \foo
% undefined cs
? s
OK, entering \scrollmode...
Digitei i \showsection
na linha de entrada do terminal e ela foi impressa. 2.
Você pode embelezar a saída como quiser.
No que diz respeito a "marcar" o documento, eu usaria o que já está em vigor e me conectaria a essas macros. Por exemplo, percebi que usei o contador existente para números de seção em vez de criar algo novo. Se eu quisesse imprimir a seçãonomeEu poderia adicionar comandos à \section
macro que salvariam o título da seção em uma macro e, \show
em vez disso. (Eu não fiz isso porque se você ler a fonte verá que \section
não é uma macro simples.)
Responder2
Você pode simplesmente fazer uma definição como
\def\thissection{section X}
então, nas mensagens de erro que você controla, você pode usar esse comando
\PackageError{mypackage}{You made a mistake in \thissection: try harder}{}
e pegará qualquer que seja a definição atual.
No entanto, você não pode personalizar o manipulador de erros do próprio TeX. Se, por exemplo, o usuário digitar incorretamente um comando, \fooobar
o TeX emitirá seu erro de comando indefinido e você não poderá personalizar a mensagem de erro que ele usa.