Wie ist es möglich, versteckte Daten in LaTeX einzufügen?

Wie ist es möglich, versteckte Daten in LaTeX einzufügen?

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 \showBefehl hält den Satz an und druckt eine Beschreibung des nächsten Tokens auf dem Terminal aus. Ebenso \showthewird der Wert eines Zählers angehalten und gedruckt.

Wenn der Satz angehalten wird, ikö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 \showsectionin 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 \sectionMakro Befehle hinzufügen, die den Abschnittstitel in einem Makro speichern und \showstattdessen Folgendes tun. (Das habe ich nicht gemacht, denn wenn Sie die Quelle lesen, werden Sie sehen, dass es \sectionsich 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, \fooobargibt TeX den Fehler „undefinierter Befehl“ aus und Sie können die verwendete Fehlermeldung nicht anpassen.

verwandte Informationen