Negativen Vspace zum Funktionieren bringen

Negativen Vspace zum Funktionieren bringen

Mein TeX-Code (einschließlich der Parameter in den Befehlsdefinitionen), der die Liedtexte und Akkordblätter erstellt, wird dynamisch von anderem Code generiert, der auf Datenbankdaten zugreift und diese Zeile für Zeile verarbeitet. Mein abgespecktes MWE erscheint daher möglicherweise seltsam, aber haben Sie Geduld mit mir.

Die Absicht des angezeigten Codeausschnitts ist, dass zusätzlich zum grundlegenden Zeilenabstand, der mit den beiden Schriftgrößen verknüpft ist (was beim Zeilenumbruch wichtig ist), zwischen jedem „Absatz“ (Textzeile) zur besseren Übersichtlichkeit zusätzliche 0,3 em vorhanden sind. Wenn jedoch eine Zeile Romaji unmittelbar auf eine Zeile Japanisch folgt, möchte ich diesen zusätzlichen Parskip nicht, also versuche ich, ihn durch ein \vspaceNegativ desselben Betrags zu negieren. So weit, so gut – die folgende Datei funktioniert:

\documentclass{ujarticle}
\usepackage[a4paper, margin=6mm]{geometry}
\usepackage{needspace}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\newcommand{\romaji}[1]{\begingroup\fontsize{10}{11.5}\selectfont
  {#1}\endgroup}
\newenvironment{stanza}
{
  \vspace{1em}
  \setlength{\parskip}{0.3em}
  \fontsize{12}{13.5}\selectfont
  \begin{samepage}
}
{
  \end{samepage}
}            

\begin{document}
\sffamily
\gtfamily
\raggedright
\raggedbottom
\pagestyle{empty}

\begin{stanza}
賛美して目を向けてる あなたに\par
\vspace{-0.3em}\nopagebreak
\romaji{sambi\ shite\ me\ o\ muketeru,\ anata\ ni\par}
\nopagebreak
もとめて待ち望んでる あなたを\par
\vspace{-0.3em}\nopagebreak
\romaji{motomete\ machi\ nozonderu,\ anata\ o\par}
\end{stanza}

\end{document}

Aber wenn ein Stil für Romaji hinzugefügt wird (in meinem Testfall kursiv), bricht es zusammen und ich bekomme einen riesigen Haufen zusätzlichen Platz. Der einzige Unterschied zwischen den linken und rechten Screenshots unten ist die Hinzufügung von \textit{...}in der Romaji-Befehlsdefinition:

\newcommand{\romaji}[1]{\begingroup\fontsize{10}{11.5}\selectfont
  \textit{{#1}}\endgroup}

Hier ist die Ausgabe der beiden:

mysteriöse Abstände http://l4jp.com/tmp/TeX-tests.png

Die Beschwerde in der Protokolldatei lautet:

Runaway argument?
{{sambi\ shite\ me\ o\ muketeru,\ anata\ ni !
Paragraph ended before \text@command was complete.

Das macht Sinn, aber ich erhalte diesen Fehler nur, wenn das \textit{}vorhanden ist - vielleicht kann der Parser die doppelten Klammern nicht navigieren? Wenn Sie das \parnach der schließenden Klammer verschieben, verschwindet der Fehler, aber dann \vspacewird das in allen Fällen ignoriert.

Antwort1

Das Problem liegt darin, wie Sie \romajiKursivschrift angeben. Der Befehl \textit{}erwartet ein Argument und kann daher keine Absatzumbrüche verarbeiten. Aus diesem Grund beschwert er sich, wenn er auf trifft . Eine Möglichkeit besteht darin, am Ende jedes Befehls \pareinfach wegzulassen . Vielleicht ist die Verwendung von vielleicht besser , da dies auf alles Folgende angewendet wird und Absatzumbrüche verarbeiten kann. Ein Beispiel finden Sie im folgenden MWE.\par\romaji{\itshape …}

\documentclass{article}
\newcommand{\romaji}[1]{\begingroup\fontsize{10}{11.5}\selectfont{\itshape {#1}}\endgroup}
\begin{document}

\textit{sambi\ shite\ me\ o\ muketeru,\ anata\ ni}

{\itshape sambi\ shite\ me\ o\ muketeru,\ anata\ ni\par}

\romaji{sambi\ shite\ me\ o\ muketeru,\ anata\ ni\par}
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen