
Auf dieser Seite gibt es noch einige andere Fragen zu verwandten Themen, ich habe jedoch keine gefunden, die genau mein Problem abdeckt.
Ich habe einen Text (konvertiert aus XML), der den Apostroph '
mit drei verschiedenen Bedeutungen verwendet: Zitatanfang, Zitatende und für Abkürzungen und Genitiv ( can't
, cats'
, usw.). Gibt es eine Möglichkeit, den Apostroph so beizubehalten, '
wie er ist inalle Fälle außer den Anführungszeichen am Anfang, wo es durch `? ersetzt werden muss. Zu Ihrer Information: Ich verwende in meinem Originaldokument tatsächlich XeLaTeX, bin mir aber nicht sicher, ob das eine Rolle spielt.
\documentclass{memoir}
\begin{document}
He said, 'the cats' hats can't fit me'.
\end{document}
Ich vermute, man kann folgendermaßen feststellen, welches man verwenden soll:
- Wenn dem Apostroph ein Textzeichen vorangestellt ist, behalten Sie es bei
- Wenn etwas anderes davor steht (einschließlich Leerzeichen und gar nichts), ändern Sie es in `
Notiz:Abkürzungen mit Apostrophen am Wortanfang (wie in 'tis
) kommen in meinen Dokumenten wahrscheinlich nicht vor.
Antwort1
Ich glaube, Sie möchten ‘
(Anführungszeichen öffnen) nur, wenn '
davor ein Leerzeichen steht oder gar nichts.
Dies kommt auch mit dem Mathematikmodus zurecht.
\documentclass{memoir}
\makeatletter
\let\apostrophe'
\catcode`'=\active
\protected\def'{%
\ifvmode
`%
\else
\ifmmode
\expandafter\expandafter\expandafter\active@math@prime % for math
\else
\ifdim\lastskip>0pt
`%
\else
\apostrophe
\fi
\fi
\fi
}
% redefine \pr@m@s to look for an active '
\def\pr@m@s{%
\ifx'\@let@token
\expandafter\pr@@@s
\else
\ifx^\@let@token
\expandafter\expandafter\expandafter\pr@@@t
\else
\egroup
\fi
\fi}
\makeatother
\begin{document}
He said, 'the cats' hats can't fit me'.
'Ouch,' he said.
Some 'derivatives' $f'+f''+f'''$.
\end{document}
Beachten Sie, dass die zweite Zeile gemäß Ihrer Angabe ein öffnendes Anführungszeichen nach dem Komma enthalten würde.
Anmerkungen
\protected
wird verwendet oder\section{A 'quoted'}
würde ausfallen\section{'quoted'}
wird scheitern und es gibt nicht viel, was man dagegen tun kann
Das Folgende scheint das Problem mit Abschnitts- und Kapiteltiteln zu beheben, wenn ein nachstehendes Anführungszeichen erscheint.
pdflatex
Beim Kompilieren mit beiden xelatex
ist das Ergebnis das gleiche.
\documentclass{memoir}
\usepackage{ifxetex}
\ifxetex
\usepackage{fontspec}
% \setmainfont{Linux Libertine O}
\fi
\makeatletter
% fix latex's habit of resetting ' during \write
\begingroup
\obeylines\obeyspaces%
\catcode`\'\active%
\gdef\@resetactivechars{%
\def^^M{\@activechar@info{EOL}\space}%
\def {\@activechar@info{space}\space}}%
\endgroup
\renewcommand{\cftchapteraftersnumb}{\hskip1sp\relax}
\let\ORIM@sect\M@sect
\def\M@sect#1#2#3#4#5#6[#7][#8]#9{%
\ORIM@sect{#1}{#2}{#3}{#4}{#5}{#6}[\hskip1sp\relax#7][\hskip1sp\relax#8]{\hskip1sp\relax#9}%
}
\catcode`'=\active
\protected\def'{%
\ifvmode
`%
\else
\ifmmode
\expandafter\expandafter\expandafter\active@math@prime % for math
\else
\relax
\ifdim\lastskip=1sp
`%
\else
\ifdim\lastskip>0pt
`%
\else
\rq
\fi
\fi
\fi
\fi
}
% redefine \pr@m@s to look for an active '
\def\pr@m@s{%
\ifx'\@let@token
\expandafter\pr@@@s
\else
\ifx^\@let@token
\expandafter\expandafter\expandafter\pr@@@t
\else
\egroup
\fi
\fi}
\makeatother
\begin{document}
\tableofcontents
\chapter{'Chapter'}
\section{'Quoted'}
He said, 'the cats' hats can't fit me'.
'Ouch,' he said.
Some 'derivatives' $f'+f''+f'''$.
\end{document}
Antwort2
Wenn Apostroph und Anführungszeichen nicht unterschieden werden müssen, können Sie Folgendes versuchen:
\def\leftquote{`}\def\rightquote{'}
\catcode`\'=13
\def'{\ifvmode\leftquote \else \ifdim\lastskip=0pt \rightquote \else \leftquote\fi\fi}
He said, 'the cats' hats can't fit me'.
Wenn das Dokument solche „Anführungszeichen“ verwendet und Sie diese setzen müssen, können Sie die folgende Definition verwenden:
\def\leftqquote{``}\def\rightqqoute{''} % or another definition, can depend on fonts
% put this definition before \catcode`\'=13
\catcode`\"=13
\def"{\bgroup\def"{\rightqqoute\egroup}\leftqquote}
The normal "quotes" are here.
'
Bearbeiten: Da es Kommentare zum Mathematikmodus gab , wie „$f“$, füge ich diese Funktionalität hier hinzu:
\def\leftquote{`}\def\rightquote{'}
\catcode`\'=13
\def'{\ifmmode \expandafter\mathprime \else\ifvmode \leftquote \else
\ifdim\lastskip=0pt \rightquote \else \leftquote\fi\fi\fi}
\def\mathprime{^\bgroup\catcode`\'=12 \csname prim@s\endcsname}
Im Gegensatz zur akzeptierten Antwort schreibe ich das Makro nicht neu \pr@m@s
, sondern setze den Catcode nur vorübergehend auf 12 zurück. Diese Lösung funktioniert sowohl in einfachem TeX als auch in LaTeX, da \prim@s
Makro in beiden Makropaketen mit derselben Bedeutung verwendet wird.
Antwort3
Wenn ich Ihren Workflow richtig verstehe, sieht es so aus, als ob (a) es einen Prozess gibt, der eine kompilierbare .tex-Datei erstellt, der einige Probleme aufweist, und (b) Sie diese Probleme beheben müssen, bevor Sie die .tex-Datei durch LaTeX laufen lassen. Darüber hinaus scheint das Hauptproblem darin zu liegen, dass in der gesamten .tex-Datei „dumme“ (einfache) Anführungszeichen verwendet werden und dass Sie einen Weg finden möchten, einige der einfachen Anführungszeichen (auch Apostrophe genannt) durch Backquote-Zeichen (auch Backticks genannt) zu ersetzen. Sie haben nicht explizit angegeben, in welcher Sprache Ihr Dokument verfasst ist, daher gehe ich vorerst davon aus, dass es auf Englisch ist.
Wenn die problematischen Apostroph-Zeichen nur in der Satzmitte vorkommen (und daher durch Leerzeichen eingeleitet werden) und nicht am Zeilenanfang, könnten Sie vermutlich einen Editor starten und alle Vorkommen von
space-apostrophe
durch ersetzenspace-backtick
.Wenn die problematischen Apostrophe am Zeilenanfang auftreten können, müssen Sie prüfen, ob Ihr Editor eine Suchen-und-Ersetzen-Funktion für ausführen kann
newline_char-apostrophe
.newline_char-backtick
Da Sie nicht angegeben haben, welchen Editor (falls überhaupt) Sie wählen, kann ich Ihnen keine genaueren Ratschläge zur Vorgehensweise bei dieser Aufgabe geben.
Vorbehalt: Beide Methoden (und ähnlich automatisierte Methoden) werdennicht'tis
korrekte Ergebnisse zu erzielen, wenn Ihr Eingabetext "literarische" Ausdrücke wie -- kurz für " es ist" -- enthält . (Der Apostroph zeigt in solchen Fällen eine Auslassung und nicht den Beginn eines Zitats an und sollte dahernichtdurch ein Backtick ersetzt werden.)