2016-09-19 2 views
1

Je génère un pdf (latex) à partir d'un texte restructuré en utilisant le sphinx python (1.4.6). J'utilise des en-têtes de colonnes étroites avec des textes comme "stuff/misc/other". J'ai besoin que les barres obliques soient cassables, ainsi les en-têtes de table ne débordent pas dans la colonne suivante.barres obliques cassables partout sauf URL

La solution LaTeX doit utiliser \BreakableSlash ou \slashsi nécessaire. Je peux utiliser le code python pour remplacer les barres obliques:

from sphinx.util.texescape import tex_replacements 

# \BreakableSlash needs package hyphenat to be loaded 
tex_replacements.append((u'/', ur'\BreakableSlash ')) 
# tex_replacements.append((u'/', ur'\slash ')) 

Mais ce briserai une URL comme http://www.example.com/ dans quelque chose comme

http:\unhbox\[email protected]\penalty\@M\hskip\[email protected]/\discretionary{-}{}{}\penalty\@M\hskip\[email protected]\unhbox\[email protected]\penalty\@M\hskip\[email protected]/\discretionary{-}{}{}\penalty\@M\hskip\[email protected] 

ou

http:/\penalty\exhyphenpenalty/\penalty\exhyphenpenaltywww.example.com 

Je voudrais utiliser un solution générale qui fonctionne dans les deux cas, où l'éditeur de la documentation peut toujours utiliser ReST normal et n'a pas à se soucier de latex.

Une idée de comment obtenir des barres obliques classiques dans les URLs et des barres obliques cassables partout ailleurs?

Répondre

1

Vous avez pas de données vraiment donné et le code source et seulement demandé une idée, alors je prends la liberté de esquissant seulement une solution dans le code pseudo:

  • de Split le document dans une liste de chaînes à chaque position d'un espace à l'aide .split()
  • pour chaque chaîne, vérifiez si elle est une URL en comparant son côté gauche à http: // (et peut-être aussi ftp: //, https: // ou balises similaires)
  • Do remplacements, mais uniquement dans les chaînes sans URL
  • Recombiner tous les s Trings y compris les espaces à nouveau, en utilisant une commande telle que " ".join(my_list)
+0

Désolé d'être ambigu. J'utilise python sphinx pour générer les fichiers latex à partir du premier. C'est pourquoi je n'ai posté aucun code sauf mon extension. J'ai tagué la question en conséquence, mais je n'ai pas mentionné le sphinx python dans le texte. J'ai mis à jour la question pour la rendre plus claire. – Sascha