-
Notifications
You must be signed in to change notification settings - Fork 2.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
LaTeX: optionally apply a second forceful wrapping of long code lines #8854
Conversation
This breaks with Unicode in the code-blocks.... I got a failure from our own sphinx.pdf due to the examples with directory trees, with a test where the "force wrap" method is to be used always. But then it worked with using |
7772b2a
to
0076ad3
Compare
sphinx/texinputs/sphinx.sty
Outdated
\def\spx@PYGspec{{#1}}% | ||
\spx@PYG#2\@empty\@empty\@empty\@empty\relax | ||
}% | ||
\def\spx@PYG#1#2#3#4{% |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The idea here is that we split the argument of the highlighting macro (which could for example do \colorbox
) in small bits of 4 tokens, so that highlighting and breakpoints can both cohabit.
But in case of Unicode code points and latex_engine is "pdflatex", this will break because each of #1, #2, #3, #4 is an octet so we are possibly cutting apart a multi-bytes Unicode character. It would be lots of complications to make it work.
However if Unicode code-points are frequent in source it is better to use 'lualatex'
, 'xelatex'
, and 'uplatex'
. I did tests with 'lualatex'
and it works fine (although much slower than pdflatex).
@jfbu |
This needs special coding only for pdflatex, Unicode TeX engines already handle Unicode characters as one token. The utf8x LaTeX input encoding is not supported, only utf8.
I have added Unicode support for the Now, the output looks like this (I removed letters/digits to change length, so examples are only typographical): In the above I added some non-ascii letters, to check with
to allow Greek and Cyrillic. As the font changes, the character width also, and as a result, we see a letter sticking a bit in margin, but this is exceptional. If we typeset the same using Unicode engine, all is exactly aligned: and I used for this
Even with To hard-wrap all code-blocks at the maximal width:
|
sphinx/texinputs/sphinx.sty
Outdated
% box does not store in an accessible way what was the maximal | ||
% line-width during paragraph building. | ||
% | ||
% If the max width exceed the linewidth by at least 4 character |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The 3
in 4=3+1
is in truth the value of verbatimmaxoverfull key to 'sphinxsetup'
The Changes only indicates in this PR that #8849 is fixed but makes no mention so far of the new sphinxsetup keys |
@sebastien-riou Due to potential frailty the
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM with nits.
CHANGES
Outdated
@@ -131,6 +131,7 @@ Bugs fixed | |||
* #8780: LaTeX: long words in narrow columns may not be hyphenated | |||
* #8788: LaTeX: ``\titleformat`` last argument in sphinx.sty should be | |||
bracketed, not braced (and is anyhow not needed) | |||
* #8849: LaTex: code-block printed out of margin |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As you commented by yourself, it would be better to mention new configurations here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for reviewing, done. I will merge after testing completes. The behaviour is "opt-in" so no change to users if not using the feature.
Closes #8849
To try it out:
This is a bit experimental as I need to confirm that Pygments LaTeXFormatter output, as we use it, always comply with the pre-conceptions which are summarized in the latex code comments.
For this input:
the following output is obtained in PDF:
Non highlighted strings like in first example can break at each character. Highlighted strings only every four characters. That here it breaks without one or two characters going in margin or one or two spaces at end is luck. Here is with removing one character before on same line, we see now it breaks one character short of ending line.
Actually I could make even highlighted strings have breakpoints at each character. But it makes me pain to let the computer suffer with lots of extra work.