¿Cómo puedo hacer que LaTeX añada guiones a una palabra que contenga un guión?


En un documento LaTeX que estoy escribiendo, recibo una advertencia hbox demasiado llena debido a la palabra "multidisciplinar", que sucede que se representa al final de una línea.

Puedo deshacerme de esta advertencia en particular cambiándola a multi-discipli\-nary, pero el mismo problema ocurrirá en otros lugares, ya que esta palabra se usa mucho en el documento.

Me gustaría usar el comando \hyphenation{} en su lugar, pero obviamente mi tentativa \hyphenation{multi-disci-pli-na-ry} no funciona, porque no entiende el primer guión correctamente.

¿Qué encantamiento necesito para obtener la sangría correcta en una palabra que ya contiene un guión?

Pregunta adicional: ¿Dónde podría haber encontrado la respuesta a esa pregunta yo mismo?

Author: Peter Mortensen, 2010-02-03

8 answers

De http://www.tex.ac.uk/cgi-bin/texfaq2html?label=nohyph:

TeX no dividirá una palabra que ya haya sido dividida. Por ejemplo, el apellido inglés (caricatura) Smyth-Postlethwaite no tendría guiones, lo que podría ser problemático. Este es el estilo de tipografía inglés correcto (puede no ser correcto para otros idiomas), pero si es necesario, puede reemplazar el guion en el nombre con un comando \hyph, definido

\def\hyph{-\penalty0\hskip0pt\relax}

Esto es no el tipo de cosa que esta FAQ normalmente recomendaría The hyphenat package define un paquete de tales comandos (para introducir puntos de separación de sílabas en varios caracteres de puntuación).


O podría \newcommand un comando que se expande a multi-discipli\-nary (use Buscar + Reemplazar todo para reemplazar las palabras existentes).

 47
Author: kennytm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-03 16:17:25

El problema (como señaló KennyTM) es que LaTeX no dividirá las palabras con guiones. Afortunadamente, hay un paquete estándar (parte de ncctools) que aborda ese mismo problema, llamado extdash. Esto define nuevos comandos de guion y guion que no interrumpen el guion y que pueden permitir o evitar saltos de línea en el guion/guion. Prefiero usarlo con la opción shortcuts, por lo que puedo usar, por ejemplo, \-/ en lugar de \Hyphdash. Esto es lo que quieres:

\usepackage[shortcuts]{extdash} ... multi\-/disciplinary

Para prevenir rompiendo en ese guion, use multi\=/disciplinary

(Aparte: El Manual de Estilo de Chicago aconseja eliminar los guiones adjuntando afijos como 'multi', a menos que la palabra sea ambigua o ininteligible sin ella.)

 50
Author: Luke M,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-17 13:41:10

Utilizo package hyphenaty luego escribo palabras compuestas como la palabra finlandesa Internet-yhteys (Eng. Conexión a Internet ) como Internet\hyp yhteys. Parece tonto, pero parece ser la forma más elegante que he encontrado.

 19
Author: Zouppen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-15 20:11:38

Yo tenía el mismo problema. Utilizo hyphenat más la siguiente macro:

\RequirePackage{hyphenat}
\RequirePackage{expl3}


% The following defs make sure words that contain an explicit `-` (hyphen) are still hyphenated the normal way, and double- and triple hyphens keep working the way they should. Just don't use a `-` as the last token of your document. Also note that `-` is now a macro that is not fully expandable

\ExplSyntaxOn

% latex2e doesn't like commands starting with 'end', apparently expl3 doesn't have any problems with it
\cs_new:Npn \hyphenfix_emdash:c {---}
\cs_new:Npn \hyphenfix_endash:c {--}

\cs_new:Npn \hyphenfix_discardnext:NN #1#2{#1}


\catcode`\-=\active

\cs_new_protected:Npn -{
    \futurelet\hyphenfix_nexttok\hyphenfix_i:w
}

\cs_new:Npn \hyphenfix_i:w {
    \cs_if_eq:NNTF{\hyphenfix_nexttok}{-}{
        %discard the next `-` token
        \hyphenfix_discardnext:NN{\futurelet\hyphenfix_nexttok\hyphenfix_ii:w}
    }{
        % from package hyphenat
        \hyp
    }
}

\cs_new:Npn \hyphenfix_ii:w {
    \cs_if_eq:NNTF{\hyphenfix_nexttok}{-}{
        \hyphenfix_discardnext:NN{\hyphenfix_emdash:c}
    }{
        \hyphenfix_endash:c
    }
}


\ExplSyntaxOff

Tenga en cuenta que esto utiliza el paquete expl3 de latex3.

Hace que el - sea un carácter activo que escanea hacia adelante para ver si va seguido de más guiones. Si es así, se mantiene un -, para asegurarse de que -- y --- sigan funcionando. Si no, se convierte en el comando \hyp de hyphenat, permitiendo saltos de palabra en el resto de la palabra. Esta es una solución genérica que hace que todas las palabras que contienen guiones explícitos guión normalmente.

Tenga en cuenta que - se convierte en una macro que no es completamente expandible, por lo que intente incluir esto después de cargar otros paquetes que pueden no esperar que - sea una macro

Editar: Esta es mi segunda versión, la primera versión era menos robusta cuando un { o } seguido de un guion. Este no lo es, pero a diferencia de la primera versión, el - en esta versión no es completamente expandible.

 3
Author: JanKanis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-08 12:57:13
multi\hskip0pt-\hskip0pt disciplinary

Puede, por ejemplo, definir como

\def\:{\hskip0pt}

Y luego escribe

multi\:-\:disciplinary

Tenga en cuenta que el paquete de idioma ruso de babel tiene su propio conjunto de guiones que no prohíben la partición, "~ (comillas dobles+tilde), por ejemplo.

 3
Author: Michael,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-10 06:50:38

multi-disciplinary no tendrá guiones, como explica kennytm. Pero multi-\-disciplinary tiene las mismas oportunidades de separación que multidisciplinary tiene.

Admito que no se por qué esto funciona. Es diferente del comportamiento descrito aquí (énfasis mío):

El comando \- inserta un guion discrecional en una palabra. Esto también se convierte en el único punto donde se permite la separación de sílabas en esta palabra.

 3
Author: rudolfbyker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-17 15:57:14

Respondí algo similar aquí: Látex rompiendo demasiadas palabras

Dije:

Usted debe establecer una pena de separación en algún lugar de su preámbulo:

\hyphenpenalty=750

El valor de 750 se ajustaba a mis necesidades para un diseño de dos columnas en papel carta (8, 5x11 pulgadas) con una fuente de 12 pt. Ajuste el valor para satisfacer sus necesidades. Cuanto mayor sea el número, menor será la separación de sílabas. También es posible que desee echar un vistazo al paquete de guiones, que proporciona un poco más que solo la partición de guiones pena

 -4
Author: Mica,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:25:33

Para evitar la separación de palabras en palabras ya divididas, usé espacio sin separación ~ en combinación con espacio hacia atrás \!. Por ejemplo, command

3~\!\!\!\!-~\!\!\!D

Utilizado en el texto, suprimir la partición de palabras en word 3-D. Probablemente no es la mejor solución, pero funcionó para mí!

 -4
Author: Igor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-12 22:32:59