J'essaie de reproduire dans un pdf généré à partir d'un source LaTeX une page où une liste d'environ 30 navires est alignée avec une des diagonales de la page en l'occurrence celle qui grosso modo part du coin supérieur droit de la page et aboutit au coin inférieur gauche.Il s'agit en l'occurrence d'une visualisation en mode texte des positions de départ de navires lors d'une bataille navale.

J'ai pas mal tourné en rond en essayant de trouver des mots-clés qui permettraient de trouver un exemple pertinent dans les forums latex mais pour le moment je suis rentré bredouille.

La solution serait-elle de définir une table d'une trentaine de lignes et d'autant de colonnes d'une largeur d'un trentième de la largeur de ma page environ en faisant en sorte que le nom de chaque navire occupe (en partant de la première ligne) n colonnes, puis n+1 colonnes pour la ligne suivante et ainsi de suite jusqu'au bas de la page?

Modification

Précision: dans un souci d'esthétique, la liste des navires est également alignée sur la marge droite de la page avec des points pour remplir l'espage à droite des noms des navires et une accolade multiligne qui définit quatre groupes de vaisseaux… suivie d'un text vertical caractérisant chaque groupe (avant-garde, arrière garde, etc.)

Pour clarifier voici une représentation (très) simplifiée de ce que je cherche à faire :

Posée 08 Mai, 01:00

Chris%20Jones%20XL's gravatar image

Chris Jones XL
1417
Taux d'acceptation : 6%

Modifiée 12 Mai, 00:57

Pathe's gravatar image

Pathe ♦♦
6.0k4101193

\noindent\makebox[\linewidth][r]{foo . . .} \makebox[\linewidth][r]{foo . . . .} \makebox[\linewidth][r]{foo . . . . .} ?

(08 Mai, 01:42) touhami touhami's gravatar image

touhami. Merci, le code proposé me donne effectivement un résultat très similaire à ce que je souhaite.Est-il possible d'utiliser makebox à l'intérieur d'une table?

(08 Mai, 02:56) Chris Jones XL Chris%20Jones%20XL's gravatar image

Oui, c'est possible. En particulier, si la colonne en question est de type parbox, c'est-à-dire, de type m ou p, la largeur \linewidth s'adapte à la largeur de colonne.

(08 Mai, 10:29) touhami touhami's gravatar image

Voici une méthode.

Ouvrir dans l'éditeur Overleaf
\documentclass[oneside,12pt,spanish]{extbook}

\usepackage[papersize={4.8 in, 6.4 in},left=.5 in,right=.5 in]{geometry}
\usepackage{ragged2e}
\usepackage{rotating}

\newcommand{\groupe}{}
\newlength{\diagonalestemp}

