Muito bem, force 66 caracteres por linha

Muito bem, force 66 caracteres por linha

Eu gostaria de ter "algo" (um pacote, um truque, uma macro, ...?) que me permitisse brincar bem com as margens (ou o layout) para definir o número médio ou típico de caracteres por linha.

Idealmente, esse "sistema" me ajudaria a manter essa proporção (66, 2,5 alfabetos ou qualquer outro número que eu escolher/inserir) independente de alterações nas famílias de fontes (como com o uso do pacote pslatexou txfontspor exemplo), nos tamanhos das fontes (com uma opção de classe 10ptou, 12ptpor exemplo).

Olhei um pouco em volta e meio que entendi que usar classes KOMA-Script ou a memoirclasse pode ser parte de uma solução, mas eu preferiria não (especialmente porque nunca usei nenhuma até agora).

Um ponto importante para mim é que todas as proporções ou princípios do layout original devem ser mantidos. Por exemplo, se houvesse uma proporção definida entre as margens esquerda e direita, apenas brincar com uma margem ou com largura de texto/largura de linha não me satisfaria.

Por que eu gostaria de fazer isso? Porque eu gosto de usar o pslatexpacote, mas isso coloca o número médio de caracteres por linha de cerca de 65 sem para cerca de 75+ com.

Observe que eu já passei ou folheei:

E, também pode haver respostas lá, não consegui encontrá-las (com muita facilidade).

Responder1

A afirmação de que cerca de 2,5 vezes o comprimento do alfabeto minúsculo é apenas uma indicação. No entanto, você pode brincar com 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}

Isso usará uma proporção para as margens conforme indicado (2:3 é na verdade o padrão, no modo dois lados). Pacotes de fontes bem comportados devem funcionar corretamente.

Com as fontes padrão, obtenho uma largura de texto de 318,96 pt, enquanto newtxtextobtenho 298,58 pt ( mathptmxo resultado é 298,57 pt).

Observe que pslatexé um pacote muito obsoleto e que seu descendente mathptmxé bastante inadequado para uma composição tipográfica séria envolvendo matemática. Se você não precisa de matemática, outras opções baseadas em (Linotipo) Times Roman são

  • newtxtext(com base em txfonts, mas com métricas corrigidas)

  • tgtermes

O primeiro possui o pacote matemático complementar newtxmath.

Você pode escolher a proporção que preferir para as margens. É habitual, na impressão frente e verso, ter a margem externa mais larga que a interna. Se quiser automatizar a escolha entre impressão unilateral (margens iguais) e impressão frente e verso, então

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

poderia ser usado. As opções para geometrypodem ser fornecidas em \geometrycomandos distintos. Não se esqueça de especificar o tamanho do papel (você pode fazê-lo em \geometryclasse ou como opção).

Você também pode testar a classe carregada:

\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

(a configuração 4:2 é apenas a título de exemplo).

No entanto, não existe um formato "pega-tudo": o que você finalmente escolhe para um documento depende do próprio documento.


Como definir a proporção da margem horizontal para ser igual à fixada pela classe? Isso é um pouco difícil, porque a configuração padrão usa um modelo diferente do 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}

Com a articleclasse obtemos 1000:1000, com book(modo dois lados) o resultado é 667:1000 ou seja, para todos os efeitos práticos, 2:3.

Responder2

Robert Bringhurst, em"Os elementos do estilo tipográfico", fornece uma tabela de comprimentos de linha preferidos para diferentes fontes. Um ajuste de otimização de mínimos quadrados dos dados da tabela revelou que ele pode ser aproximado muito bem com a seguinte 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 pode ser usado junto com geometry, etc. para definir a largura do texto

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

Presumo que isso seja válido para o inglês padrão, que possui palavras relativamente curtas. Numa língua como o Africâner (minha língua nativa) temos muitas palavras muito longas e os 66 caracteres por linha nem sempre parecem corretos. Para outros idiomas, a contagem de caracteres para uma boa tipografia pode ser diferente, mas não tenho ideia do que seria melhor.

Responder3

ConTeXt fornece uma macro chamada \averagecharwidthque calcula a largura média de um caractere com base na frequência de caracteres específica do idioma. Não existe uma interface adequada para isso, então você carrega manualmente os arquivos necessários.

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

 \setuplayout[width=66\averagecharwidth]

Verlang-frd.mkiipara tabelas de frequência de idioma, elang-frq.mkiipara macros calcularem a largura média. Da documentação:

Este módulo implementa um método para determinar a largura de um caractere médio em um idioma. Ele usa as dimensões das fontes atuais.

O Método ~ 1 ignora as larguras e assume que cada caractere tem uma largura de 0,5em, o que é verdadeiro para a maioria das fontes monoespaçadas. O Método ~ 2 toma x como ponto de partida e assume que sua altura corresponde à sua largura. O método ~ 3 é o melhor e determina a largura média com base na tabela de caracteres específica do idioma. O Método ~ 4 é uma mistura entre os dois primeiros métodos: larguras específicas de caracteres aplicadas a uma distribuição igual. O método~0 informa a contagem total, que normalmente é de aproximadamente 100.

A documentação também inclui a figura a seguir mostrando as tabelas de frequência para inglês, holandês e alemão.

insira a descrição da imagem aqui

Embora os arquivos tenham .mkiiextensão, o código é TeX de nível bastante baixo e também funciona com ConTeXt MkIV. Também deve funcionar com LaTeX com pequenas alterações.

Para uma verdadeira "média de 66 caracteres por linha", você pode primeiro pré-processar seu texto para gerar a tabela de frequência e, em seguida, usar essa tabela de frequência para calcular a largura média dos caracteres!

Observação: a \averagecharwidthmacro pega os tamanhos da fonte atual e escolhe a frequência dos caracteres do idioma atual. Portanto, deve ser usado após a especificação da fonte e do idioma do documento.

informação relacionada