Idee für Überarbeiten-Befehle für LaTeX à la Word

Erstellung eines Literaturverzeichnisses mit BibTeX, Biber, BibLaTeX und Co.


Xenara
Forum-Meister
Forum-Meister
Beiträge: 682
Registriert: Mi 25. Nov 2009, 09:41

Idee für Überarbeiten-Befehle für LaTeX à la Word

Beitrag von Xenara »

Hi,

aus aktuellem Anlass muss ich sowas wie die Überarbeiten-Funktion von Word für LaTeX nutzen, um Anmerkungen und Korrekturen in ein Paper einzufügen.
Da ich dazu für meine Zwecke nichts fertiges und passendes gefunden habe, habe ich angefangen, mir mit newcommands, todonotes und ulem was zu basteln, das ich nicht vorenthalten will.

In den ersten Versuchen hat es geklappt, der grosse Härtetest steht aber noch aus.

Feature:
- man kann die Kommentare über die "disable"-Funktion von todonotes ausschalten und hat nur das korrigierte Dokument

Bugs:
- in der unten geposteten Version bisher noch keine gefunden

Wishlist:
- mehrere Überarbeiter ermöglichen
- weniger Warnungen von wegen "Marginpar moved"
- ein paar Features über optionale Argumente einbauen
- eventuell eine automatische Nummerierung

Info:
- Dass hier nichts automatisch nummeriert wird, ist Absicht, da ich die Anmerkungen von Reviewern und die Kommentare im Dokument verknüpfen muss, und das geht nur über manuelle Nummern (z.B. 1-1).

Ich wäre sehr an einem Feedback interessiert.

Viele Grüsse,
Xenara

Hier mein momentaner Stand:
\documentclass{scrreprt} 
\usepackage[ngerman]{babel} 
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{xcolor}

\usepackage[normalem]{ulem} %emphasize weiterhin kursiv

\usepackage{hyperref}
\usepackage[%
colorinlistoftodos,%
%disable% wirkt sich auch auf die "Überarbeiten"-Befehle aus!
]{todonotes}

