Understanding LaTeX 2e's @esphack












1















I'm reading source2e.pdf and I have problems in understanding the sense of the definition of LaTeX 2ε's @esphack:



Commands like label{...} , which themselves do not/shall not produce any visible output, might in the source/in the .tex-input-file be surrounded by spaces. If so, you don't want two space-tokens as this would double the horizontal glue.



If I got it right, @bsphack and @esphack are there for avoiding the coming into being of a space-token after tokenizing and processing the command in case there already came one into being before tokenizing and processing the command.



So let's look at the definition of @bsphack:



> @bsphack=macro:
->relax ifhmode @savsk lastskip @savsf spacefactor fi .
l.1 show@bsphack


In words:



When in horizontal mode or in restricted horizontal mode, then save the value of lastskip to @savsk and save the value of spacefactor to @savsf.



Now let's look at the definition of @esphack:



> @esphack=macro:
->relax ifhmode spacefactor @savsf ifdim @savsk >z@ ifdim lastskip =z
@ nobreak hskip z@skip fi ignorespaces fi fi .
l.2 show@esphack


In words:



When in horizontal mode or in restricted horizontal mode, then:




  • restore the value of spacefactor to the value saved as savsf.

  • In case @savsk is larger than zero, i.e., in case there was some horizontal glue before carrying out the command which at its start called @bsphack, then do
    ifdim lastskip =z@ nobreak hskip z@skip fi ignorespaces
    .


I understand that ignorespaces will make sense as there was already some horizontal glue before carrying out the command which at its start called @bsphack.



But I don't understand what the
ifdim lastskip =z@ nobreak hskip z@skip fi
-part is good for.



What is the sense of this?



In the situation where this is carried out, the saved value in @savsk is larger than z@, thus one can conclude that something from within the command which at its start called @bsphack did change the value of lastskip to z@.



But doing something like nobreakhskipz@skip will not revert that change/will not restore lastskip to its previous value.



Thus: What is the gist/sense/benefit of performing that hskip of zero-width?



If you wish lastskip to be restored, shouldn't it then be something like:



def@esphack{%
relax
ifhmode
spacefactor@savsf
ifdim@savsk>z@
ifdimlastskip=z@
nobreak
hskip-@savsk
nobreak
hskip@savsk
% the total skip is zero and lastskip is restored.
fi
ignorespaces
fi
fi
}%


Or perhaps just



def@esphack{%
relax
ifhmode
spacefactor@savsf %now spacefactor is restored.
nobreak
hskip-@savsk
nobreak
hskip@savsk
% the total skip is zero and lastskip is restored.
ifdim@savsk>z@
ignorespaces
fi
fi
}%


Is it possible that in some previous release, it was done this way and in later releases somebody erroneously "optimized" the
nobreakhskip-@savsknobreakhskip@savsk to nobreakhskipz@skip, overlooking that this won't restore lastskip any more?



If I understand correctly, you need to restore lastskip correctly as otherwise things with consecutive sequences of @bsphack..@esphack, e.g., label{foo}label{bar} won't work correctly:



If by now you do something like
A label{foo} label{bar} A

or
A label{foo}label{bar} A

, lastskip will in any case be 0 after label{foo} which affects the behavior of label{bar} because with label{bar} @savsk will not be larger than z@ any more so that ignorespaces won't get carried out although it should be carried out!



With the example below you can see a subtle difference when redefining @esphack so that it restores lastskip:



documentclass{article}

newsaveboxmybox

begin{document}

parnoindentbegin{lrbox}{mybox}
verb*|Alabel{1}B|:
end{lrbox}hbox to 4.5cm{useboxmyboxhfil} Alabel{1}B

parnoindentbegin{lrbox}{mybox}
verb*|A label{2} B|:
end{lrbox}hbox to 4.5cm{useboxmyboxhfil} A label{2} B

parnoindentbegin{lrbox}{mybox}
verb*|A label{3}label{4} B|:
end{lrbox}hbox to 4.5cm{useboxmyboxhfil} A label{3}label{4} B

parnoindentbegin{lrbox}{mybox}
verb*| label{5} label{6} B|:
end{lrbox}hbox to 4.5cm{useboxmyboxhfil} A label{5} label{6} B

makeatletter
def@esphack{%
relax
ifhmode
spacefactor@savsf
ifdim@savsk>z@
ifdimlastskip=z@
nobreak
hskip-@savsk
nobreak
hskip@savsk
% the total skip is zero and lastskip is restored.
fi
ignorespaces
fi
fi
}%
makeatother

noindentnullhrulefillnull

parnoindentbegin{lrbox}{mybox}
verb*|Alabel{a}B|:
end{lrbox}hbox to 4.5cm{useboxmyboxhfil} Alabel{a}B

parnoindentbegin{lrbox}{mybox}
verb*|A label{b} B|:
end{lrbox}hbox to 4.5cm{useboxmyboxhfil} A label{b} B

parnoindentbegin{lrbox}{mybox}
verb*|A label{c}label{d} B|:
end{lrbox}hbox to 4.5cm{useboxmyboxhfil} A label{c}label{d} B

parnoindentbegin{lrbox}{mybox}
verb*|A label{e} label{f} B|:
end{lrbox}hbox to 4.5cm{useboxmyboxhfil} A label{e} label{f} B

end{document}


enter image description here



Does my modification of @esphack have drawbacks?



Am I overlooking some caveat/something relevant?










share|improve this question









New contributor




