
Tenho lido respostas a perguntas sobre látex no passado para resolver um problema que estou tendo. Estou usando uma fonte que contém símbolos e mapeando os símbolos para um comando latex. Para este MWE você pode usar qualquer fonte com símbolos que possam não ser encontrados no conjunto de caracteres latinos.Aquié o que estou usando (acabei de alterar o nome do arquivo para Symbols.otf) eaquihá alguma documentação para isso, incluindo comandos XeLaTeX. Esta parte funciona bem:
\documentclass[10pt,twoside]{book}
\makeatletter
\newfontface\honourific[Path = ./fonts/]{Symbols.otf}
\newcommand{\hn}[1]{{\honourific\XeTeXglyph #1}}
\newcommand{\RahimahumuLlah}{{\large\hn{83}\kern0.25em}}
\begin{document}
...and a similar statement has been reported as being the view of Imām Mālik Ibn Anas \RahimahumuLlah.
\begin{document}
Agora, quando tento usar \firstcommand
na minha composição, funciona, porém quando há ponto, vírgula, dois pontos, ponto e vírgula ou outro sinal de pontuação, o símbolo pode ter muito mais ou muito menos espaço do que o necessário depois dele. É por isso que defino o kerning padrão para 0,25em, o que funciona muito bem para a maioria das situações. O que eu quero fazer é configurá-lo de forma que verifique se há um sinal de pontuação aplicável logo após o símbolo (ponto, vírgula, dois pontos ...) e, em caso afirmativo, aplica 0,05em se for kerning.
Me deparei com algumas discussões sobre o comando @ifnextchar, particularmenteeste tópicoque começou emessepostagem no fórum. Tentei implementar a resposta final do postador do fórum em meu código, mas o que descobri foi que ele não estava avaliando as condições verdadeiras ou falsas.
Se você pudesse oferecer algum esclarecimento sobre como implementar este ou qualquer outro método de kerning condicional, eu ficaria muito grato.
Obrigado
Editar:
Ok, fiz alguns testes e posso ter reduzido o problema. Usar xspace não funciona e nem executar manualmente condicionais para detectar pontuação. Usei este código para tentar descobrir onde estava meu problema:
\makeatletter
\newcommand{\punctuationcheck}{%
\@ifnextchar){parens\relax}{%
\@ifnextchar]{square bracket\relax}{%
\@ifnextchar.{fullstop\relax}{%
\@ifnextchar,{comma\relax}{space
}%
}%
}%
}%
}
\makeatother
Quando executo esse código, ele não detecta uma vírgula e, em vez disso, apenas insere a palavra 'espaço', independentemente de um espaço vir ou não depois da vírgula. dei uma olhada na respostaaquie observou o uso de {}
comandos posteriores para preservar espaços conforme necessário. Eu tentei isso e funcionou. A questão agora é como posso forçar o LaTeX a acrescentar um {}
após cada um dos meus comandos personalizados, para que não precise me lembrar de fazer isso quando estiver digitando meu documento?
Edição 2: Resolvido
Acontece que onde você coloca o \xspace
comando na definição realmente importa.
Primeira instância:
\newcommand{\RahimahumuLlah}{{\large\hn{83}\xspace}}
Eu não estava vendo o comando funcionando. Mudei o comando para logo antes da última chave:
\newcommand{\RahimahumuLlah}{{\large\hn{83}}\xspace}
E funciona.
Responder1
Você poderia copiar o xspace
código do pacote que faz exatamente isso, além do fato de adicionar um espaço normal em vez do seu kern.