\newenvironment{diagonales}[1]{%
    \renewcommand{\groupe}{#1}%
    \par\noindent$\left.\tabular{@{}p{.92\textwidth}@{}}%
}{%
    \endtabular\right\rbrace$%
    \rotatebox[origin=c]{90}{\textsc{\groupe}.}%
}

\newcommand{\diagbox}[1]{%
    \ifdim\diagonalestemp=0pt\settowidth{\diagonalestemp}{#1}\fi
    \global\addtolength{\diagonalestemp}{1em}%
    \makebox[\linewidth][r]{\makebox[\diagonalestemp][r]{#1\dotfill}}%
    \space\ignorespaces}
\newcommand{\centeredbox}[1]{%
    \makebox[.4\linewidth][r]{#1}%
    \hspace{-.4\linewidth}\ignorespaces}

\begin{document}
\begin{diagonales}{vanguardia}
    \diagbox{Scipion. F}
    \diagbox{Rayo. E}
    \diagbox{Formidable. F}
    \diagbox{Duguay. F}
    \centeredbox{Mont-Blanc. F}                       \diagbox{Mont-Blanc. F}
    \centeredbox{\makebox[2.5cm]{\rightarrowfill}}    \diagbox{Asis. E}
\end{diagonales}
\begin{diagonales}{retaguardia}
    \diagbox{Neptuno. E} 
    \diagbox{Scipion. F} 
    \diagbox{Rayo. E}
    \diagbox{Formidable. F}
    \diagbox{Duguay. F}
    \diagbox{Mont-Blanc. F}
    \diagbox{Asis. E}
\end{diagonales}
\end{document}
Lien permanent

Publiée 11 Mai, 21:04

touhami's gravatar image

touhami
7.9k210
Taux d'acceptation : 53%

Grâce à vos conseils, je suis enfin parvenu à un résultat proche de l'original :

À part le texte à droite des accolades (curly brackets ?) qui devrait être centré verticalement au lieu d'être aligné tout en haut et le fait que les noms de vaisseaux ne sont pas tout à fait alignés sur la diagonale NE-SO de la page, je suis plutôt satisfait de ce premier jet.

Voici le code utilisé :

Ouvrir dans l'éditeur Overleaf
\documentclass[oneside,10pt,spanish,]{extbook} 
\usepackage{fontspec}
\setmainfont[Numbers={OldStyle,Proportional}]{EBGaramond-Regular} 
\usepackage[papersize={4.8 in, 6.4 in},left=.5 in,right=.5 in]{geometry}
\usepackage{ragged2e}
\usepackage{rotating}

\begin{document}
\thispagestyle{empty}  
\footnotesize
$\left.
  \begin{tabular}{p{.8\textwidth}}
    \noindent\makebox[\linewidth][r]{Neptuno. E . . .} 
    \makebox[\linewidth][r]{Scipion. F . . . . .} 
    \makebox[\linewidth][r]{Rayo. E  . . . . . . . .}
    \makebox[\linewidth][r]{Formidable. F  . . . .}
    \makebox[\linewidth][r]{⸺Duguay. F . . . .}
    \makebox[\linewidth][r]{Mont-Blanc. F  . . . . . .}
    \makebox[\linewidth][r]{Asis. E.  . . . . . . . . . . . . .}
  \end{tabular} \right\} $ \rotatebox[origin=c]{90}{\textsc{vanguardia.}}

$\left.
  \begin{tabular}{p{.8\textwidth}}
    \noindent\makebox[\linewidth][r]{Agustín. E . . . . . . . . . . . .}
    \makebox[\linewidth][r]{PRIMER CUERPO                                   Herós. F . . . . . . . . . . . . . .}
    \makebox[\linewidth][r]{\textsc{mandado por Nelson}                                Trinidad. E  . . . . . . . . . . . . .}
    \makebox[\linewidth][r]{\textit{Victory.}                             Bucentauro. F  . . . . . . . . . . . .}
    \makebox[\linewidth][r]{\parbox{2.5cm}{\rightarrowfill}                        ⸺Neptune. F  . . . . . . . . . . . .}
    \makebox[\linewidth][r]{Redoutable. F  . . . . . . . . . . . . . . .}
    \makebox[\linewidth][r]{Intrépide. F . . . . . . . . . . . . . . . . . .}
    \makebox[\linewidth][r]{SEGUNDO CUERPO                  ⸺Leandro. E . . . . . . . . . . . .  . . . .}
  \end{tabular} \right\} $ \rotatebox[origin=c]{90}{\textsc{centro.}}

$\left.
  \begin{tabular}{p{.8\textwidth}}
    \noindent\makebox[\linewidth][r]{\textsc{mandado por Collingwood}            ⸺Justo. E . . . . . . . . . . . . . . . . . . . .}
    \makebox[\linewidth][r]{\textit{Royal Sovereign}          ⸺Indomptable. F . . . . . . . . . . . . . . .}
    \makebox[\linewidth][r]{\parbox{2.5cm}{\rightarrowfill}      Santa Ana. E  . . . . . . . . . . . . . . . . . . . . . .}
    \makebox[\linewidth][r]{Fougueux. F . . . . . . . . . . . . . . . . . . . . . . . .}
    \makebox[\linewidth][r]{Monarca. E. . . . . . . . . . . . . . . . . . . . . . . . . .}
    \makebox[\linewidth][r]{Plutón. F . . . . . . . . . . . . . . . . . . . . . . . . . . . .}
  \end{tabular} \right\} $ \rotatebox[origin=c]{90}{\textsc{retaguardia.}}

$\left.
  \begin{tabular}{p{.8\textwidth}}
    \noindent\makebox[\linewidth][r]{Bahama. E . . . . . . . . . . . . . . . . . . . . . . . . . . . .}
    \makebox[\linewidth][r]{⸺Aigle. F . . . . . . . . . . . . . . . . . . . . . . . . . . . .}
    \makebox[\linewidth][r]{Montañés. E . . . . . . . . . . . . . . . . . . . . . . . . . . . . . }
    \makebox[\linewidth][r]{Algeciras. E  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . }
    \makebox[\linewidth][r]{⸺Argonauta. E . . . . . . . . . . . . . . . . . . . . . . . . . . . . }
    \makebox[\linewidth][r]{Swift-Sure. F . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .}
    \makebox[\linewidth][r]{⸺Argonaute. F . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .}
    \makebox[\linewidth][r]{Ildefonso. E  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .}
    \makebox[\linewidth][r]{⸺Achille. F . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .}
    \makebox[\linewidth][r]{Príncipe de Asturias E  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .}
    \makebox[\linewidth][r]{Berwich. F  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .}
    \makebox[\linewidth][r]{Nepomuceno. E . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .}
  \end{tabular} \right\} $ \rotatebox[origin=c]{90}{\textsc{reserva.}}
\normalsize
\end{document}

Auriez-vous des suggestions pour améliorer le code ?

N.B. Le caractère dans un petit rectangle à la gauche de Dugay, Neptune, etc. est un tiret em-double (U+2e3a).

P.S. Pour ce qui est de centrer le texte vertical en droite de page sur les accolades qui les précèdent (vanguardia, centro, retaguardia), est-il préférable que je traite ce problème dans une « question » séparée… en présentant un ECM ?


Modification, ce jour :

en utilisant le « package » graphicx et \rotatebox[origin=c]{90}{\textsc{centro.}} etc. (en lieu et place de \begin{sideways} text…), les légendes verticales indiquant les groupes de vaisseaux en droite de page sont maintenant correctement centrées sur les accolades… et en jouant sur la longueur des « . . . » à droite des noms de vaisseaux, je devrais arriver à améliorer l'alignement de ceux-ci sur la diagonale de la page.

Il ne me restera alors plus qu'à résoudre le problème épineux de remplissage de la page… d'autant plus délicat que dans le cadre de ce projet le source LaTeX est généré par le convertisseur pandoc à partir de fichiers markdown et que le pdf résultant est proposé en 6 tailles de polices (8, 9, 10, 11, 12, et 14 pt.)… mais je doute que cela puisse être résolu dans le cadre de LaTeX — autrement dire je devrai sans doute écrire un script qui modifiera le source LaTeX en fonction de la taille de police de la compilation en cours.

Pour mémoire voici le résultat de mes modifications :

Lien permanent

Publiée 09 Mai, 21:15

Chris%20Jones%20XL's gravatar image

Chris Jones XL
1417
Taux d'acceptation : 6%

Modifiée 10 Mai, 13:20

Pathe's gravatar image

Pathe ♦♦
6.0k4101193

@Chris Jones XL : j'aurais bien rajouté les fichiers dont vous publiez les liens, mais ils ne sont accessibles que si l'on est inscrit chez gogol. Donc flop. Il existe des services libres de partage de fichiers : je ne saurais trop vous recommander de les utiliser.

(10 Mai, 01:44) Pathe ♦♦ Pathe's gravatar image

@Chris Jones XL : modifications effectuées.

(10 Mai, 13:23) Pathe ♦♦ Pathe's gravatar image

@Pathe: Merci.

(10 Mai, 22:07) Chris Jones XL Chris%20Jones%20XL's gravatar image

@touhami Merci. Je viens juste de tester le code que vous proposez et le résultat est tout à fait probant. Hélas je n'ai vu votre message que trop tard car j'avais déja trouvé une solution adaptée à mes contraintes.

Dans la mesure où je propose 6 versions au format pdf du livre électronique qui accessoirement contient ce plan de bataille navale avec 6 différentes tailles de police de caractères (8, 9, 10, 11, 12, et 14pt) et que le source LaTeX est généré automatiquement à partir de fichiers markdown/pandoc, j'ai finalement choisi une solution qui insère la page décrivant la bataille via une instruction \includepdf{plan.pdf}… cette page étant créée au préalable: cela m'évite des soucis liés au mode mathématique (pour les accolades) dans un contexte pandoc (problème connu) et surtout m'évite d'avoir à gérer la taille des polices pour cette page (pas évident: je n'ai pas trouvé de solution satisfaisante permettant une compilation conditionnelle dans le cadre de xelatex, par exemple… si taille de la police est 14pt, alors \tiny, si la taille de la police est 12pt alors \scriptsize… etc.)

N'étant pas parvenu à aligner proprement la liste de vaisseaux sur une diagonale en jouant sur le remplissage via the '. . . ' à droite de cette liste lors de ma première tentative, j'ai finalement opté pour une solution très basique qui consiste à: (1) créer un premier pdf qui contient juste la liste de bateaux et les accolades/légendes en droite de page… (2) créer un second pdf qui contient les annotations à gauche de la page (primer cuerpo, mandado por Nelson, etc. et les flèches horizontales) … et enfin, (3) utiliser un outil qui a pour nom 'pdftk' qui permet de superposer les deux via la commande: 'pdftk 1.pdf background 2.pdf output sigma.pdf'.

Cela m'a amené à revoir complètement le premier pdf (liste des vaisseaux) en utilisant l'instruction 'hspace{50mm}… hspace{49mm}… hspace{48mm}… etc. afin d'obtenir l'alignement souhaité… et de faire suivre par un 'dotfill' pour compléter chacune des lignes de ma table:

Voici le source permettant de créer le premier pdf: http://s000.tinyupload.com/index.php?file_id=06654243776263526179

Voici le second:http://s000.tinyupload.com/index.php?file_id=33556352153792999623

… et voici le pdf résultant de la fusion de deux: http://s000.tinyupload.com/index.php?file_id=87171504326557749535

Notez que (pure paresse) j'ai utilisé des espaces insécables pour gérer l'indentation des différents composants dans le source du deuxième pdf.

Merci encore pour m'avoir aidé à régler ce problème certes trivial mais fort difficile pour quelqu'un dont les connaissances LaTeX sont très superficielles et se résument aux cas les plus standard sans rien comprendre à la logique interne du produit.

Question subsidiaire : serait-il possible de faire en sorte que latex/xelatex superpose les deux pages lors de la compilation… ce qui permettrait d'intégrer les deux pages dont j'ai dernièrement téléchargé le source au source principal du document et d'éliminer ainsi l'étape (3) ci-dessus et le recours à l'utilitaire 'pdftk' ? De préférence d'une manière simple et sans avoir à effectuer de substantielles modifications à un existant qui donne exactement le résultat escompté ? En somme éḿuler la logique de ces logiciels de traitement de l'image qui fonctionnent sur un modèle basé sur le découpage en layers(couches ?) indépendantes dont on peut ajuster le degré de transparence…

Lien permanent

Publiée 12 Mai, 01:31

Chris%20Jones%20XL's gravatar image

Chris Jones XL
1417
Taux d'acceptation : 6%

Modifiée 16 Mai, 13:05

Pathe's gravatar image

Pathe ♦♦
6.0k4101193

1

@Chris Jones XL : le mieux serait de poser de nouvelles questions !

(16 Mai, 13:05) Pathe ♦♦ Pathe's gravatar image
Lien permanent

Publiée 18 Mai, 22:23

Chris%20Jones%20XL's gravatar image

Chris Jones XL
1417
Taux d'acceptation : 6%

Votre réponse
(dés)activer l'aperçu

Suivre cette question

Par courriel :

Une fois que vous serez enregistré, vous pourrez souscrire à n'importe quelle mise à jour ici

Par flux RSS :

Réponses

Réponses et commentaires

Bases de Markdown

  • *italique* ou _italique_
  • **gras** ou __gras__
  • Lien ::[texte](http://url.com/ "Titre ")
  • Image : ?![alt texte](/path/img.jpg "Titre ")
  • Liste numérotée : 1. Foo 2. Bar
  • Pour ajouter un passage à la ligne, ajoutez deux espaces à l'endroit où vous souhaitez que la ligne commence.
  • Les balises HTML de base sont également prises en charge.

Mots-clés de la question :

×6

Question posée : 08 Mai, 01:00

Question vue : 637 fois

Dernière mise à jour : 18 Mai, 22:23