%------------
% Neue Befehle zum Überarbeiten von Text à la Word:
%
% Ersetzen-Funktion \replace{alter Text}{neuer Text}{Anmerkung/Kommentarnummer}
\makeatletter
\if@todonotes@disabled%
\newcommand{\replace}[3]{#2}
\else% \if@todonotes@disabled
\newcommand{\replace}[3]{%
	\textcolor{blue}{%
		#2 %NEU; Das Leerzeichen stimmt hier! Sonst klebt der Text von neu an alt.
		\sout{#1}%ALT durchgestrichen
		\todo[linecolor=blue, backgroundcolor=blue!10,bordercolor=blue]{\##3}%
	}%
}
\fi
\makeatother

% Einfügen-Funktion \add{eingefügter Text}{Anmerkung/Kommentarnummer}
\makeatletter
\if@todonotes@disabled%
\newcommand{\add}[2]{#1}
\else% \if@todonotes@disabled
\newcommand{\add}[2]{%
	\textcolor{red}{%
		#1%
		\todo[linecolor=red, backgroundcolor=red!10,bordercolor=red]{\##2}%
	}%
}
\fi
\makeatother

% Kommentarfunktion \comment{Zu Kommentierender Text}{Kommentar}{Anmerkung/Kommentarnummer}
\makeatletter
\if@todonotes@disabled%
\newcommand{\comment}[3]{#1}
\else% \if@todonotes@disabled
\newcommand{\comment}[3]{%
	\textcolor{orange}{%
		#1%
		\todo[linecolor=orange, backgroundcolor=orange!10,bordercolor=orange]{\##3: #2}%
	}%
}
\fi
\makeatother

% Kommentarfunktion \wiggle{Zu unterschlängelnder Text}{Anmerkung/Kommentarnummer}
\makeatletter
\if@todonotes@disabled%
\newcommand{\wiggle}[3]{#1}
\else% \if@todonotes@disabled
\newcommand{\wiggle}[3]{%
	\textcolor{green}{%
		\uwave{#1}%
		\todo[linecolor=green, backgroundcolor=green!10,bordercolor=green]{\##3: #2}%
	}%
}
\fi
\makeatother
%------------



\begin{document}
\listoftodos[Kommentarliste]
\clearpage


Hier wird \replace{alt}{neu}{1-1} ersetzt.

Hier gehts um Text, \add{eingefügten}{2-2} Text.

Und hier steht ein Kommentar, nämlich \comment{ein Kommentar zum Satz}{Hier gibts was dazu zu sagen}{3-3}. Und mal ein ganz normaler Text ohne irgendwelche Anmerkungen.

Das hier \wiggle{formuliert ganz toll das sein}{Yoda lässt grüssen.}{1-5}. Zum Schluss noch so ein paar Wörter.

\end{document}
Dateianhänge
Test-4.pdf
(39.36 KiB) 611-mal heruntergeladen

gehess
Forum-Century
Forum-Century
Beiträge: 172
Registriert: Do 8. Apr 2010, 22:44

Beitrag von gehess »

Hey Xenara,

vielen Dank fürs Posten! Sieht sehr interessant aus! Allerdings bin ich mir noch nicht so ganz sicher, ob es nicht doch einfacher ist, die Anmerkungen über einen Pdf-Viewer (mache das immer mit dem XchangeViewer) einzufügen. Wenn der Quellcode danach ja noch weiter verwendet werden soll, könnte es bei einer Arbeit mit großem Umfang doch recht umständlich sein, die Befehle für die Anmerkungen wieder zu entfernen. Oder gibts dafür auch ein besonderes Vorgehen?
Also nochmal danke.
Gruß
Gerd

Xenara
Forum-Meister
Forum-Meister
Beiträge: 682
Registriert: Mi 25. Nov 2009, 09:41

Beitrag von Xenara »

Die Vorgabe bei mir ist leider, dass man das File nachher als LaTeX (oder Word...) hochladen muss, PDF als Möglichkeit wird nicht angegeben. Sonst hätte ich auch lieber das verwendet.

schmendrich
Forum-Century
Forum-Century
Beiträge: 136
Registriert: Mo 2. Mär 2009, 19:18

Beitrag von schmendrich »

Sehr schön,

was hälst Du von einer Option, mit der einzelne Änderungen "akzeptiert" werden? Ich denke hier z.\,B. an Verträge, die immer wieder hin und her gesendet werden und Punkt für Punkt wieder und wieder geändert werden und deren Änderungen Punkt für Punkt übernommen werden.

Á la:
Hier wird \replace[accept]{alt}{neu}{1-1} ersetzt. 
Aber da man sowieso an die Textstellen im Quelltext ran muss, kann man natürlich auch alles "überflüssige" händisch streichen und nur die Änderung stehen lassen.

Tolle Sache, besonders das "alles freischalten" mit disable.

Grüße
schmendrich

schmendrich
Forum-Century
Forum-Century
Beiträge: 136
Registriert: Mo 2. Mär 2009, 19:18

Beitrag von schmendrich »

Hallo

Weil ja die Erinnerung an solche Befehle manchmal streikt ("wie war das noch gleich? was muss ich übergeben?"), kann man sich z.B. in Vim mit der LaTeX-Suite ganz gut behelfen.
Hierzu trägt man die Befehle einfach wie folgt in der custommacros.vim ein.
"Befehle fuers Ueberarbeiten von LaTeX-Texten
"Ersetzen
TexLet g:Tex_Com_replace = "\\replace{<+alter Text+>}{<+neuen Text einfuegen+>}{<+Kommentar/Kommentarnummer+>}<++>" 

"Hinzufügen
TexLet g:Tex_Com_add = "\\add{<+zusaetzlichen Text eingefuegen+>}{<+Kommentar/Kommentarnummer+>}<++>" 

"Kommentieren
TexLet g:Tex_Com_comment = "\\comment{<+zu kommentierender Satz+>}{<+Textkommentar einfuegen+>}{<+Randkommentar einfuegen+>}<++>" 

"Hervorheben/Kommentieren
TexLet g:Tex_Com_wiggle = "\\wiggle{<+zu unterstreichender Satz+>}{<+Kommentar zum Satz+>}{<+Kommentar/Kommentarnummer+>}<++>" 
Wie nutzen? Ganz einfach. Es genügt z.B. "comment" zu schreiben (ohne Anführungszeichen) gefolgt von einem Druck auf <F7> und es erscheint:
 \comment{<+zu kommentierender Satz+>}{<+Textkommentar einfuegen+>}{<+Randkommentar einfuegen+>}<++> 
Der Curser steht sofort beim hinweisgebenden Platzhalter. Einfach weitertippen und eintragen, worauf der Platzhalter hingewiesen hat.
In die nächste Klammer muss nicht geklickt werden; es genügt ein <CRTL> j und der Cursor steht auf "Textkommentar einfügen", usw.

Das hat nur bedingt mit Xenaras Code zu tun. Er kommt mir nur sehr entgegen und das ist eine Möglichkeit, ihre Befehle bequem zu nutzen.

Sorry fürs Off-Topic

Grüße
schmendrich

Edit: Ich habe gestern im Eifer des Gefechts die Befehle für die customermacros.vim nicht in der richtigen Syntax angegeben. Korrigiert.
Zuletzt geändert von schmendrich am Sa 18. Dez 2010, 13:24, insgesamt 1-mal geändert.

Xenara
Forum-Meister
Forum-Meister
Beiträge: 682
Registriert: Mi 25. Nov 2009, 09:41

Beitrag von Xenara »

Das kleine vim-Tutorial finde ich prima, obwohl ich mittlerweile bequem geworden bin und mit TeXnicCenter arbeite.
schmendrich hat geschrieben: Tolle Sache, besonders das "alles freischalten" mit disable.
Danke :D
Das mit dem "disable" auf die newcommands anwenden war so total einfach, dabei hab ich am Anfang gar nicht gedacht, dass ich das hinbekomme.
schmendrich hat geschrieben:Was hälst Du von einer Option, mit der einzelne Änderungen "akzeptiert" werden? Ich denke hier z.\,B. an Verträge, die immer wieder hin und her gesendet werden und Punkt für Punkt wieder und wieder geändert werden und deren Änderungen Punkt für Punkt übernommen werden.

Á la:
Hier wird \replace[accept]{alt}{neu}{1-1} ersetzt. 
Meinst du sowas in die Richtung wie unten? Ob man ins optionale Argument [accepted], [das ist toll] einträgt oder es leer lässt, ist egal, nur bei Ablehnung muss [rejected] drinstehen.
Die Option gibts (momentan) nur bei \add und \replace, bei \comment und \wiggle dachte ich, macht es keinen Sinn, ich lass mich auch gern überzeugen. Vielleicht am ehesten was im Stil einer zusätzlichen Anmerkung?
Konsequenterweise müsste man beim jetzigen Stand Autoren-/Überarbeiterkürzel einführen, damit die Kommentare zuzuordnen sind.
\documentclass{scrreprt} 
\usepackage[ngerman]{babel} 
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{xcolor}

\usepackage[normalem]{ulem} %emphasize weiterhin kursiv

\usepackage{hyperref}
\usepackage[%
colorinlistoftodos,%
%disable% wirkt sich auch auf die "Überarbeiten"-Befehle aus!
]{todonotes}

%------------
% Neue Befehle zum Überarbeiten von Text à la Word:
%
% Ersetzen-Funktion \replace["rejected" oder sonstiges/leer]{alter Text}{neuer Text}{Anmerkung/Kommentarnummer}
% Wird das optionale Argument "rejected" verwendet, so wird der neue Text durchgestrichen, der alte
% bleibt normal und wird mit einem hochgestellten "Abgelehnt!" versehen, dto. in der Randfahne
\makeatletter
\if@todonotes@disabled%
\newcommand{\replace}[3]{#2}
\else% \if@todonotes@disabled
\newcommand{\replace}[4][]{%
	\ifthenelse{\equal{#1}{rejected}}{%
			\textcolor{blue}{%
				#2 %ALT bleibt; Das Leerzeichen stimmt hier! Sonst klebt der Text von neu an alt.
				\sout{#3}\textsuperscript{Abgelehnt!}%NEU durchgestrichen
				\todo[linecolor=blue, backgroundcolor=blue!10,bordercolor=blue]{\##4: Abgelehnt!}%
				}%
	}{%
			\textcolor{blue}{%
				#3 %NEU; Das Leerzeichen stimmt hier! Sonst klebt der Text von neu an alt.
				\sout{#2}%ALT durchgestrichen
				\todo[linecolor=blue, backgroundcolor=blue!10,bordercolor=blue]{\##4}%
			}%
		}%
}
\fi
\makeatother

% Einfügen-Funktion \add["rejected" oder sonstiges/leer]{eingefügter Text}{Anmerkung/Kommentarnummer}
% Wird das optionale Argument "rejected" verwendet, so wird der eingefügte Text durchgestrichen und %
% mit einem hochgestellten "Abgelehnt!" versehen, dto. in der Randfahne
\makeatletter
\if@todonotes@disabled%
\newcommand{\add}[2]{#1}
\else% \if@todonotes@disabled
\newcommand{\add}[3][]{%
	\ifthenelse{\equal{#1}{rejected}}{%
		\textcolor{red}{%
			\sout{#2}\textsuperscript{Abgelehnt!}%
			\todo[linecolor=red, backgroundcolor=red!10,bordercolor=red]{\##3: Abgelehnt!}%
			}
	}{%
		\textcolor{red}{%
			#2%
			\todo[linecolor=red, backgroundcolor=red!10,bordercolor=red]{\##3}%
		}%
}%
}
\fi
\makeatother

% Kommentarfunktion \comment{Zu Kommentierender Text}{Kommentar}{Anmerkung/Kommentarnummer}
\makeatletter
\if@todonotes@disabled%
\newcommand{\comment}[3]{#1}
\else% \if@todonotes@disabled
\newcommand{\comment}[3]{%
	\textcolor{orange}{%
		#1%
		\todo[linecolor=orange, backgroundcolor=orange!10,bordercolor=orange]{\##3: #2}%
	}%
}
\fi
\makeatother

% Kommentarfunktion \wiggle{Zu unterschlängelnder Text}{Anmerkung/Kommentarnummer}
\makeatletter
\if@todonotes@disabled%
\newcommand{\wiggle}[3]{#1}
\else% \if@todonotes@disabled
\newcommand{\wiggle}[3]{%
	\textcolor{green}{%
		\uwave{#1}%
		\todo[linecolor=green, backgroundcolor=green!10,bordercolor=green]{\##3: #2}%
	}%
}
\fi
\makeatother
%------------



\begin{document}
\listoftodos[Kommentarliste]
\clearpage


Hier wird \replace[rejected]{alt}{neu}{1-1} ersetzt.

Hier gehts um Text, \add[rejected]{eingefügten}{2-2} Text.

Und hier steht ein Kommentar, nämlich \comment{ein Kommentar zum Satz}{Hier gibts was dazu zu sagen}{3-3}. Und mal ein ganz normaler Text ohne irgendwelche Anmerkungen.

Das hier \wiggle{formuliert ganz toll das sein}{Yoda lässt grüssen.}{1-5}. Zum Schluss noch so ein paar Wörter.

\end{document}

schmendrich
Forum-Century
Forum-Century
Beiträge: 136
Registriert: Mo 2. Mär 2009, 19:18

Beitrag von schmendrich »

Hm,

gut. Zumindest wird eine Ablehnung gleich deutlich. Ist halt der umgekehrte Weg zu "Änderung akzeptiert":

Was mir aufgefallen ist: die disable-Option funktioniert nun nicht mehr.

Für die disable/rejected-Kombination wäre es toll, wenn nach dem Einschalten der Option disable, der Urzustand des Textes angezeigt wird (Änderung ist ja durch rejected abgelehnt).
Bei "accepted" wird hingegen die Änderung "übernommen" (das ist in Deinem Code ja schon so).

Vielleicht fehlt auch noch ein Befehl \delete?
Ich spreche wieder für Verträge, die mit Word bearbeitet werden. Häufig werden dort Passagen aus dem Vertrag gestrichen. Der Text wird dann durchgestrichen dargestellt und in der Randbemerkung steht dann "gelöscht durch XY am..."
Am Ende, wenn dann alle Punkte durchgekaut wurden und von allen Seiten akzeptiert, wird auf "Änderungen übernehmen" geklickt (entspricht ja hier der disable-Option) und der durchgestrichene Text verschwindet tatsächlich.

Hm. Aber ich bin schon mal Fan Deines Makros. ;)

Grüße
schmendrich

Xenara
Forum-Meister
Forum-Meister
Beiträge: 682
Registriert: Mi 25. Nov 2009, 09:41

Beitrag von Xenara »

Vielen Dank fürs Testen, da hab ich gestern Abend einiges übersehen. Jetzt sollte die disable-Funktion wieder funktionieren, und auch das "rejected" berücksichtigen.
Kommentare/Kürzel kann man der Einfachheit halber im letzten zwingenden Argument unterbringen, im Beispiel ists mal drin.
\documentclass{scrreprt}
\usepackage[ngerman]{babel}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{xcolor}

\usepackage[normalem]{ulem} %emphasize weiterhin kursiv

\usepackage{hyperref}
\usepackage[%
colorinlistoftodos,%
%disable% wirkt sich auch auf die "Überarbeiten"-Befehle aus!
]{todonotes}

%------------
% Neue Befehle zum Überarbeiten von Text à la Word:
%
% Ersetzen-Funktion \replace["rejected" oder sonstiges/leer]{alter Text}{neuer Text}{Anmerkung/Kommentarnummer}
% Wird das optionale Argument "rejected" verwendet, so wird der neue Text durchgestrichen, der alte
% bleibt normal und wird mit einem hochgestellten "Abgelehnt!" versehen, dto. in der Randfahne
\makeatletter
\if@todonotes@disabled%
\newcommand{\replace}[4][]{%
% Bei disabled werden die Änderungen nicht übernommen, sondern der Ursprungstext belassen.
   \ifthenelse{\equal{#1}{rejected}}{%
            #2%ALT bleibt
   }{%
            #3%NEU
      }%
}
\else% \if@todonotes@disabled
\newcommand{\replace}[4][]{%
   \ifthenelse{\equal{#1}{rejected}}{%
         \textcolor{blue}{%
            #2 %ALT bleibt; Das Leerzeichen stimmt hier! Sonst klebt der Text von neu an alt.
            \sout{#3}\textsuperscript{Abgelehnt!}%NEU durchgestrichen
            \todo[linecolor=blue, backgroundcolor=blue!10,bordercolor=blue]{\##4: Abgelehnt!}%
            }%
   }{%
         \textcolor{blue}{%
            #3 %NEU; Das Leerzeichen stimmt hier! Sonst klebt der Text von neu an alt.
            \sout{#2}%ALT durchgestrichen
            \todo[linecolor=blue, backgroundcolor=blue!10,bordercolor=blue]{\##4}%
         }%
      }%
}
\fi
\makeatother

% Einfügen-Funktion \add["rejected" oder sonstiges/leer]{eingefügter Text}{Anmerkung/Kommentarnummer}
% Wird das optionale Argument "rejected" verwendet, so wird der eingefügte Text durchgestrichen und %
% mit einem hochgestellten "Abgelehnt!" versehen, dto. in der Randfahne
\makeatletter
\if@todonotes@disabled%
% Bei disabled werden die Änderungen nicht übernommen, sondern der Ursprungstext belassen.
\newcommand{\add}[3][]{%
												\ifthenelse{\equal{#1}{rejected}}{%
												\ignorespaces
												}{%
												#2%
												}%
}
\else% \if@todonotes@disabled
\newcommand{\add}[3][]{%
   \ifthenelse{\equal{#1}{rejected}}{%
      \textcolor{red}{%
         \sout{#2}\textsuperscript{Abgelehnt!}%
         \todo[linecolor=red, backgroundcolor=red!10,bordercolor=red]{\##3: Abgelehnt!}%
         }
   }{%
      \textcolor{red}{%
         #2%
         \todo[linecolor=red, backgroundcolor=red!10,bordercolor=red]{\##3}%
      }%
}%
}
\fi
\makeatother

% Löschen-Funktion \delete["rejected" oder sonstiges/leer]{alter Text}{neuer Text}{Anmerkung/Kommentarnummer}
% Wird das optionale Argument "rejected" verwendet, so wird der Text nicht durchgestrichen sondern bleibt,
% und wird mit einem hochgestellten "Abgelehnt!" versehen, dto. in der Randfahne
\makeatletter
\if@todonotes@disabled%
\newcommand{\delete}[3][]{%
% Bei disabled werden die Änderungen nicht übernommen, sondern der Ursprungstext belassen.
   \ifthenelse{\equal{#1}{rejected}}{%
            #2%ALT bleibt
   }{%
   \ignorespaces%
      }%
}
\else% \if@todonotes@disabled
\newcommand{\delete}[3][]{%
   \ifthenelse{\equal{#1}{rejected}}{%
         \textcolor{yellow}{%
            #2\textsuperscript{Text bleibt!}% nicht durchgestrichen
            \todo[linecolor=yellow, backgroundcolor=yellow!10,bordercolor=yellow]{\##3: Text bleibt!}%
            }%
   }{%
         \textcolor{yellow}{%
            \sout{#2}% durchgestrichen
            \todo[linecolor=yellow, backgroundcolor=yellow!10,bordercolor=yellow]{\##3}%
         }%
      }%
}
\fi
\makeatother


% Kommentarfunktion \comment{Zu Kommentierender Text}{Kommentar}{Anmerkung/Kommentarnummer}
\makeatletter
\if@todonotes@disabled%
\newcommand{\comment}[3]{#1}
\else% \if@todonotes@disabled
\newcommand{\comment}[3]{%
   \textcolor{orange}{%
      #1%
      \todo[linecolor=orange, backgroundcolor=orange!10,bordercolor=orange]{\##3: #2}%
   }%
}
\fi
\makeatother

% Kommentarfunktion \wiggle{Zu unterschlängelnder Text}{Anmerkung/Kommentarnummer}
\makeatletter
\if@todonotes@disabled%
\newcommand{\wiggle}[3]{#1}
\else% \if@todonotes@disabled
\newcommand{\wiggle}[3]{%
   \textcolor{green}{%
      \uwave{#1}%
      \todo[linecolor=green, backgroundcolor=green!10,bordercolor=green]{\##3: #2}%
   }%
}
\fi
\makeatother
%------------



\begin{document}
\listoftodos[Kommentarliste]
\clearpage


Hier wird \replace[rejected]{alt}{neu}{1-1} ersetzt.

Hier gehts um Text, \add[rejected]{eingefügten}{2-2} Text.

Hier wird \delete[]{viel Text gelöscht, etwas mehr, um zu sehen, obs klappt}{5-5: Ich sage, das wird nicht gelöscht!} ein Grossteil des Satzes gelöscht.

Und hier steht ein Kommentar, nämlich \comment{ein Kommentar zum Satz}{Hier gibts was dazu zu sagen}{3-3}. Und mal ein ganz normaler Text ohne irgendwelche Anmerkungen.

Das hier \wiggle{formuliert ganz toll das sein}{Yoda lässt grüssen.}{1-5}. Zum Schluss noch so ein paar Wörter.

\end{document}


schmendrich
Forum-Century
Forum-Century
Beiträge: 136
Registriert: Mo 2. Mär 2009, 19:18

Beitrag von schmendrich »

Prima, funktioniert.

Grüße
schmendrich

Antworten