Application de composition dans LaTeX

Bonjour, Habr! Tous ceux qui ne sont pas très satisfaits du remplissage fascinant des formulaires Word officiels, je vous invite à chat.

Comment tout a commencé?


Tout a commencé avec le fait que j'ai été invité à participer à une conférence. Des exigences telles que «les résumés sont soumis au format Word!» J'y étais en quelque sorte habitué, mais ma patience a brisé lorsque j'ai reçu un formulaire «avis sur la possibilité d'une publication ouverte» dans mon courrier.

Le formulaire était un fichier .doc regorgeant de champs typiques du workflow russe pour remplir avec la main aux bons endroits: une ligne horizontale le long de la ligne entière avec une explication en dessous (par exemple, "Nom, Position, Signature"). Tout devient encore plus amusant si vous activez l'affichage des personnages cachés.

Il semblerait, appuyez sur insert sur le clavier et tapez "en haut" des lignes réglées, qu'est-ce qui est difficile? En effet, au début, j'ai essayé de faire exactement cela, mais toute cette «beauté» s'effondrait constamment, sortait du terrain et m'énervait. Quelle est la taille du texte qui vaut la peine de passer de 12 à 8, puis de revenir. J'ai serré les dents pendant environ 20 minutes et j'ai pris la décision ultimatum de tout faire en latex. Du coup, je n'ai passé que deux soirées et j'ai obtenu un beau document de grande qualité!

Accès à la mise en page


!!!
Tous les noms sont fictifs. Toutes les coïncidences avec de vraies personnes, organisations et adresses sont aléatoires.
!!!

Imaginons qu'un employé de l'Institut de recherche sur les systèmes de contrôle électronique K. Kuznetsov se rende au merveilleux forum Electronic Control Systems dans la merveilleuse ville de New Vasyuki pour présenter le rapport «Peripheral Computing for Control Systems».

Préambule


En 2019, travailler dans le latex est assez simple: vous choisissez l'éditeur à votre guise, déclarez le type de document, chargez les packages nécessaires et ne pensez plus à la conception de votre texte.

Rien n'a changé cette fois non plus: nous sélectionnons le format A4, la taille 12 et désactivons la page de garde. Si je ne me trompe pas, certaines de ces options sont les valeurs par défaut de la classe d'article. Dans le même temps, nous connectons le package qui normalise l'affichage en pdf:

\documentclass[12pt,a4paper,notitlepage]{article} \usepackage{cmap} 

Ensuite, vous devez spécifier l'encodage du texte source, la famille de polices et connecter la langue russe:

 %%% language, font, encoding \usepackage[T2A]{fontenc} \usepackage[utf8]{inputenc} \usepackage[russian]{babel} 

Les champs standard en latech sont, à mon avis, très larges, nettement plus larges que les champs sous la forme originale. Je préfère travailler avec eux en utilisant le package de géométrie. J'utilise habituellement 2 cm de tous les côtés. Nous refusons poliment les pieds de page:

 \usepackage[top=2cm,bottom=2cm,left=2cm,right=2cm,nohead,nofoot]{geometry} 

Puisque nous utilisons des explications interlinéaires, il est nécessaire d'augmenter l'espacement des lignes. C'est facile à faire avec \ linespread, mais je préfère un package spécialisé:

 \usepackage[doublespacing]{setspace} 

Le logo de l'entreprise était présent dans le formulaire envoyé, cependant, si vous n'avez pas besoin d'images dans le document, vous ne pouvez pas connecter ce package:

 \usepackage{graphicx} 

Et maintenant la partie amusante! Ces packages ont fait tout le travail pour moi. Le package d'entreprise de l'American Mathematical Society amsmath définit une macro de sous-ensemble qui vous permet de créer du texte «indice» et un package ulem qui facilite le travail avec les traits de soulignement:

 \usepackage{amsmath} \usepackage{ulem} 

Corps du document


Nous introduisons le {document} début-fin familier et commençons à créer. Notre conception sera absolument manuelle, donc cela ne fait pas de mal d'effacer le style de page:

 \pagestyle{empty} 

Si vous souhaitez inclure un logo dans le document
Rien de compliqué ici: nous déclarons un objet flottant, utilisons la macro includeegraphics définie dans graphicx avec la largeur nécessaire et profitons de la vie. De plus, pdflatex est un grand ami du format png.

 \begin{figure}[t!] \includegraphics[width=0.4\textwidth]{logo.png} \end{figure} 


La déclaration a généralement un cachet. Sur un habr j'ai vu comment il est implémenté en utilisant une table avec une largeur donnée. Je n'ai pas aimé cette approche, car la table a des paramètres arraystretch et tabcolsep, ce qui gâche un peu l'indentation et le formatage. Ils peuvent toujours être redéfinis, mais à mon avis, il est beaucoup plus facile d'utiliser l'environnement minipage. Personnellement, je préfère que la machine elle-même sélectionne les intervalles nécessaires, pour cela il y a du remplissage. Cependant, nous n'avons pas toujours besoin de remplir la ligne entière, comme, par exemple, dans le cas de la date. Ici, nous utiliserons la règle pour laisser la place nécessaire:

 \begin{flushright} \begin{minipage}{0.4\textwidth} \centering{ \\ } \raggedright{ \hfill\hfill\hfill<<\hfill>>\\ \hrulefill~~.~.\\ } <<\hspace{0.25cm}>>~\rule{2cm}{0.25pt}~201\hspace{0.25cm}.\hfill \end{minipage} \end{flushright} 

