Экспорт темы в Markdown

Посмотрим. Я включу сюда блок кода с довольно большим количеством кода и посмотрим, как это будет выглядеть при печати:

import java.util.Scanner;

/**
 * Игра AceyDucey
 * 
 * Основано на базовой игре AceyDucey здесь
 * https://github.com/coding-horror/basic-computer-games/blob/main/01%20Acey%20Ducey/aceyducey.bas
 * Примечание: Идея заключалась в создании версии базовой игры 1970-х годов на Java, без введения
 * новых функций — не добавлен дополнительный текст, проверка ошибок и т. д.
 */
public class AceyDucey {

    // Текущая сумма денег игрока
    private int playerAmount;

    // Первая выданная карта дилера
    private Card firstCard;

    // Вторая выданная карта дилера
    private Card secondCard;

    // Выданная карта игрока
    private Card playersCard;

    // Флаг для отображения вступления/инструкций к игре
    private boolean firstTimePlaying = true;

    // Состояние игры для определения окончания игры
    private boolean gameOver = false;

    // Используется для ввода с клавиатуры
    private final Scanner kbScanner;

    // Постоянные значения для карт из колоды — 2 минимальное, 14 (Туз) максимальное
    public static final int LOW_CARD_RANGE = 2;
    public static final int HIGH_CARD_RANGE = 14;

    public AceyDucey() {
        // Инициализация суммы денег игрока
        playerAmount = 100;

        // Инициализация сканера клавиатуры
        kbScanner = new Scanner(System.in);
    }

    // Метод «Играть снова» — публичный метод, вызываемый из класса, запускающего игру
    // Если игрок вводит YES, то игра может быть сыграна снова (возвращается true)
    // иначе нет (false)
    public boolean playAgain() {
        System.out.println();
        System.out.println("ИЗВИНИ, ДРУГ, НО ТЫ ПРОИГРАЛ ВСЁ.");
        System.out.println();
        System.out.println();
        System.out.print("ПОПРОБОВАТЬ СНОВА (ДА ИЛИ НЕТ) ");
        String playAgain = kbScanner.next().toUpperCase();
        System.out.println();
        System.out.println();
        if (playAgain.equals("YES")) {
            return true;
        } else {
            System.out.println("ОК, НАДЕЮСЬ, ТЕБЕ БЫЛО ИНТЕРЕСНО!");
            return false;
        }
    }

    // Метод игрового цикла

    public void play() {

        // Продолжать разыгрывать руки, пока у игрока не кончатся деньги
        do {
            if (firstTimePlaying) {
                intro();
                firstTimePlaying = false;
            }
            displayBalance();
            drawCards();
            displayCards();
            int betAmount = getBet();
            playersCard = randomCard();
            displayPlayerCard();
            if (playerWon()) {
                System.out.println("ВЫ ВЫИГРАЛИ!!");
                playerAmount += betAmount;
            } else {
                System.out.println("ИЗВИНИ, ВЫ ПРОИГРАЛИ");
                playerAmount -= betAmount;
                // У игрока закончились деньги?
                if (playerAmount <= 0) {
                    gameOver = true;
                }
            }

        } while (!gameOver); // Продолжать играть, пока у игрока не кончатся деньги
    }

    // Метод для определения, выиграл ли игрок (возвращается true) или проиграл (возвращается false)
    // Чтобы выиграть, карта игрока должна находиться в диапазоне между первой и второй картой дилера
    // включительно.
    private boolean playerWon() {
        // Победитель
        return (playersCard.getValue() >= firstCard.getValue())
                && playersCard.getValue() <= secondCard.getValue();

    }

    private void displayPlayerCard() {
        System.out.println(playersCard.getName());
    }

    // Получить ставку игрока и вернуть сумму
    // 0 считается допустимой ставкой, но ставка больше доступной у игрока суммы недопустима
    // метод будет повторяться, пока не будет введена допустимая ставка.
    private int getBet() {
        boolean validBet = false;
        int amount;
        do {
            System.out.print("КАКАЯ ВАША СТАВКА ");
            amount = kbScanner.nextInt();
            if (amount == 0) {
                System.out.println("ТРУС!!");
                validBet = true;
            } else if (amount > playerAmount) {
                System.out.println("ИЗВИНИ, ДРУГ, НО ТЫ СДЕЛАЛ СЛИШКОМ БОЛЬШУЮ СТАВКУ.");
                System.out.println("У ТЕБЯ ЕСТЬ ТОЛЬКО " + playerAmount + " ДОЛЛАРОВ ДЛЯ СТАВКИ.");
            } else {
                validBet = true;
            }
        } while (!validBet);

        return amount;
    }

    private void displayBalance() {
        System.out.println("У ТЕБЯ ТЕПЕРЬ " + playerAmount + " ДОЛЛАРОВ.");
    }

    private void displayCards() {
        System.out.println("ВОТ ДВЕ СЛЕДУЮЩИЕ КАРТЫ: ");
        System.out.println(firstCard.getName());
        System.out.println(secondCard.getName());
    }

    // Выдать две карты дилера и сохранить их для дальнейшего использования.
    // Убедиться, что первая карта имеет меньшее значение, чем вторая
    private void drawCards() {

        do {
            firstCard = randomCard();
            secondCard = randomCard();
        } while (firstCard.getValue() >= secondCard.getValue());
    }

    // Создать случайную карту
    private Card randomCard() {
        return new Card((int) (Math.random()
                * (HIGH_CARD_RANGE - LOW_CARD_RANGE + 1) + LOW_CARD_RANGE));
    }

    public void intro() {
        System.out.println("ИГРА В КАРТЫ ACEY DUCEY");
        System.out.println("CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY");
        System.out.println();
        System.out.println();
        System.out.println("ACEY-DUCEY ИГРАЕТСЯ СЛЕДУЮЩИМ ОБРАЗОМ");
        System.out.println("ДИЛЕР (КОМПЬЮТЕР) ВЫДАЁТ ДВЕ КАРТЫ РУБАШКОЙ ВВЕРХ");
        System.out.println("У ВАС ЕСТЬ ВОЗМОЖНОСТЬ СДЕЛАТЬ СТАВКУ ИЛИ НЕ ДЕЛАТЬ ЕЁ В ЗАВИСИМОСТИ");
        System.out.println("ОТ ТОГО, СЧИТАЕТЕ ЛИ ВЫ, ЧТО КАРТА БУДЕТ ИМЕТЬ");
        System.out.println("ЗНАЧЕНИЕ МЕЖДУ ДВУМЯ ПЕРВЫМИ.");
        System.out.println("ЕСЛИ ВЫ НЕ ХОТИТЕ ДЕЛАТЬ СТАВКУ, ВВЕДИТЕ: 0");
    }
}

Обратите внимание, что у нас есть довольно полная поддержка доступности, поэтому я был бы рад услышать, что именно не работает для вашего слепого пользователя @thresholdpeople.

Кроме того, блок кода выше выглядит нормально в печатной версии для меня. Я просто нажал «Печать» в Chrome, затем «Сохранить как PDF», чтобы сгенерировать PDF-версию этой самой темы:

Экспорт темы в формате markdown - функция - Discourse Meta.pdf (249.9 KB)

Я не вижу проблемы. Если вы видите проблему, пожалуйста, укажите конкретные места в PDF, которые некорректны. Спасибо!