2013-04-22 11 views
8

bloki kodu wyglądać brzydko (sprawdź cudzysłowów) w pliku PDF:Making Sphinx produkować untypogrified bloki kodu w pliku PDF

enter image description here

używam wersji 1.1.3 Sfinksa i stosowane następujące polecenie, aby produkować doc:

$ make latexpdf 

również kopiowania fragmentu kodu z pliku PDF niszczy wcięć przy wklejaniu:

@view_config(route_name=’hello’) 
def hello_world(request): 
return Response(’Hello World!’) 

Spodziewam się następująco:

@view_config(route_name=’hello’) 
def hello_world(request): 
    return Response(’Hello World!’) 

To byłoby jeszcze ładniej:

@view_config(route_name='hello') 
def hello_world(request): 
    return Response('Hello World!') 
+0

Zauważ, że z nowszym Sfinksem (testowałem z 1.3.5), nie ma nic szczególnego do zrobienia, aby uniknąć konwersji kwotowań, gdy cytaty są w blokach kodu. – jfbu

Odpowiedz

3

Sphinx jest naprawdę znakomitym narzędziem, ale ja też mam kilka problemów z wyjściem domyślny PDF tarczy latexpdf.

Konkretnie:

  • Pojedyncze cudzysłowy w blokach kodu są konwertowane do ostrych cytatów stylu, który nie wygląda dobrze w kodzie źródłowym.
  • Bloki kodu nie są wcięte z tekstu głównego. U mnie jest to mniej czytelne.
  • Preferuję inne czcionki i figurki, ale to tylko osobisty wybór i można go skonfigurować.

Niektóre z nich mogą być ustalone w lateksie wstępnie kłusować części conf.py Sphinx ale cytaty są modyfikowane przez Sfinksa podmiotom zwyczaj LaTeX więc pakiet upquote LaTeX nie może być użyty do ich poprawiania.

Po wielu eksperymentach z różnymi opcjami konfiguracji zakończyłem pisanie małego skryptu, aby zmodyfikować źródło LaTeX przed zbudowaniem pliku PDF. Skrypt to here, a wynik, który chciałem wygenerować, to here. (Dla porównania here jest domyślnym wyjściem dla tego samego dokumentu.)

Jeśli ktoś ma czystsze rozwiązanie, na przykład takie, które można wykonać całkowicie za pomocą Sphinx conf.py, więc zmiany zostaną odebrane przez ReadTheDocs, wtedy być zainteresowanym.

Problem z utratą wcięcia podczas kopiowania i wklejania z pliku PDF prawdopodobnie nie jest problemem Sphinx/LaTeX.

2

To tylko częściowa odpowiedź, która może doprowadzić do ostatecznego rozwiązania. Aby wyłączyć cytaty typograficzne (znane również jako cytaty kręcone lub inteligentne) dla wyjścia HTML w Sphinx, zmień domyślne ustawienie w conf.py na SmartyPantsfrom True to False.

Zakładam, że można znaleźć funkcję w Sfinksie, która przekształca cytaty i używa tej samej logiki z wyjścia HTML i zastosować ją do wyjścia PDF.

+0

Ta opcja już nie działa (Sphinx 1.6.2? I 1.7.dev20170612). – johndodo

+0

@johndodo dla Sphinx ≥1,6, zobacz https://github.com/rtfd/readthedocs.org/issues/2940 –

+0

Nice - i ciekawy timing (5 dni temu). Niestety nie znalazłem twojej strony, ponieważ zaoszczędziłoby mi to trochę czasu, zamiast tego przeszedłem przez docutils docs. Ale poprawianie dokumentów jest dobrym pomysłem. – johndodo

0

The option proposed by Steve Piercy teraz już nie działa (od Sfinksa 1.6):

Deprecated since version 1.6: Use the smart_quotes option 
in the Docutils configuration file (docutils.conf) instead. 

co nie było oczywiste dla mnie było, jak zastosować to ustawienie.Musisz utworzyć plik docutils.conf i umieścić go w one of these locations:

  • /etc/docutils.conf
  • ./docutils.conf
  • ~/.docutils

Najprostszym rozwiązaniem jest umieścić go tam, gdzie budujesz dokumenty od - YMMV. Powinien zawierać co najmniej to:

[general] 
smart_quotes: no 
+1

tylko po to, aby zaznaczyć, że te (prawidłowe) informacje nie powinny być potrzebne dla bloków kodu. Przetestowałem tylko dla potwierdzenia w Sphinx 1.3.5, a przy obecnym 1.6.2, że proste cytaty w blokach kodu nie są modyfikowane. – jfbu

+0

Prawda. Najpierw pomyślałem, że wina Sphinksa polegała na tym, że kopiowałem blok z innego miejsca, więc było już zepsute. Ale moja frustracja ze Sphinxem polegała na tym, że zajęło mi dużo czasu, aby dowiedzieć się, jak zastosować to ustawienie - więc mam nadzieję, że ta odpowiedź pomoże komuś w przyszłości. – johndodo