
En mi documento LaTeX, me gustaría poner datos ocultos, como un marcador o una etiqueta. La idea detrás de esto es poder devolver un mensaje de error explícito. Por ejemplo, en este archivo de látex, me gustaría poner una etiqueta o marcador donde está la línea de comentario con estrellas:
\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}
Quiero insertar una etiqueta o un marcador en el archivo LaTeX para que, cuando se produzca un error, pueda recuperar el marcador y luego devolver un mensaje fácil de usar. Algo así como hay un error en la sección X.
¿Es posible en LaTeX? En caso afirmativo, ¿cómo puedo hacer eso?
Respuesta1
Me estoy saliendo del caso de uso descrito en su último párrafo:
Quiero insertar una etiqueta o un marcador en el archivo LaTeX para que, cuando se produzca un error, pueda recuperar el marcador y luego devolver un mensaje fácil de usar. Algo así como hay un error en la sección X.
El \show
comando detendrá la composición tipográfica e imprimirá en el terminal una descripción del siguiente token. Del mismo modo, \showthe
se detendrá e imprimirá el valor de un contador.
Al detener la composición tipográfica, el i
comando le permitirá insertar tokens para su procesamiento.
Al juntarlos, puede escribir una macro que muestre el número de sección y solicitarlo en caso de error.
\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}
Aquí hay una sesión de consola de muestra:
! Undefined control sequence.
l.20 \foo
% undefined cs
? i \showsection
> 2.
\showsection ->\showthe \c@section
l.20 \foo
% undefined cs
? s
OK, entering \scrollmode...
Escribí i \showsection
en la línea de entrada del terminal y se imprimió. 2.
Puedes embellecer la salida como quieras.
En cuanto a cómo "etiquetar" el documento, usaría lo que ya está en su lugar y lo conectaría a esas macros. Por ejemplo, noté que usé el contador existente para los números de sección en lugar de crear algo nuevo. Si quisiera imprimir la secciónnombrePodría agregar comandos a la \section
macro que guardarían el título de la sección en una macro y \show
eso en su lugar. (No hice esto porque si lees la fuente verás que \section
no es una macro simple).
Respuesta2
Puedes simplemente hacer una definición como
\def\thissection{section X}
luego en los mensajes de error que tu controlas puedes usar ese comando
\PackageError{mypackage}{You made a mistake in \thissection: try harder}{}
y recogerá cualquiera que sea la definición actual.
Sin embargo, no puede personalizar el controlador de errores de TeX. Si, por ejemplo, el usuario escribe mal un comando, \fooobar
TeX emitirá su error de comando indefinido y no podrá personalizar el mensaje de error que utiliza.