![Fazendo com que o vspace negativo se comporte](https://rvso.com/image/330738/Fazendo%20com%20que%20o%20vspace%20negativo%20se%20comporte.png)
Meu código TeX (incluindo parâmetros nas definições de comando) que cria folhas de letras e folhas de acordes de músicas é gerado dinamicamente por outro código que acessa dados do banco de dados e os processa linha por linha, então meu MWE simplificado pode parecer estranho, mas tenha paciência comigo.
A intenção do trecho de código que você vê é que, além do espaçamento básico entre linhas associado aos dois tamanhos de fonte (que é importante quando as linhas são quebradas), há 0,3em adicionais entre cada "parágrafo" (linha da letra) para maior clareza. No entanto, sempre que uma linha de romaji ocorre imediatamente após uma linha de japonês, não quero aquele parskip extra, então tento negá-lo com um \vspace
negativo do mesmo valor. Até agora, tudo bem - o seguinte arquivo 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}
Mas quando um estilo para romaji é adicionado (no meu caso de teste, itálico), ele quebra e eu obtenho um enorme espaço extra. A única diferença entre as capturas de tela esquerda e direita abaixo é a adição de \textit{...}
na definição do comando romaji:
\newcommand{\romaji}[1]{\begingroup\fontsize{10}{11.5}\selectfont
\textit{{#1}}\endgroup}
Aqui está a saída dos dois:
espaçamento misterioso http://l4jp.com/tmp/TeX-tests.png
A reclamação no arquivo de log é:
Runaway argument?
{{sambi\ shite\ me\ o\ muketeru,\ anata\ ni !
Paragraph ended before \text@command was complete.
Isso faz sentido, mas só recebo esse erro quando existe \textit{}
- talvez o analisador não consiga navegar entre colchetes duplos? Mover o \par
após a chave de fechamento faz com que o erro desapareça, mas então o \vspace
é ignorado em todos os casos.
Responder1
O problema está em como você está dizendo \romaji
para usar itálico. O comando \textit{}
espera um argumento, portanto não pode lidar com quebras de parágrafo. É por isso que reclama quando encontra \par
. Uma opção é simplesmente omitir \par
o final de cada \romaji
comando. Talvez a melhor opção seja usar {\itshape …}
, que se aplica ao que segue e pode lidar com quebras de parágrafo. Veja o seguinte MWE como exemplo.
\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}