Conseguir que el vspace negativo se comporte

Conseguir que el vspace negativo se comporte

Mi código TeX (incluidos los parámetros en las definiciones de comandos) que crea hojas de letras y hojas de acordes de canciones se genera dinámicamente mediante otro código que accede a los datos de la base de datos y los procesa línea por línea, por lo que mi MWE simplificado puede parecer extraño, pero tengan paciencia.

La intención del fragmento de código que ve es que, además del espacio entre líneas básico asociado con los dos tamaños de fuente (lo cual importa cuando las líneas se ajustan), hay 0,3 em adicionales entre cada "párrafo" (línea de letra) para mayor claridad. Sin embargo, cada vez que aparece una línea de romaji inmediatamente después de una línea de japonés, no quiero ese parskip adicional, así que trato de negarlo con un \vspacenegativo de la misma cantidad. Hasta ahora todo bien: el siguiente archivo funciona:

\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}

Pero cuando se agrega un estilo para romaji (en mi caso de prueba, cursiva), se rompe y obtengo una gran cantidad de espacio extra. La única diferencia entre las capturas de pantalla izquierda y derecha a continuación es la adición de \textit{...}en la definición del comando romaji:

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

Aquí está el resultado de los dos:

espaciado misterioso http://l4jp.com/tmp/TeX-tests.png

La queja en el archivo de registro es:

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

Eso tiene sentido, pero solo aparece ese error cuando está \textit{}ahí. ¿Quizás el analizador no puede navegar entre las llaves dobles? Mover \pardespués de la llave de cierre hace que el error desaparezca, pero luego \vspacese ignora en todos los casos.

Respuesta1

El problema radica en cómo le dices \romajique uses cursiva. El comando \textit{}espera un argumento, por lo que no puede manejar saltos de párrafo. Por eso se queja cuando lo encuentra \par. Una opción es simplemente omitirlo \paral final de cada \romajicomando. Quizás una mejor opción sea usar {\itshape …}, que se aplica a lo que sigue y puede manejar saltos de párrafo. Consulte el siguiente MWE para ver un ejemplo.

\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}

ingrese la descripción de la imagen aquí

información relacionada