Fuerza muy bien 66 caracteres por línea

Fuerza muy bien 66 caracteres por línea

Me gustaría tener "algo" (¿un paquete, un truco, una macro,...?) que me permita jugar bien con los márgenes (o el diseño) para establecer el número promedio o típico de caracteres por línea.

Idealmente, este "sistema" me ayudaría a mantener esta proporción (66, 2,5 alfabetos o cualquier otro número que elija/ingrese) independientemente de los cambios en las familias de fuentes (como con el uso del paquete pslatexo, txfontspor ejemplo), en los tamaños de fuente. (con una opción de clase 10pto 12ptpor ejemplo).

Miré a mi alrededor un poco y entendí que usar clases KOMA-Script o la memoirclase puede ser parte de una solución, aunque preferiría no hacerlo (especialmente porque nunca he usado ninguna hasta ahora).

Un punto importante para mí es que se deben mantener todas las proporciones o principios del diseño original. Por ejemplo, si hubiera una relación establecida entre los márgenes izquierdo y derecho, entonces simplemente jugar con un margen o con el ancho de texto/ancho de línea no me satisfaría.

¿Por qué me gustaría hacer esto? Porque me gusta usar el pslatexpaquete, pero esto hace que el número promedio de caracteres por línea pase de aproximadamente 65 sin a aproximadamente 75+ con.

Tenga en cuenta que ya he revisado o hojeado:

Y también puede haber respuestas allí, pero no pude encontrarlas (con demasiada facilidad).

Respuesta1

La afirmación de aproximadamente 2,5 veces la longitud del alfabeto en minúsculas es sólo una indicación. Sin embargo puedes jugar con geometry:

\documentclass{book}

%%\usepackage{newtxtext}
\newlength{\alphabet}
\settowidth{\alphabet}{\normalfont abcdefghijklmnopqrstuvwxyz}

\usepackage{geometry}
\geometry{textwidth=2.5\alphabet,hmarginratio={2:3}}

\begin{document}
\the\textwidth
\end{document}

Esto utilizará una proporción para los márgenes como se indica (2:3 es en realidad el valor predeterminado, en modo de dos lados). Los paquetes de fuentes con buen comportamiento deberían funcionar correctamente.

Con las fuentes predeterminadas obtengo un ancho de texto de 318,96 puntos, mientras que con newtxtextlas fuentes obtengo 298,58 puntos ( mathptmxel resultado es 298,57 puntos).

Tenga en cuenta que pslatexes un paquete muy obsoleto y que su descendiente mathptmxes bastante inadecuado para la composición tipográfica seria que involucra matemáticas. Si no necesita matemáticas, hay otras opciones basadas en (Linotype) Times Roman.

  • newtxtext(basado en txfonts, pero con métricas corregidas)

  • tgtermes

El primero tiene el paquete matemático complementario newtxmath.

Puede elegir la proporción que prefiera para los márgenes. Es habitual, en la impresión a dos caras, tener el margen exterior más ancho que el interior. Si desea automatizar la elección entre impresión a una cara (márgenes iguales) y a dos caras, entonces

\geometry{textwidth=2.5\alphabet}
\makeatletter
\if@twoside
  \geometry{hmarginratio={2:3}}
\else
  \geometry{hmarginratio={1:1}}
\fi
\makeatother

puede ser usado. Las opciones de geometryse pueden dar en distintos \geometrycomandos. No olvides especificar el tamaño del papel (puedes hacerlo ya sea en \geometryclase o como opción).

También puedes probar la clase cargada:

\makeatletter
\geometry{hmarginratio={1:1}} % fallback

\@ifclassloaded{book}
 {
  \if@twoside
    \geometry{hmarginratio={2:3}}
  \else
    \geometry{hmarginratio={1:1}}
  \fi
 }{}

\@ifclassloaded{article}
 {
  \if@twoside
    \geometry{hmarginratio={4:2}}
  \else
    \geometry{hmarginratio={1:1}}
  \fi
 }{}
\makeatletter

(La configuración 4:2 es sólo a modo de ejemplo).

Sin embargo, no existe un formato que "abarque todo": lo que finalmente elija para un documento depende del documento en sí.


¿Cómo establecer que la relación del margen horizontal sea igual a la fijada por la clase? Esto es un poco difícil, porque la configuración estándar utiliza un modelo diferente al de geometry.