Faire une ligne pour le numéro de décret n'est pas non plus difficile. Il semble que dans certains packages, le symbole "Non" soit défini séparément, mais je trouve irrationnel de connecter l'ensemble du package juste pour le plaisir:

 \begin{flushleft} \rule{2cm}{0.25pt}~N$^{\underline{\circ}}$~\rule{2cm}{0.25pt} \end{flushleft} 


Spécifiez le nom du document et alignez-le au centre de la ligne:
 \begin{center}  \\     \end{center} 

Enfin, nous avons eu la possibilité d'utiliser le paquet ulem. Pour nous, le package est remarquable principalement parce que le texte souligné est automatiquement transféré à la ligne suivante, contrairement au soulignement. Nous ne savons pas combien d'espace le texte prendra, et pour que les lignes atteignent toujours les marges, nous ajoutons hfill.

   (-)  << >> \uline{   << >>  . .\hfill}\\ 

Nous avons maintenant atteint la partie la plus intéressante du document. Nous implémentons des explications en indice en utilisant la macro de sous-ensemble du package amsmath. Le seul problème avec cette approche est de travailler en mode mathématique. En conséquence, hfill ne nous aidera plus. Ici, nous devons faire un peu plus de travail: étirer manuellement les boîtes à l'aide de hspace et organiser les transferts forcés si nécessaire. Au départ, j'ai essayé d'automatiser cette partie avec le package resizebox graphicx, mais cela n'a pas conduit à des résultats digestes. (Je vous invite à commenter les experts en programmation TeX).

 \\ $\underset{\text{( , ,  )}}{\text{\uline{    . . <<    >>\hspace{2.75cm}}}}$\\ \uline{    <<  >>,   1  10  2019    .  ,  , . ,  37\hfill}\\ 

La partie la plus importante juridiquement de la déclaration:

 ,   :\\ $\underset{\text{(         )}}{\text{\uline{         \hspace{4.25cm}}}}$\\     :\hfill$\underset{\text{( )}}{\text{\uline{\hspace{3.5cm} \hspace{3.5cm}}}}$\\ $\underset{\text{(     ,  )}}{\rule{\textwidth}{0.25pt}}$\\   : \uline{        \hfill}\\ 

Enfin, nous désignons des experts responsables. Nous pouvons le laisser comme ça, mais nous pouvons entrer de vrais noms et positions, sans oublier hspace:

 $\underset{\text{(, , )}}{\rule{\textwidth}{0.25pt}}$\\ $\underset{\text{(, , )}}{\rule{\textwidth}{0.25pt}}$\\ $\underset{\text{(  , , )}}{\rule{\textwidth}{0.25pt}}$\\ 

Touche finale


Presque toujours, tout document est divisé en parties logiques, qui sont très faciles à organiser sur une feuille en plaçant vfill entre eux. Pour en revenir à la conception des lignes, si cela ne fonctionne pas pour créer une ligne régulière dans les champs, vous pouvez la laisser un peu plus petite et ajouter hfiil au début de la ligne.

Je tiens à remercier tout particulièrement les auteurs des articles:
habr.com/en/post/207364 écrit par dbarashev
habr.com/en/post/144648 par Skiminok

Bonne disposition!

Texte source
 \documentclass[12pt,a4paper,notitlepage]{article} \usepackage{cmap} %%% language, font, encoding \usepackage[T2A]{fontenc} \usepackage[utf8]{inputenc} \usepackage[russian]{babel} %%% pagesize \usepackage[top=2cm,bottom=2cm,left=2cm,right=2cm,nohead,nofoot]{geometry} %%% line spacing and indentation \usepackage[doublespacing]{setspace} %%% working with graphics \usepackage{graphicx} \usepackage{amsmath} \usepackage{ulem} \begin{document} \pagestyle{empty} \vfill \begin{flushright} \begin{minipage}{0.4\textwidth} \centering{ \\ } \raggedright{ \hfill\hfill\hfill<<\hfill>>\\ \hrulefill~~.~.\\ } <<\hspace{0.25cm}>>~\rule{2cm}{0.25pt}~201\hspace{0.25cm}.\hfill \end{minipage} \end{flushright} \vfill \begin{flushleft} \rule{2cm}{0.25pt}~N$^{\underline{\circ}}$~\rule{2cm}{0.25pt} \end{flushleft} \vfill \begin{center}  \\     \end{center} \vfill   (-)  << >> \uline{   << >>  . .\hfill}\\ \\ $\underset{\text{( , ,  )}}{\text{\uline{    . . <<    >>\hspace{2.75cm}}}}$\\ \uline{    <<  >>,   1  10  2019    .  ,  , . ,  37\hfill}\\ ,   :\\ $\underset{\text{(         )}}{\text{\uline{         \hspace{4.25cm}}}}$\\     :\hfill$\underset{\text{( )}}{\text{\uline{\hspace{3.5cm} \hspace{3.5cm}}}}$\\ $\underset{\text{(     ,  )}}{\rule{\textwidth}{0.25pt}}$\\   : \uline{        \hfill}\\    (-):\\ $\underset{\text{(, , )}}{\rule{\textwidth}{0.25pt}}$\\ $\underset{\text{(, , )}}{\rule{\textwidth}{0.25pt}}$\\ $\underset{\text{(  , , )}}{\rule{\textwidth}{0.25pt}}$\\ \vfill \end{document} 

Source: https://habr.com/ru/post/fr463965/


All Articles