Questioner is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.

























    1















    I'm reading source2e.pdf and I have problems in understanding the sense of the definition of LaTeX 2ε's @esphack:



    Commands like label{...} , which themselves do not/shall not produce any visible output, might in the source/in the .tex-input-file be surrounded by spaces. If so, you don't want two space-tokens as this would double the horizontal glue.



    If I got it right, @bsphack and @esphack are there for avoiding the coming into being of a space-token after tokenizing and processing the command in case there already came one into being before tokenizing and processing the command.



    So let's look at the definition of @bsphack:



    > @bsphack=macro:
    ->relax ifhmode @savsk lastskip @savsf spacefactor fi .
    l.1 show@bsphack


    In words:



    When in horizontal mode or in restricted horizontal mode, then save the value of lastskip to @savsk and save the value of spacefactor to @savsf.



    Now let's look at the definition of @esphack:



    > @esphack=macro:
    ->relax ifhmode spacefactor @savsf ifdim @savsk >z@ ifdim lastskip =z
    @ nobreak hskip z@skip fi ignorespaces fi fi .
    l.2 show@esphack


    In words:



    When in horizontal mode or in restricted horizontal mode, then:




    • restore the value of spacefactor to the value saved as savsf.

    • In case @savsk is larger than zero, i.e., in case there was some horizontal glue before carrying out the command which at its start called @bsphack, then do
      ifdim lastskip =z@ nobreak hskip z@skip fi ignorespaces
      .


    I understand that ignorespaces will make sense as there was already some horizontal glue before carrying out the command which at its start called @bsphack.



    But I don't understand what the
    ifdim lastskip =z@ nobreak hskip z@skip fi
    -part is good for.



    What is the sense of this?



    In the situation where this is carried out, the saved value in @savsk is larger than z@, thus one can conclude that something from within the command which at its start called @bsphack did change the value of lastskip to z@.



    But doing something like nobreakhskipz@skip will not revert that change/will not restore lastskip to its previous value.



    Thus: What is the gist/sense/benefit of performing that hskip of zero-width?



    If you wish lastskip to be restored, shouldn't it then be something like:



    def@esphack{%
    relax
    ifhmode
    spacefactor@savsf
    ifdim@savsk>z@
    ifdimlastskip=z@
    nobreak
    hskip-@savsk
    nobreak
    hskip@savsk
    % the total skip is zero and lastskip is restored.
    fi
    ignorespaces
    fi
    fi
    }%


    Or perhaps just



    def@esphack{%
    relax
    ifhmode
    spacefactor@savsf %now spacefactor is restored.
    nobreak
    hskip-@savsk
    nobreak
    hskip@savsk
    % the total skip is zero and lastskip is restored.
    ifdim@savsk>z@
    ignorespaces
    fi
    fi
    }%


    Is it possible that in some previous release, it was done this way and in later releases somebody erroneously "optimized" the
    nobreakhskip-@savsknobreakhskip@savsk to nobreakhskipz@skip, overlooking that this won't restore lastskip any more?



    If I understand correctly, you need to restore lastskip correctly as otherwise things with consecutive sequences of @bsphack..@esphack, e.g., label{foo}label{bar} won't work correctly:



    If by now you do something like
    A label{foo} label{bar} A

    or
    A label{foo}label{bar} A

    , lastskip will in any case be 0 after label{foo} which affects the behavior of label{bar} because with label{bar} @savsk will not be larger than z@ any more so that ignorespaces won't get carried out although it should be carried out!



    With the example below you can see a subtle difference when redefining @esphack so that it restores lastskip:



    documentclass{article}

    newsaveboxmybox

    begin{document}

    parnoindentbegin{lrbox}{mybox}
    verb*|Alabel{1}B|:
    end{lrbox}hbox to 4.5cm{useboxmyboxhfil} Alabel{1}B

    parnoindentbegin{lrbox}{mybox}
    verb*|A label{2} B|:
    end{lrbox}hbox to 4.5cm{useboxmyboxhfil} A label{2} B

    parnoindentbegin{lrbox}{mybox}
    verb*|A label{3}label{4} B|:
    end{lrbox}hbox to 4.5cm{useboxmyboxhfil} A label{3}label{4} B

    parnoindentbegin{lrbox}{mybox}
    verb*| label{5} label{6} B|:
    end{lrbox}hbox to 4.5cm{useboxmyboxhfil} A label{5} label{6} B

    makeatletter
    def@esphack{%
    relax
    ifhmode
    spacefactor@savsf
    ifdim@savsk>z@
    ifdimlastskip=z@
    nobreak
    hskip-@savsk
    nobreak
    hskip@savsk
    % the total skip is zero and lastskip is restored.
    fi
    ignorespaces
    fi
    fi
    }%
    makeatother

    noindentnullhrulefillnull

    parnoindentbegin{lrbox}{mybox}
    verb*|Alabel{a}B|:
    end{lrbox}hbox to 4.5cm{useboxmyboxhfil} Alabel{a}B

    parnoindentbegin{lrbox}{mybox}
    verb*|A label{b} B|:
    end{lrbox}hbox to 4.5cm{useboxmyboxhfil} A label{b} B

    parnoindentbegin{lrbox}{mybox}
    verb*|A label{c}label{d} B|:
    end{lrbox}hbox to 4.5cm{useboxmyboxhfil} A label{c}label{d} B

    parnoindentbegin{lrbox}{mybox}
    verb*|A label{e} label{f} B|:
    end{lrbox}hbox to 4.5cm{useboxmyboxhfil} A label{e} label{f} B

    end{document}


    enter image description here



    Does my modification of @esphack have drawbacks?



    Am I overlooking some caveat/something relevant?










    share|improve this question









    New contributor




    Questioner is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.























      1












      1








      1








      I'm reading source2e.pdf and I have problems in understanding the sense of the definition of LaTeX 2ε's @esphack:



      Commands like label{...} , which themselves do not/shall not produce any visible output, might in the source/in the .tex-input-file be surrounded by spaces. If so, you don't want two space-tokens as this would double the horizontal glue.



      If I got it right, @bsphack and @esphack are there for avoiding the coming into being of a space-token after tokenizing and processing the command in case there already came one into being before tokenizing and processing the command.



      So let's look at the definition of @bsphack:



      > @bsphack=macro:
      ->relax ifhmode @savsk lastskip @savsf spacefactor fi .
      l.1 show@bsphack


      In words:



      When in horizontal mode or in restricted horizontal mode, then save the value of lastskip to @savsk and save the value of spacefactor to @savsf.



      Now let's look at the definition of @esphack:



      > @esphack=macro:
      ->relax ifhmode spacefactor @savsf ifdim @savsk >z@ ifdim lastskip =z
      @ nobreak hskip z@skip fi ignorespaces fi fi .
      l.2 show@esphack


      In words:



      When in horizontal mode or in restricted horizontal mode, then:




      • restore the value of spacefactor to the value saved as savsf.

      • In case @savsk is larger than zero, i.e., in case there was some horizontal glue before carrying out the command which at its start called @bsphack, then do
        ifdim lastskip =z@ nobreak hskip z@skip fi ignorespaces
        .


      I understand that ignorespaces will make sense as there was already some horizontal glue before carrying out the command which at its start called @bsphack.



      But I don't understand what the
      ifdim lastskip =z@ nobreak hskip z@skip fi
      -part is good for.



      What is the sense of this?



      In the situation where this is carried out, the saved value in @savsk is larger than z@, thus one can conclude that something from within the command which at its start called @bsphack did change the value of lastskip to z@.



      But doing something like nobreakhskipz@skip will not revert that change/will not restore lastskip to its previous value.



      Thus: What is the gist/sense/benefit of performing that hskip of zero-width?



      If you wish lastskip to be restored, shouldn't it then be something like:



      def@esphack{%
      relax
      ifhmode
      spacefactor@savsf
      ifdim@savsk>z@
      ifdimlastskip=z@
      nobreak
      hskip-@savsk
      nobreak
      hskip@savsk
      % the total skip is zero and lastskip is restored.
      fi
      ignorespaces
      fi
      fi
      }%


      Or perhaps just



      def@esphack{%
      relax
      ifhmode
      spacefactor@savsf %now spacefactor is restored.
      nobreak
      hskip-@savsk
      nobreak
      hskip@savsk
      % the total skip is zero and lastskip is restored.
      ifdim@savsk>z@
      ignorespaces
      fi
      fi
      }%


      Is it possible that in some previous release, it was done this way and in later releases somebody erroneously "optimized" the
      nobreakhskip-@savsknobreakhskip@savsk to nobreakhskipz@skip, overlooking that this won't restore lastskip any more?



      If I understand correctly, you need to restore lastskip correctly as otherwise things with consecutive sequences of @bsphack..@esphack, e.g., label{foo}label{bar} won't work correctly:



      If by now you do something like
      A label{foo} label{bar} A

      or
      A label{foo}label{bar} A

      , lastskip will in any case be 0 after label{foo} which affects the behavior of label{bar} because with label{bar} @savsk will not be larger than z@ any more so that ignorespaces won't get carried out although it should be carried out!



      With the example below you can see a subtle difference when redefining @esphack so that it restores lastskip:



      documentclass{article}

      newsaveboxmybox

      begin{document}

      parnoindentbegin{lrbox}{mybox}
      verb*|Alabel{1}B|:
      end{lrbox}hbox to 4.5cm{useboxmyboxhfil} Alabel{1}B

      parnoindentbegin{lrbox}{mybox}
      verb*|A label{2} B|:
      end{lrbox}hbox to 4.5cm{useboxmyboxhfil} A label{2} B

      parnoindentbegin{lrbox}{mybox}
      verb*|A label{3}label{4} B|:
      end{lrbox}hbox to 4.5cm{useboxmyboxhfil} A label{3}label{4} B

      parnoindentbegin{lrbox}{mybox}
      verb*| label{5} label{6} B|:
      end{lrbox}hbox to 4.5cm{useboxmyboxhfil} A label{5} label{6} B

      makeatletter
      def@esphack{%
      relax
      ifhmode
      spacefactor@savsf
      ifdim@savsk>z@
      ifdimlastskip=z@
      nobreak
      hskip-@savsk
      nobreak
      hskip@savsk
      % the total skip is zero and lastskip is restored.
      fi
      ignorespaces
      fi
      fi
      }%
      makeatother

      noindentnullhrulefillnull

      parnoindentbegin{lrbox}{mybox}
      verb*|Alabel{a}B|:
      end{lrbox}hbox to 4.5cm{useboxmyboxhfil} Alabel{a}B

      parnoindentbegin{lrbox}{mybox}
      verb*|A label{b} B|:
      end{lrbox}hbox to 4.5cm{useboxmyboxhfil} A label{b} B

      parnoindentbegin{lrbox}{mybox}
      verb*|A label{c}label{d} B|:
      end{lrbox}hbox to 4.5cm{useboxmyboxhfil} A label{c}label{d} B

      parnoindentbegin{lrbox}{mybox}
      verb*|A label{e} label{f} B|:
      end{lrbox}hbox to 4.5cm{useboxmyboxhfil} A label{e} label{f} B

      end{document}


      enter image description here



      Does my modification of @esphack have drawbacks?



      Am I overlooking some caveat/something relevant?










      share|improve this question









      New contributor




      Questioner is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.












      I'm reading source2e.pdf and I have problems in understanding the sense of the definition of LaTeX 2ε's @esphack:



      Commands like label{...} , which themselves do not/shall not produce any visible output, might in the source/in the .tex-input-file be surrounded by spaces. If so, you don't want two space-tokens as this would double the horizontal glue.



      If I got it right, @bsphack and @esphack are there for avoiding the coming into being of a space-token after tokenizing and processing the command in case there already came one into being before tokenizing and processing the command.



      So let's look at the definition of @bsphack:



      > @bsphack=macro:
      ->relax ifhmode @savsk lastskip @savsf spacefactor fi .
      l.1 show@bsphack


      In words:



      When in horizontal mode or in restricted horizontal mode, then save the value of lastskip to @savsk and save the value of spacefactor to @savsf.



      Now let's look at the definition of @esphack:



      > @esphack=macro:
      ->relax ifhmode spacefactor @savsf ifdim @savsk >z@ ifdim lastskip =z
      @ nobreak hskip z@skip fi ignorespaces fi fi .
      l.2 show@esphack


      In words:



      When in horizontal mode or in restricted horizontal mode, then:




      • restore the value of spacefactor to the value saved as savsf.

      • In case @savsk is larger than zero, i.e., in case there was some horizontal glue before carrying out the command which at its start called @bsphack, then do
        ifdim lastskip =z@ nobreak hskip z@skip fi ignorespaces
        .


      I understand that ignorespaces will make sense as there was already some horizontal glue before carrying out the command which at its start called @bsphack.



      But I don't understand what the
      ifdim lastskip =z@ nobreak hskip z@skip fi
      -part is good for.



      What is the sense of this?



      In the situation where this is carried out, the saved value in @savsk is larger than z@, thus one can conclude that something from within the command which at its start called @bsphack did change the value of lastskip to z@.



      But doing something like nobreakhskipz@skip will not revert that change/will not restore lastskip to its previous value.



      Thus: What is the gist/sense/benefit of performing that hskip of zero-width?



      If you wish lastskip to be restored, shouldn't it then be something like:



      def@esphack{%
      relax
      ifhmode
      spacefactor@savsf
      ifdim@savsk>z@
      ifdimlastskip=z@
      nobreak
      hskip-@savsk
      nobreak
      hskip@savsk
      % the total skip is zero and lastskip is restored.
      fi
      ignorespaces
      fi
      fi
      }%


      Or perhaps just



      def@esphack{%
      relax
      ifhmode
      spacefactor@savsf %now spacefactor is restored.
      nobreak
      hskip-@savsk
      nobreak
      hskip@savsk
      % the total skip is zero and lastskip is restored.
      ifdim@savsk>z@
      ignorespaces
      fi
      fi
      }%


      Is it possible that in some previous release, it was done this way and in later releases somebody erroneously "optimized" the
      nobreakhskip-@savsknobreakhskip@savsk to nobreakhskipz@skip, overlooking that this won't restore lastskip any more?



      If I understand correctly, you need to restore lastskip correctly as otherwise things with consecutive sequences of @bsphack..@esphack, e.g., label{foo}label{bar} won't work correctly:



      If by now you do something like
      A label{foo} label{bar} A

      or
      A label{foo}label{bar} A

      , lastskip will in any case be 0 after label{foo} which affects the behavior of label{bar} because with label{bar} @savsk will not be larger than z@ any more so that ignorespaces won't get carried out although it should be carried out!



      With the example below you can see a subtle difference when redefining @esphack so that it restores lastskip:



      documentclass{article}

      newsaveboxmybox

      begin{document}

      parnoindentbegin{lrbox}{mybox}
      verb*|Alabel{1}B|:
      end{lrbox}hbox to 4.5cm{useboxmyboxhfil} Alabel{1}B

      parnoindentbegin{lrbox}{mybox}
      verb*|A label{2} B|:
      end{lrbox}hbox to 4.5cm{useboxmyboxhfil} A label{2} B

      parnoindentbegin{lrbox}{mybox}
      verb*|A label{3}label{4} B|:
      end{lrbox}hbox to 4.5cm{useboxmyboxhfil} A label{3}label{4} B

      parnoindentbegin{lrbox}{mybox}
      verb*| label{5} label{6} B|:
      end{lrbox}hbox to 4.5cm{useboxmyboxhfil} A label{5} label{6} B

      makeatletter
      def@esphack{%
      relax
      ifhmode
      spacefactor@savsf
      ifdim@savsk>z@
      ifdimlastskip=z@
      nobreak
      hskip-@savsk
      nobreak
      hskip@savsk
      % the total skip is zero and lastskip is restored.
      fi
      ignorespaces
      fi
      fi
      }%
      makeatother

      noindentnullhrulefillnull

      parnoindentbegin{lrbox}{mybox}
      verb*|Alabel{a}B|:
      end{lrbox}hbox to 4.5cm{useboxmyboxhfil} Alabel{a}B

      parnoindentbegin{lrbox}{mybox}
      verb*|A label{b} B|:
      end{lrbox}hbox to 4.5cm{useboxmyboxhfil} A label{b} B

      parnoindentbegin{lrbox}{mybox}
      verb*|A label{c}label{d} B|:
      end{lrbox}hbox to 4.5cm{useboxmyboxhfil} A label{c}label{d} B

      parnoindentbegin{lrbox}{mybox}
      verb*|A label{e} label{f} B|:
      end{lrbox}hbox to 4.5cm{useboxmyboxhfil} A label{e} label{f} B

      end{document}


      enter image description here



      Does my modification of @esphack have drawbacks?



      Am I overlooking some caveat/something relevant?







      spacing macros horizontal






      share|improve this question









      New contributor




      Questioner is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.











      share|improve this question









      New contributor




      Questioner is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      share|improve this question




      share|improve this question








      edited 27 mins ago







      Questioner













      New contributor




      Questioner is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      asked 1 hour ago









      QuestionerQuestioner

      63




      63




      New contributor




      Questioner is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.





      New contributor





      Questioner is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






      Questioner is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






















          1 Answer
          1






          active

          oldest

          votes


















          1














          You see more change comments, and older versions in the source:



          % begin{macro}{@esphack}
          % Companion to |@bsphack|. If this command is not properly paired
          % with |@bsphack| one might end up with a low-level TeX{} error:
          % ``BAD spacefactor''. One possible cause is calling |@bsphack| in
          % vertical mode, then doing something that gets you (sometimes) into
          % horizontal mode and finally calling |@esphack|. Even if no error
          % is generated that is wrong, because |@esphack| will then use the
          % saved values for |@savsk| and |@savsf| from some earlier
          % invocation of |@bsphack| which will have nothing to do with the
          % current situation.
          % changes{v1.3d}{2015/01/11}{Allow hyphenation (Donald Arseneau pr/3498) (latexrelease)}
          % begin{macrocode}
          %</2ekernel>
          %<latexrelease>IncludeInRelease{2018/10/10}%
          %<latexrelease> {@esphack}{hyphenation and nobreak after space hack}%
          %<*2ekernel|latexrelease>
          def@esphack{%
          relax
          ifhmode
          spacefactor@savsf
          ifdim@savsk>z@
          % end{macrocode}
          % changes{v1.3f}{2015/11/07}
          % {Only space if there is no space at the end of the hlist latex/4443}
          % begin{macrocode}
          ifdimlastskip=z@
          nobreak hskipz@skip
          fi
          ignorespaces
          fi
          % end{macrocode}
          % changes{v1.3i}{2018/10/10}
          % {Don't introduce breakpoints if @nobreak is true and after sections}
          % begin{macrocode}
          else
          ifvmode
          if@nobreaknobreakelseif@noskipsecnobreakfifi
          fi
          % end{macrocode}
          %
          % begin{macrocode}
          fi}%
          %</2ekernel|latexrelease>
          %<latexrelease>EndIncludeInRelease
          %<latexrelease>IncludeInRelease{2015/10/01}%
          %<latexrelease> {@esphack}{hyphenation and nobreak after space hack}%
          %<latexrelease>def@esphack{%
          %<latexrelease> relax
          %<latexrelease> ifhmode
          %<latexrelease> spacefactor@savsf
          %<latexrelease> ifdim@savsk>z@
          %<latexrelease> ifdimlastskip=z@
          %<latexrelease> nobreak hskipz@skip
          %<latexrelease> fi
          %<latexrelease> ignorespaces
          %<latexrelease> fi
          %<latexrelease> fi}%
          %<latexrelease>EndIncludeInRelease
          %<latexrelease>IncludeInRelease{2015/01/01}%
          %<latexrelease> {@esphack}{hyphenation and nobreak after space hack}%
          %<latexrelease>def@esphack{%
          %<latexrelease> relax
          %<latexrelease> ifhmode
          %<latexrelease> spacefactor@savsf
          %<latexrelease> ifdim@savsk>z@
          %<latexrelease> nobreak hskipz@skip
          %<latexrelease> ignorespaces
          %<latexrelease> fi
          %<latexrelease> fi}%
          %<latexrelease>EndIncludeInRelease
          %<latexrelease>IncludeInRelease{0000/00/00}%
          %<latexrelease> {@esphack}{hyphenation and nobreak after space hack}%
          %<latexrelease>def@esphack{%
          %<latexrelease> relax
          %<latexrelease> ifhmode
          %<latexrelease> spacefactor@savsf
          %<latexrelease> ifdim@savsk>z@
          %<latexrelease> ignorespaces
          %<latexrelease> fi
          %<latexrelease> fi}%
          %<latexrelease>EndIncludeInRelease
          %<*2ekernel>
          % end{macrocode}
          % end{macro}


          Basically the bit you query, you need to add a space (or zero width) so as not to inhibit hyphenation, and then need to add the nobreak so the space doesn't introduce a breakpoint.






          share|improve this answer
























          • I just added another example to my question to make my point about consecutive commands that are wrapped into @bsphack..@esphack clearer.

            – Questioner
            44 mins ago











          • Thanks for your reply. I see. But wouldn't it be better to add that space (of zero width) in a way which also restores lastskip so that one can have consecutive commands that don't produce visible output in a row? If by now you do something like A label{foo} label{bar} B , lastskip will in any case be 0 after label{foo} which affects the behavior of label{bar} because with label{bar} @savsk will not be larger than z@ any more so that ignorespaces won't get carried out although it should be carried out? Is nobreakhskip-@savsknobreakhskip@savsk unsafe?

            – Questioner
            32 mins ago











          • To be honest: It is not clear to me what is meant by "not to inhibit hyphenation". Do people intend to place, e.g., label into the middle of a word? If so: What is the insertion of (zero-width-)glue good for in the context of not inhibiting hyphenation?

            – Questioner
            16 mins ago













          Your Answer








          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "85"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });






          Questioner is a new contributor. Be nice, and check out our Code of Conduct.










          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f481259%2funderstanding-latex-2es-esphack%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          1














          You see more change comments, and older versions in the source:



          % begin{macro}{@esphack}
          % Companion to |@bsphack|. If this command is not properly paired
          % with |@bsphack| one might end up with a low-level TeX{} error:
          % ``BAD spacefactor''. One possible cause is calling |@bsphack| in
          % vertical mode, then doing something that gets you (sometimes) into
          % horizontal mode and finally calling |@esphack|. Even if no error
          % is generated that is wrong, because |@esphack| will then use the
          % saved values for |@savsk| and |@savsf| from some earlier
          % invocation of |@bsphack| which will have nothing to do with the
          % current situation.
          % changes{v1.3d}{2015/01/11}{Allow hyphenation (Donald Arseneau pr/3498) (latexrelease)}
          % begin{macrocode}
          %</2ekernel>
          %<latexrelease>IncludeInRelease{2018/10/10}%
          %<latexrelease> {@esphack}{hyphenation and nobreak after space hack}%
          %<*2ekernel|latexrelease>
          def@esphack{%
          relax
          ifhmode
          spacefactor@savsf
          ifdim@savsk>z@
          % end{macrocode}
          % changes{v1.3f}{2015/11/07}
          % {Only space if there is no space at the end of the hlist latex/4443}
          % begin{macrocode}
          ifdimlastskip=z@
          nobreak hskipz@skip
          fi
          ignorespaces
          fi
          % end{macrocode}
          % changes{v1.3i}{2018/10/10}
          % {Don't introduce breakpoints if @nobreak is true and after sections}
          % begin{macrocode}
          else
          ifvmode
          if@nobreaknobreakelseif@noskipsecnobreakfifi
          fi
          % end{macrocode}
          %
          % begin{macrocode}
          fi}%
          %</2ekernel|latexrelease>
          %<latexrelease>EndIncludeInRelease
          %<latexrelease>IncludeInRelease{2015/10/01}%
          %<latexrelease> {@esphack}{hyphenation and nobreak after space hack}%
          %<latexrelease>def@esphack{%
          %<latexrelease> relax
          %<latexrelease> ifhmode
          %<latexrelease> spacefactor@savsf
          %<latexrelease> ifdim@savsk>z@
          %<latexrelease> ifdimlastskip=z@
          %<latexrelease> nobreak hskipz@skip
          %<latexrelease> fi
          %<latexrelease> ignorespaces
          %<latexrelease> fi
          %<latexrelease> fi}%
          %<latexrelease>EndIncludeInRelease
          %<latexrelease>IncludeInRelease{2015/01/01}%
          %<latexrelease> {@esphack}{hyphenation and nobreak after space hack}%
          %<latexrelease>def@esphack{%
          %<latexrelease> relax
          %<latexrelease> ifhmode
          %<latexrelease> spacefactor@savsf
          %<latexrelease> ifdim@savsk>z@
          %<latexrelease> nobreak hskipz@skip
          %<latexrelease> ignorespaces
          %<latexrelease> fi
          %<latexrelease> fi}%
          %<latexrelease>EndIncludeInRelease
          %<latexrelease>IncludeInRelease{0000/00/00}%
          %<latexrelease> {@esphack}{hyphenation and nobreak after space hack}%
          %<latexrelease>def@esphack{%
          %<latexrelease> relax
          %<latexrelease> ifhmode
          %<latexrelease> spacefactor@savsf
          %<latexrelease> ifdim@savsk>z@
          %<latexrelease> ignorespaces
          %<latexrelease> fi
          %<latexrelease> fi}%
          %<latexrelease>EndIncludeInRelease
          %<*2ekernel>
          % end{macrocode}
          % end{macro}


          Basically the bit you query, you need to add a space (or zero width) so as not to inhibit hyphenation, and then need to add the nobreak so the space doesn't introduce a breakpoint.






          share|improve this answer
























          • I just added another example to my question to make my point about consecutive commands that are wrapped into @bsphack..@esphack clearer.

            – Questioner
            44 mins ago











          • Thanks for your reply. I see. But wouldn't it be better to add that space (of zero width) in a way which also restores lastskip so that one can have consecutive commands that don't produce visible output in a row? If by now you do something like A label{foo} label{bar} B , lastskip will in any case be 0 after label{foo} which affects the behavior of label{bar} because with label{bar} @savsk will not be larger than z@ any more so that ignorespaces won't get carried out although it should be carried out? Is nobreakhskip-@savsknobreakhskip@savsk unsafe?

            – Questioner
            32 mins ago











          • To be honest: It is not clear to me what is meant by "not to inhibit hyphenation". Do people intend to place, e.g., label into the middle of a word? If so: What is the insertion of (zero-width-)glue good for in the context of not inhibiting hyphenation?

            – Questioner
            16 mins ago


















          1














          You see more change comments, and older versions in the source:



          % begin{macro}{@esphack}
          % Companion to |@bsphack|. If this command is not properly paired
          % with |@bsphack| one might end up with a low-level TeX{} error:
          % ``BAD spacefactor''. One possible cause is calling |@bsphack| in
          % vertical mode, then doing something that gets you (sometimes) into
          % horizontal mode and finally calling |@esphack|. Even if no error
          % is generated that is wrong, because |@esphack| will then use the
          % saved values for |@savsk| and |@savsf| from some earlier
          % invocation of |@bsphack| which will have nothing to do with the
          % current situation.
          % changes{v1.3d}{2015/01/11}{Allow hyphenation (Donald Arseneau pr/3498) (latexrelease)}
          % begin{macrocode}
          %</2ekernel>
          %<latexrelease>IncludeInRelease{2018/10/10}%
          %<latexrelease> {@esphack}{hyphenation and nobreak after space hack}%
          %<*2ekernel|latexrelease>
          def@esphack{%
          relax
          ifhmode
          spacefactor@savsf
          ifdim@savsk>z@
          % end{macrocode}
          % changes{v1.3f}{2015/11/07}
          % {Only space if there is no space at the end of the hlist latex/4443}
          % begin{macrocode}
          ifdimlastskip=z@
          nobreak hskipz@skip
          fi
          ignorespaces
          fi
          % end{macrocode}
          % changes{v1.3i}{2018/10/10}
          % {Don't introduce breakpoints if @nobreak is true and after sections}
          % begin{macrocode}
          else
          ifvmode
          if@nobreaknobreakelseif@noskipsecnobreakfifi
          fi
          % end{macrocode}
          %
          % begin{macrocode}
          fi}%
          %</2ekernel|latexrelease>
          %<latexrelease>EndIncludeInRelease
          %<latexrelease>IncludeInRelease{2015/10/01}%
          %<latexrelease> {@esphack}{hyphenation and nobreak after space hack}%
          %<latexrelease>def@esphack{%
          %<latexrelease> relax
          %<latexrelease> ifhmode
          %<latexrelease> spacefactor@savsf
          %<latexrelease> ifdim@savsk>z@
          %<latexrelease> ifdimlastskip=z@
          %<latexrelease> nobreak hskipz@skip
          %<latexrelease> fi
          %<latexrelease> ignorespaces
          %<latexrelease> fi
          %<latexrelease> fi}%
          %<latexrelease>EndIncludeInRelease
          %<latexrelease>IncludeInRelease{2015/01/01}%
          %<latexrelease> {@esphack}{hyphenation and nobreak after space hack}%
          %<latexrelease>def@esphack{%
          %<latexrelease> relax
          %<latexrelease> ifhmode
          %<latexrelease> spacefactor@savsf
          %<latexrelease> ifdim@savsk>z@
          %<latexrelease> nobreak hskipz@skip
          %<latexrelease> ignorespaces
          %<latexrelease> fi
          %<latexrelease> fi}%
          %<latexrelease>EndIncludeInRelease
          %<latexrelease>IncludeInRelease{0000/00/00}%
          %<latexrelease> {@esphack}{hyphenation and nobreak after space hack}%
          %<latexrelease>def@esphack{%
          %<latexrelease> relax
          %<latexrelease> ifhmode
          %<latexrelease> spacefactor@savsf
          %<latexrelease> ifdim@savsk>z@
          %<latexrelease> ignorespaces
          %<latexrelease> fi
          %<latexrelease> fi}%
          %<latexrelease>EndIncludeInRelease
          %<*2ekernel>
          % end{macrocode}
          % end{macro}


          Basically the bit you query, you need to add a space (or zero width) so as not to inhibit hyphenation, and then need to add the nobreak so the space doesn't introduce a breakpoint.






          share|improve this answer
























          • I just added another example to my question to make my point about consecutive commands that are wrapped into @bsphack..@esphack clearer.

            – Questioner
            44 mins ago











          • Thanks for your reply. I see. But wouldn't it be better to add that space (of zero width) in a way which also restores lastskip so that one can have consecutive commands that don't produce visible output in a row? If by now you do something like A label{foo} label{bar} B , lastskip will in any case be 0 after label{foo} which affects the behavior of label{bar} because with label{bar} @savsk will not be larger than z@ any more so that ignorespaces won't get carried out although it should be carried out? Is nobreakhskip-@savsknobreakhskip@savsk unsafe?

            – Questioner
            32 mins ago











          • To be honest: It is not clear to me what is meant by "not to inhibit hyphenation". Do people intend to place, e.g., label into the middle of a word? If so: What is the insertion of (zero-width-)glue good for in the context of not inhibiting hyphenation?

            – Questioner
            16 mins ago
















          1












          1








          1







          You see more change comments, and older versions in the source:



          % begin{macro}{@esphack}
          % Companion to |@bsphack|. If this command is not properly paired
          % with |@bsphack| one might end up with a low-level TeX{} error:
          % ``BAD spacefactor''. One possible cause is calling |@bsphack| in
          % vertical mode, then doing something that gets you (sometimes) into
          % horizontal mode and finally calling |@esphack|. Even if no error
          % is generated that is wrong, because |@esphack| will then use the
          % saved values for |@savsk| and |@savsf| from some earlier
          % invocation of |@bsphack| which will have nothing to do with the
          % current situation.
          % changes{v1.3d}{2015/01/11}{Allow hyphenation (Donald Arseneau pr/3498) (latexrelease)}
          % begin{macrocode}
          %</2ekernel>
          %<latexrelease>IncludeInRelease{2018/10/10}%
          %<latexrelease> {@esphack}{hyphenation and nobreak after space hack}%
          %<*2ekernel|latexrelease>
          def@esphack{%
          relax
          ifhmode
          spacefactor@savsf
          ifdim@savsk>z@
          % end{macrocode}
          % changes{v1.3f}{2015/11/07}
          % {Only space if there is no space at the end of the hlist latex/4443}
          % begin{macrocode}
          ifdimlastskip=z@
          nobreak hskipz@skip
          fi
          ignorespaces
          fi
          % end{macrocode}
          % changes{v1.3i}{2018/10/10}
          % {Don't introduce breakpoints if @nobreak is true and after sections}
          % begin{macrocode}
          else
          ifvmode
          if@nobreaknobreakelseif@noskipsecnobreakfifi
          fi
          % end{macrocode}
          %
          % begin{macrocode}
          fi}%
          %</2ekernel|latexrelease>
          %<latexrelease>EndIncludeInRelease
          %<latexrelease>IncludeInRelease{2015/10/01}%
          %<latexrelease> {@esphack}{hyphenation and nobreak after space hack}%
          %<latexrelease>def@esphack{%
          %<latexrelease> relax
          %<latexrelease> ifhmode
          %<latexrelease> spacefactor@savsf
          %<latexrelease> ifdim@savsk>z@
          %<latexrelease> ifdimlastskip=z@
          %<latexrelease> nobreak hskipz@skip
          %<latexrelease> fi
          %<latexrelease> ignorespaces
          %<latexrelease> fi
          %<latexrelease> fi}%
          %<latexrelease>EndIncludeInRelease
          %<latexrelease>IncludeInRelease{2015/01/01}%
          %<latexrelease> {@esphack}{hyphenation and nobreak after space hack}%
          %<latexrelease>def@esphack{%
          %<latexrelease> relax
          %<latexrelease> ifhmode
          %<latexrelease> spacefactor@savsf
          %<latexrelease> ifdim@savsk>z@
          %<latexrelease> nobreak hskipz@skip
          %<latexrelease> ignorespaces
          %<latexrelease> fi
          %<latexrelease> fi}%
          %<latexrelease>EndIncludeInRelease
          %<latexrelease>IncludeInRelease{0000/00/00}%
          %<latexrelease> {@esphack}{hyphenation and nobreak after space hack}%
          %<latexrelease>def@esphack{%
          %<latexrelease> relax
          %<latexrelease> ifhmode
          %<latexrelease> spacefactor@savsf
          %<latexrelease> ifdim@savsk>z@
          %<latexrelease> ignorespaces
          %<latexrelease> fi
          %<latexrelease> fi}%
          %<latexrelease>EndIncludeInRelease
          %<*2ekernel>
          % end{macrocode}
          % end{macro}


          Basically the bit you query, you need to add a space (or zero width) so as not to inhibit hyphenation, and then need to add the nobreak so the space doesn't introduce a breakpoint.






          share|improve this answer













          You see more change comments, and older versions in the source:



          % begin{macro}{@esphack}
          % Companion to |@bsphack|. If this command is not properly paired
          % with |@bsphack| one might end up with a low-level TeX{} error:
          % ``BAD spacefactor''. One possible cause is calling |@bsphack| in
          % vertical mode, then doing something that gets you (sometimes) into
          % horizontal mode and finally calling |@esphack|. Even if no error
          % is generated that is wrong, because |@esphack| will then use the
          % saved values for |@savsk| and |@savsf| from some earlier
          % invocation of |@bsphack| which will have nothing to do with the
          % current situation.
          % changes{v1.3d}{2015/01/11}{Allow hyphenation (Donald Arseneau pr/3498) (latexrelease)}
          % begin{macrocode}
          %</2ekernel>
          %<latexrelease>IncludeInRelease{2018/10/10}%
          %<latexrelease> {@esphack}{hyphenation and nobreak after space hack}%
          %<*2ekernel|latexrelease>
          def@esphack{%
          relax
          ifhmode
          spacefactor@savsf
          ifdim@savsk>z@
          % end{macrocode}
          % changes{v1.3f}{2015/11/07}
          % {Only space if there is no space at the end of the hlist latex/4443}
          % begin{macrocode}
          ifdimlastskip=z@
          nobreak hskipz@skip
          fi
          ignorespaces
          fi
          % end{macrocode}
          % changes{v1.3i}{2018/10/10}
          % {Don't introduce breakpoints if @nobreak is true and after sections}
          % begin{macrocode}
          else
          ifvmode
          if@nobreaknobreakelseif@noskipsecnobreakfifi
          fi
          % end{macrocode}
          %
          % begin{macrocode}
          fi}%
          %</2ekernel|latexrelease>
          %<latexrelease>EndIncludeInRelease
          %<latexrelease>IncludeInRelease{2015/10/01}%
          %<latexrelease> {@esphack}{hyphenation and nobreak after space hack}%
          %<latexrelease>def@esphack{%
          %<latexrelease> relax
          %<latexrelease> ifhmode
          %<latexrelease> spacefactor@savsf
          %<latexrelease> ifdim@savsk>z@
          %<latexrelease> ifdimlastskip=z@
          %<latexrelease> nobreak hskipz@skip
          %<latexrelease> fi
          %<latexrelease> ignorespaces
          %<latexrelease> fi
          %<latexrelease> fi}%
          %<latexrelease>EndIncludeInRelease
          %<latexrelease>IncludeInRelease{2015/01/01}%
          %<latexrelease> {@esphack}{hyphenation and nobreak after space hack}%
          %<latexrelease>def@esphack{%
          %<latexrelease> relax
          %<latexrelease> ifhmode
          %<latexrelease> spacefactor@savsf
          %<latexrelease> ifdim@savsk>z@
          %<latexrelease> nobreak hskipz@skip
          %<latexrelease> ignorespaces
          %<latexrelease> fi
          %<latexrelease> fi}%
          %<latexrelease>EndIncludeInRelease
          %<latexrelease>IncludeInRelease{0000/00/00}%
          %<latexrelease> {@esphack}{hyphenation and nobreak after space hack}%
          %<latexrelease>def@esphack{%
          %<latexrelease> relax
          %<latexrelease> ifhmode
          %<latexrelease> spacefactor@savsf
          %<latexrelease> ifdim@savsk>z@
          %<latexrelease> ignorespaces
          %<latexrelease> fi
          %<latexrelease> fi}%
          %<latexrelease>EndIncludeInRelease
          %<*2ekernel>
          % end{macrocode}
          % end{macro}


          Basically the bit you query, you need to add a space (or zero width) so as not to inhibit hyphenation, and then need to add the nobreak so the space doesn't introduce a breakpoint.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered 1 hour ago









          David CarlisleDavid Carlisle

          495k4111411889




          495k4111411889













          • I just added another example to my question to make my point about consecutive commands that are wrapped into @bsphack..@esphack clearer.

            – Questioner
            44 mins ago











          • Thanks for your reply. I see. But wouldn't it be better to add that space (of zero width) in a way which also restores lastskip so that one can have consecutive commands that don't produce visible output in a row? If by now you do something like A label{foo} label{bar} B , lastskip will in any case be 0 after label{foo} which affects the behavior of label{bar} because with label{bar} @savsk will not be larger than z@ any more so that ignorespaces won't get carried out although it should be carried out? Is nobreakhskip-@savsknobreakhskip@savsk unsafe?

            – Questioner
            32 mins ago











          • To be honest: It is not clear to me what is meant by "not to inhibit hyphenation". Do people intend to place, e.g., label into the middle of a word? If so: What is the insertion of (zero-width-)glue good for in the context of not inhibiting hyphenation?

            – Questioner
            16 mins ago





















          • I just added another example to my question to make my point about consecutive commands that are wrapped into @bsphack..@esphack clearer.

            – Questioner
            44 mins ago











          • Thanks for your reply. I see. But wouldn't it be better to add that space (of zero width) in a way which also restores lastskip so that one can have consecutive commands that don't produce visible output in a row? If by now you do something like A label{foo} label{bar} B , lastskip will in any case be 0 after label{foo} which affects the behavior of label{bar} because with label{bar} @savsk will not be larger than z@ any more so that ignorespaces won't get carried out although it should be carried out? Is nobreakhskip-@savsknobreakhskip@savsk unsafe?

            – Questioner
            32 mins ago











          • To be honest: It is not clear to me what is meant by "not to inhibit hyphenation". Do people intend to place, e.g., label into the middle of a word? If so: What is the insertion of (zero-width-)glue good for in the context of not inhibiting hyphenation?

            – Questioner
            16 mins ago



















          I just added another example to my question to make my point about consecutive commands that are wrapped into @bsphack..@esphack clearer.

          – Questioner
          44 mins ago





          I just added another example to my question to make my point about consecutive commands that are wrapped into @bsphack..@esphack clearer.

          – Questioner
          44 mins ago













          Thanks for your reply. I see. But wouldn't it be better to add that space (of zero width) in a way which also restores lastskip so that one can have consecutive commands that don't produce visible output in a row? If by now you do something like A label{foo} label{bar} B , lastskip will in any case be 0 after label{foo} which affects the behavior of label{bar} because with label{bar} @savsk will not be larger than z@ any more so that ignorespaces won't get carried out although it should be carried out? Is nobreakhskip-@savsknobreakhskip@savsk unsafe?

          – Questioner
          32 mins ago





          Thanks for your reply. I see. But wouldn't it be better to add that space (of zero width) in a way which also restores lastskip so that one can have consecutive commands that don't produce visible output in a row? If by now you do something like A label{foo} label{bar} B , lastskip will in any case be 0 after label{foo} which affects the behavior of label{bar} because with label{bar} @savsk will not be larger than z@ any more so that ignorespaces won't get carried out although it should be carried out? Is nobreakhskip-@savsknobreakhskip@savsk unsafe?

          – Questioner
          32 mins ago













          To be honest: It is not clear to me what is meant by "not to inhibit hyphenation". Do people intend to place, e.g., label into the middle of a word? If so: What is the insertion of (zero-width-)glue good for in the context of not inhibiting hyphenation?

          – Questioner
          16 mins ago







          To be honest: It is not clear to me what is meant by "not to inhibit hyphenation". Do people intend to place, e.g., label into the middle of a word? If so: What is the insertion of (zero-width-)glue good for in the context of not inhibiting hyphenation?

          – Questioner
          16 mins ago












          Questioner is a new contributor. Be nice, and check out our Code of Conduct.










          draft saved

          draft discarded


















          Questioner is a new contributor. Be nice, and check out our Code of Conduct.













          Questioner is a new contributor. Be nice, and check out our Code of Conduct.












          Questioner is a new contributor. Be nice, and check out our Code of Conduct.
















          Thanks for contributing an answer to TeX - LaTeX Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f481259%2funderstanding-latex-2es-esphack%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Lallio

          Unable to find Lightning Node

          Futebolista