Matlab: открытие свойства редактора или plotbrowser заставляет корректную аннотацию текстового поля;аннотирование без него невозможно - PullRequest
1 голос
/ 16 июня 2011

У меня есть обычно хорошо работающая программа, которая берет файлы, строит их, выплевывает PDF (размер буквы). Я использую аннотации, чтобы поместить заголовок над набором из трех сюжетов и использовать в качестве нижнего колонтитула с информацией о файле и датой. Мне бы хотелось, чтобы заголовок находился вверху страницы, заполнялся от поля к краю по центру.

У меня есть два способа запуска программы: в «пакетном» режиме и в «интерактивном» режиме. В интерактивном режиме я создаю фигуру с помощью простой команды figure(). В «пакетном» режиме я создаю фигуру с figure('visible','off'). Вот моя команда для создания аннотации:

annotation(obj.hFigure(f),'textbox',[0 0.9 1 0.1],...
    'String',title,...
    'HorizontalAlignment','center',...
    'FontSize',18,...
    'LineStyle','none',...
    'FitBoxToText','off');

Здесь «obj.hFigure (f)» - просто дескриптор фигуры, которую я сейчас обрабатываю. Как вы можете видеть, я помещаю фигуру в верхнюю часть рисунка и проверяю, что текст выходит за нижнюю часть окна (если он больше).

Моя проблема с полями в приведенной выше аннотации. В пакетном режиме (без показа рисунков) я получаю около 10% полей с обеих сторон текста, что портит макет. В интерактивном режиме (фигуры отображаются) я не получаю поля: текст корректно перетекает от одного края к другому.

Я сузил проблему до следующего: я могу получить правильный ответ на печать ps в пакетном режиме, если сделаю цифры видимыми (figure('visible','on')) И откройте

propertyeditor(gcf);
plotbrowser(gcf);

после построения каждой фигуры. Это заставляет программу занимать примерно вдвое больше времени (что не так уж и сложно). Но я не понимаю, что эти две команды делают, а drawnow или refresh не выполняют?!

1 Ответ

0 голосов
/ 15 октября 2012

Я не уверен в вашем конкретном случае, но когда сталкивался с подобной проблемой в прошлом, я добился большого успеха, явно установив размер фигуры с помощью:

set(gcf, 'Position', [100  100  300 300])

, а затем, перед печатью / сохранениемустановив автоматический режим PaperPositionMode, что, по-видимому, приводит к тому, что напечатанный рисунок имеет тот же размер, что и показанный на экране:

set(gcf, 'PaperPositionMode','auto')
...