![Negativen Vspace zum Funktionieren bringen](https://rvso.com/image/330738/Negativen%20Vspace%20zum%20Funktionieren%20bringen.png)
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 \vspace
Negativ 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 \par
nach der schließenden Klammer verschieben, verschwindet der Fehler, aber dann \vspace
wird das in allen Fällen ignoriert.
Antwort1
Das Problem liegt darin, wie Sie \romaji
Kursivschrift 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 \par
einfach 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}