![Was ist eine gute Quellcode-Verwaltungstechnik, um Floats mit SyncTeX schnell zu positionieren?](https://rvso.com/image/348620/Was%20ist%20eine%20gute%20Quellcode-Verwaltungstechnik%2C%20um%20Floats%20mit%20SyncTeX%20schnell%20zu%20positionieren%3F.png)
Das Positionieren eines Floats in einem Dokument erfordert normalerweise nicht nur das Ändern von Modifikatoren wie [t]
usw., sondern auch das Verschieben des Codes – insbesondere figure*
von Umgebungen in twocolumn
Dokumenten, die vom Compiler vor der Seite gesehen werden müssen, auf der sie tatsächlich erscheinen sollen.
Das mehrmalige Verschieben insbesondere einer langen Float-Tabelle kann recht lästig sein; außerdem führt dies bei der Verwendung einer Versionskontrollsoftware zu erheblichen Fehlern, diff
wo tatsächlich keine derartigen erheblichen Änderungen stattgefunden haben, und führt zum Abbruch der blame
Funktion.
Eine Möglichkeit, die ich ausprobiert habe, ist
\newcommand{\figureImportantResult}{\begin{figure}...\end{figure}}
(zum Beispiel in der Präambel) und nur herumbewegen \figureImportantResult
. Das funktioniert ganz gut und löst die oben genannten Probleme (nur einzeilige Änderungen, die die figure
Umgebung nicht betreffen). SyncTeX versteht das jedoch nicht ganz: Jeder Float ist nur mit der entsprechenden Zeile verknüpft , nicht mit der Definition der Umgebung – daher wird das Anwenden von Änderungen an der Umgebung umständlicher. Dasselbe gilt für Konstruktionen, die das Paket \figure...
verwenden (siehecatchfilebetweentags
diese Antwort).
Wie kann ich das am besten umgehen? \include
/ \input
würde wahrscheinlich funktionieren, aber ich möchte das gesamte Dokument in einer Datei speichern (einige Herausgeber bevorzugen/verlangen das). Ich weiß, dass ich \include
/ \input
vor der Übermittlung programmgesteuert durch den Inhalt der jeweiligen Dateien ersetzen kann, aber das ist nicht das, was ich am liebsten tun würde. Kann ich SyncTeX auf einen besseren Ort für diesen Code hinweisen? Gibt es eine Alternative dazu, \newcommand
die SyncTeX versteht?
Antwort1
Das ist vielleicht nicht schön, aber es funktioniert. Vielleicht inspiriert es jemanden, eine bessere Antwort zu posten:
% FIGURE DEFINITION
\ifdefined\whichfigure\begin{myfigures}
\definefigure{FigA}{%
AAA
}
\definefigure{FigB}{%
BBB
}
\definefigure{FigD}{%
DDD
}
\definefigure{FigE}{%
EEE
}
\end{myfigures}\fi
\documentclass{article}
% PREAMBLE CODE
\newenvironment{myfigures}{%
\let\shownfigure\relax%
}{%
\if\shownfigure\relax%
\PackageWarning{\string\showfigure}{Figure `\whichfigure' not defined}%
\fi%
\endinput%
}
\newcommand{\definefigure}[2]{%
\def\thisfigure{#1}%
\ifx\whichfigure\thisfigure%
\let\shownfigure\thisfigure%
#2%
\fi%
}
\newcommand{\showfigure}[1]{%
\def\whichfigure{#1}%
\input{\jobname}%
}
% END OF PREAMBLE CODE
\begin{document}
% FIGURE INCLUSION
\showfigure{FigA}
\showfigure{FigB}
\showfigure{FigC}
\showfigure{FigE}
\end{document}