Как автоматически повернуть страницы pdflscape в альбомной ориентации при добавлении нескольких страниц

Как автоматически повернуть страницы pdflscape в альбомной ориентации при добавлении нескольких страниц

Я использую pdflscapeдля своих альбомных страниц в портретном документе формата A5. Затем я использую следующую командную строку для подготовки PDF к печати на бумаге формата A4:

pdftk blank.pdf document.pdf output padded_document.pdf verbose && pdfnup --paper a4paper padded_document.pdf

Однако в результате padded_document-nup.pdfвсе страницы альбомной ориентации по-прежнему имеют альбомную ориентацию в формате А6, а не повернуты и имеют формат А5.

Есть ли способ автоматически повернуть их, чтобы они отображались в предполагаемом размере? Я знаю, что я мог бы заменить pdflscapeна lscape, но я все время забываю об этом, и было бы неплохо иметь решение, которое не требует изменения моего документа каждый раз, когда я хочу его распечатать. Так что либо хитрый трюк в PDF, либо что-то, что я могу вставить в свою командную строку.

\documentclass[a5paper]{article}
\usepackage{mwe}
\usepackage{pdflscape}
\begin{document}
\blindtext\blindtext
\begin{landscape}
\thispagestyle{empty}
\begin{figure}
\includegraphics[width=\linewidth]{example-image-a}
\caption{Landscape figure}
\end{figure}
\end{landscape}
\blindtext\blindtext

\blindtext\blindtext
\end{document}

Что в варианте 4 на странице с границами страниц (не желаемый вариант 2 на странице без границ, но вы поняли идею) выглядит так:

3 портрета, 1 альбомная ориентация

Что этодолженвыглядит так:

4 портрет Я подделал последний вариант, просто используя lscapeвместо pdflscape.

решение1

pdfnupиспользует pdfjam, который в свою очередь использует пакет LaTeX pdfpages. Последний знает опцию rotateoversize, издокументация:

Эта опция позволяет поворачивать слишком большие страницы. Например, страницы в альбомной ориентации имеют слишком большой размер относительно их портретной копии, поскольку они не совпадают с контуром портретной страницы без их поворота. По умолчанию слишком большие страницы масштабируются и не поворачиваются. Либо trueили false(или никакого значения, что эквивалентно true). (По умолчанию: rotateoversize=false)

Эту опцию можно указать в командной строке для pdfnupили pdfjam:

$ pdfnup --paper a4paper --rotateoversize true test.pdf

Страница 1 Страница 2

решение2

Хотите что-то подобное?

2xA5 на A4

\documentclass[a5paper]{article}
\usepackage{mwe}
\usepackage{pdflscape}
\usepackage{pgfpages}
\pgfpagesdeclarelayout{my 2up}
{
  \def\pgfpageoptionborder{0pt}
}
{
  \pgfpagesphysicalpageoptions
  {%
    logical pages=2,%
    physical height=\paperwidth,%
    physical width=\paperheight,%
  }
  \pgfpageslogicalpageoptions{1}
  {%
    resized width=.5\pgfphysicalwidth,%
    resized height=\pgfphysicalheight,%
    center=\pgfpoint{.25\pgfphysicalwidth}{.5\pgfphysicalheight}%
  }%
  \pgfpageslogicalpageoptions{2}
  {%
    resized width=.5\pgfphysicalwidth,%
    resized height=\pgfphysicalheight,%
    center=\pgfpoint{.75\pgfphysicalwidth}{.5\pgfphysicalheight}%
  }%
}
\pgfpagesuselayout{my 2up}[a4paper]
\begin{document}
  \blindtext\blindtext
  \begin{landscape}
    \thispagestyle{empty}
    \begin{figure}
      \includegraphics[width=\linewidth]{example-image-a}
      \caption{Landscape figure}
    \end{figure}
  \end{landscape}
  \blindtext\blindtext

  \blindtext\blindtext
\end{document}

решение3

Надеюсь, это будет полезнее, чем другое. Вы можете конвертировать A4 или A5 (один уникальный размер для входного файла), альбомную или портретную ориентацию (одна ориентация для входного файла) в файл формата A4, состоящий из двух объединенных страниц A5 альбомной ориентации на каждой странице.

#!/bin/bash

IFS='
'

FILE_EXT=$(echo "$1" | cut -f2 -d '.')

# Vérifier si fichier pdf
if [ "$FILE_EXT" != pdf ]
then
echo "Attention, le fichier $1 n'est pas un fichier .pdf"
exit
fi

FILE_NAME=$(echo "$1" | cut -f1 -d '.')

# Détecter la présence du fichier en .pdf
if [ ! -e "./$FILE_NAME.pdf" ]
then
echo "Attention, le fichier $FILE_NAME.pdf n'existe pas"
exit
fi

X=$(pdfinfo $FILE_NAME.pdf | grep 'Page rot:' | cut -d":" -f2)

if [ $X -eq 0 ] || [ $X -eq 180 ] ;
    then echo "portrait"
    pdftk $FILE_NAME.pdf cat 1-endright output sortie-0.pdf
    else echo "landscape"
    cp $FILE_NAME.pdf sortie-0.pdf
fi

echo '\documentclass[a4paper]{article}' > sortie-1.tex
echo '\usepackage{pdfpages}' >> sortie-1.tex
echo '\begin{document}' >> sortie-1.tex
echo "\includepdf[pages=-,nup=1x2]{sortie-0.pdf}" >> sortie-1.tex
echo '\end{document}' >> sortie-1.tex

pdflatex sortie-1.tex 

mv sortie-1.pdf "${FILE_NAME}-Sortie.pdf"
rm sortie-*

решение4

Если это работает lscapeдля печати, почему бы не использовать такой скрипт для печатной версии:

#!/bin/bash

IFS='
'

cat $1 | sed "s/pdflscape/lscape/g" > Sortie-0.tex
pdflatex Sortie-0.tex
pdfnup --paper a4paper Sortie-0.pdf -o Sortie-1.pdf
rm Sortie-0*

Связанный контент