Hallo, ich suche nach einem Befehl, der mir innerhalb eines zweispaltigen Textbereichs ( Öffne in Overleaf
\ref{asdf} ... \columnref{asdf} Bei StackExchange habe ich den Beitrag " Der Ansatz basiert auf: Öffne in Overleaf
\newcommand*\collabel[1]{\begingroup \protected@write\@auxout{}{\string\newlabel{col:#1}{{\if@firstcolumn 1\else 2\fi}{}{}{}{}}}\endgroup} Alternativ könnte ich auch eine Funktion in multicol anwenden, habe aber in der Doku nichts gefunden. Hat jemand von euch eine Idee, wie man eine zuverlässig richtige Spaltenzahl erhält? Viele Grüße Harald |
Das Folgende ist eine schnelle Implementierung dessen, was ich bereits für Einträge in den ToC geschrieben hatte, für Labels. Die Implementierung hier unterstützt kein Es erstellt ein Öffne in Overleaf
\documentclass{article} \usepackage{lipsum} \usepackage[left=1cm,right=1cm,top=1cm,bottom=1cm]{geometry} \usepackage{xcolor} %% necessary packages \usepackage[colaction]{multicol} \usepackage{etoolbox} \makeatletter \AtBeginDocument {% \let\collabel@label\label \patchcmd\collabel@label{\@bsphack}{}{}{\harders@labelpatch@error}% \patchcmd\collabel@label{\@esphack}{}{}{\harders@labelpatch@error}% } \newcommand\collabel[1] {% \@bsphack \collabel@label{#1}% \protected@write\@auxout{}{\string\harders@collabel{#1}}% \@esphack } \newcommand\harders@collabel[1] {% \expandafter\harders@collabel@\expandafter{\harders@cur@col}{#1}% } \newcommand\harders@collabel@[2] {% \global\@namedef{r@col@#2}{#1}% } \newcommand\colref[1] {% \@ifundefined{r@col@#1} {\@latex@warning{Column reference `#1' on page \thepage\space undefined}}% {\csname r@col@#1\endcsname}% } \newcounter{harders@col@count} \def\harders@patch@last {% \stepcounter{harders@col@count}% \protected@write\@auxout{}% {% \def\protect\harders@cur@col{\arabic{harders@col@count}}% }% } \def\harders@patch@else {% \ifmc@firstcol \setcounter{harders@col@count}{0}% \fi \harders@patch@last } \def\harders@patch@error {% \GenericError{} {Patching of \string\mc@col@status@write\space failed} {% Make sure `colaction` was set as an option for `multicol`.% \MessageBreak Else you're screwed, don't use the code provided here.\MessageBreak% } {No further help available.}% } \newcommand*\harders@labelpatch@error {% \GenericError{}{Patching of \string\label\space failed} {You shouldn't worry too much, that's not a big issue} {No further help available.}% } \pretocmd\mc@lastcol@status@write{\harders@patch@last}{}{\harders@patch@error} \pretocmd\mc@col@status@write{\harders@patch@else}{}{\harders@patch@error} \makeatother \begin{document} \begin{multicols*}{5} \lipsum[1] \lipsum[4] \textcolor{red} {here is the label (\refstepcounter{equation}\theequation\collabel{foo})} \lipsum[3] \lipsum[4-7] \textcolor{red}{here is the reference (\ref{foo}) in column \colref{foo}} \lipsum[8] \lipsum[9] \end{multicols*} \end{document} beantwortet 21 Mai '19, 14:16 Skillmon Hallo Skillmon, dein Code funktioniert im Beispiel sehr gut. Ich werde ihn bei Gelegenheit auf meine Bedürfnisse (Detektion des Spaltenwechsels im Index) umstricken und dann hier Bescheid sagen, ob es dort auch funktioniert. Danke dir!
(21 Mai '19, 21:16)
Harders
|
@Harders Eine Idee könnte sein:
1. Zeilennummern ergänzen (etwa lineno.sty), Zeilennummern unsichtbar machen (color{white} etc.)
2. Bei Platzhalter in Spalte aktuelle Zeilennummer auslesen und abspeichern.
3. Anhand von Gesamtzahl der der Zeilen ausrechnen, in welcher Spalte der Platzhalter steht (modulo usw., pgfmath / TikZ).
Aber: ich bekomme das für eine multicol-Umgebung gerade nicht hin.
Und: professioneller wäre vermutlich, wenn man den
\columnbreak
-Befehl der multicol-Umgebung kennt und entsprechend um eine Info manipuliert. Aber die 1. Methode könnte schon gehen.Für
multicol
habe ich mal etwas geschrieben, allerdings ging es dort um das Schreiben in das Inhaltsverzeichnis: https://tex.stackexchange.com/a/414638/117050@Skillmon Und wie kann man das anwenden? Ich habe das so verstanden: Er hat einen Befehl
\pos[1]
und den schreibt er z.B. in Spalte 3. Und dann nimmt er einen Befehl\Spalte{\pos[1]}
; und die Ausgabe davon istpos 1 steht in Spalte 3
. Kann natürlich sein, dass ich daneben liege. Falls nicht, finde ich das gar nicht so uninteressant.@cis ausgehend von meiner Lösung müsste man statt in die ToC-Datei in die .aux die momentane Spalte schreiben und die Definition der Labels so anpassen, dass die Spaltendefinition ausgewertet wird. Vielleicht kann ich später am Tag noch was ausprobieren.