\documentclass{article}
\usepackage{newtxtext}
\usepackage{geometry}

\newlength{\alphabet}
\sbox0{\normalfont abcdefghijklmnopqrstuvwxyz}
\setlength{\alphabet}{\wd0}

\makeatletter
\begingroup
\dimendef\innermargin=\z@
\dimendef\outermargin=\tw@
\innermargin=\dimexpr\oddsidemargin+1in+\hoffset\relax
\outermargin=\dimexpr\paperwidth-\innermargin-\textwidth\relax
\outermargin=.002\outermargin
\innermargin=2\innermargin
\count@=\innermargin
\divide\count@ \outermargin
\xdef\standardhmarginratio{\number\count@:1000}
\endgroup

\geometry{textwidth=2.5\alphabet,hmarginratio=\standardhmarginratio}

\begin{document}

text width = \the\textwidth

horizontal margin ratio = \standardhmarginratio

\end{document}

Con la articleclase obtenemos 1000:1000, con book(modo de dos lados) el resultado es 667:1000, es decir, para todos los efectos prácticos, 2:3.

Respuesta2

Robert Bringhurst, en"Los elementos del estilo tipográfico", proporciona una tabla de longitudes de línea preferidas para diferentes fuentes. Un ajuste de optimización de mínimos cuadrados de los datos de la tabla reveló que se puede aproximar bastante bien con la siguiente macro:

\newcommand*\GetTextWidth[3][\normalfont]{{#1%
    \settowidth{#2}{abcdefghijklmnopqrstuvwxyz}%
    \setlength{#2}{0.03193#2}%
    \addtolength{#2}{0.44961pt}%
    \setlength{#2}{#3#2}%
    \global#2=#2}}

Que se puede utilizar junto con geometry, etc. para establecer el ancho del texto.

\newlength\bringhurstwdt
\GetTextWidth{\bringhurstwdt}{66}
\geometry{textwidth=\bringhurstwdt}

Supongo que esto es válido para el inglés estándar que tiene palabras relativamente cortas. En un idioma como el afrikáans (mi lengua materna) tenemos muchas palabras muy largas y los 66 caracteres por línea no siempre quedan bien. Para otros idiomas, el número de caracteres para una buena tipografía puede diferir, pero no tengo idea de cuál sería mejor.

Respuesta3

ConTeXt proporciona una macro llamada \averagecharwidthque calcula el ancho promedio de un carácter según la frecuencia de caracteres específica del idioma. No existe una interfaz adecuada para ello, por lo que debe cargar manualmente los archivos necesarios.

 \input lang-frq.mkii %macros to calculate average length
 \input lang-frd.mkii %language frequency tables

 \setuplayout[width=66\averagecharwidth]

Veridioma-frd.mkiipara tablas de frecuencia de idiomas, yidioma-frq.mkiipara que las macros calculen el ancho promedio. De la documentación:

Este módulo implementa un método para determinar el ancho de un carácter promedio en un idioma. Utiliza las dimensiones de las fuentes actuales.

El método ~1 ignora los anchos y supone que cada carácter tiene un ancho de 0,5 em, lo cual es cierto para la mayoría de las fuentes monoespaciadas. El método ~ 2 toma la x como punto de partida y supone que su altura coincide con su ancho. El método ~3 es el mejor y determina el ancho promedio según la tabla de caracteres específica del idioma. El método ~4 es una mezcla entre los dos primeros métodos: anchos específicos de caracteres aplicados a una distribución igual. El método ~0 informa el recuento total, que normalmente es ~100.

La documentación también incluye la siguiente figura que muestra las tablas de frecuencia para inglés, holandés y alemán.

ingrese la descripción de la imagen aquí

Aunque los archivos tienen .mkiiextensión, el código es TeX de nivel bastante bajo y también funciona con ConTeXt MkIV. También debería funcionar con LaTeX con cambios menores.

Para obtener un verdadero "promedio de 66 caracteres por línea", primero puede preprocesar su texto para generar la tabla de frecuencia y luego usar esa tabla de frecuencia para calcular el ancho promedio de caracteres.

Nota: La \averagecharwidthmacro toma los tamaños de fuente de la fuente actual y elige la frecuencia de caracteres del idioma actual. Por lo tanto, debe usarse después de haber especificado la fuente y el idioma del documento.

información relacionada