
In meinem LaTeX-Dokument möchte ich versteckte Daten wie einen Marker oder ein Tag einfügen. Die Idee dahinter ist, eine explizite Fehlermeldung zurückgeben zu können. In dieser Latex-Datei möchte ich beispielsweise ein Tag oder einen Marker dort einfügen, wo die Kommentarzeile mit Sternen ist:
\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}
Ich möchte ein Tag oder einen Marker in die LaTeX-Datei einfügen, sodass ich im Fehlerfall den Marker abrufen und dann eine benutzerfreundliche Meldung zurückgeben kann. Etwa so: „In Abschnitt X liegt ein Fehler vor.“
Ist das in LaTeX möglich? Wenn ja, wie kann ich das machen?
Antwort1
Ich gehe von dem Anwendungsfall aus, der in Ihrem letzten Absatz beschrieben wird:
Ich möchte ein Tag oder einen Marker in die LaTeX-Datei einfügen, sodass ich im Fehlerfall den Marker abrufen und dann eine benutzerfreundliche Meldung zurückgeben kann. Etwa so: „In Abschnitt X liegt ein Fehler vor.“
Der \show
Befehl hält den Satz an und druckt eine Beschreibung des nächsten Tokens auf dem Terminal aus. Ebenso \showthe
wird der Wert eines Zählers angehalten und gedruckt.
Wenn der Satz angehalten wird, i
können Sie mit dem Befehl Token zur Verarbeitung einfügen.
Wenn Sie diese zusammenfügen, können Sie ein Makro schreiben, das die Abschnittsnummer anzeigt und diese bei Fehlern aufruft.
\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}
Hier ist ein Beispiel für eine Konsolensitzung:
! Undefined control sequence.
l.20 \foo
% undefined cs
? i \showsection
> 2.
\showsection ->\showthe \c@section
l.20 \foo
% undefined cs
? s
OK, entering \scrollmode...
Ich habe i \showsection
in die Eingabezeile des Terminals getippt und es wurde gedruckt: 2.
Sie können die Ausgabe nach Belieben verschönern.
Was das „Taggen“ des Dokuments angeht, würde ich das verwenden, was bereits vorhanden ist, und mich in diese Makros einklinken. Mir ist beispielsweise aufgefallen, dass ich den vorhandenen Zähler für Abschnittsnummern verwendet habe, anstatt etwas Neues zu erstellen. Wenn ich den Abschnitt drucken wollteNameIch könnte dem \section
Makro Befehle hinzufügen, die den Abschnittstitel in einem Makro speichern und \show
stattdessen Folgendes tun. (Das habe ich nicht gemacht, denn wenn Sie die Quelle lesen, werden Sie sehen, dass es \section
sich nicht um ein einfaches Makro handelt.)
Antwort2
Sie können einfach eine Definition wie folgt erstellen:
\def\thissection{section X}
dann können Sie in den von Ihnen kontrollierten Fehlermeldungen diesen Befehl verwenden
\PackageError{mypackage}{You made a mistake in \thissection: try harder}{}
und es wird die aktuelle Definition übernommen.
Sie können jedoch den Fehlerhandler von TeX selbst nicht anpassen. Wenn der Benutzer beispielsweise einen Befehl falsch eintippt, \fooobar
gibt TeX den Fehler „undefinierter Befehl“ aus und Sie können die verwendete Fehlermeldung nicht anpassen.